我在一个基于对话框的MFC程序中,插入一个CRichEditCtrl编辑框控件,并在这个编辑框中实现超链接功能,即就像QQ聊天环境中当发送一个文件时出现 "寒积宣要发送给您文件“03.jpg(403KB)”,您是要接收,另存为还是谢绝该文件"这些文字,其中点"接收"或者"另存为"等就可以响应.我想问一下要实现这个功能是不是要用到CRichEditCtrl20这个版本的,我用VC++6.0可以实现吗?应该怎么实现呢,各位能不能帮我一哈,如果有原代码最好哈,若有请帮忙发一下好吗?.多谢!
解决方案 »
- 请指点一下如何用vc来改写这个画图程序,不用详细
- clistbox 重载DRAWITEM失败
- 文件对话框,如何让FileFilter当中的第二项成为默认的文件类型?
- MFC 使用UDP协议实现广播
- 怎么读出一个内存地址中的值啊?
- 调试的问题:高手请进!!!!!!!!!!
- 用SDK寫的DLL,在VB中調用時出現"Can not find Entry point" 的問題.
- 大吐血~~....: ffmm 来拿分~~
- 有没有"Please enter the path of CRTEXE.C"错误的解决方法?我不知道具体原因!
- 请问
- 关于在bcgtoolbar中添加一个combo的控件
- 以前用过vc,现在公司需要用c++builder,我还没有毕业,真不知道以后路在何方了?
dqgcxy.whu.edu.cn 2005-5-13 电气工程学院研究生会
102、在RichEdit中实现超链接 首先在Form上放置一个RichEdit。在窗体的构造函数中添加以下代码:__fastcall TMainForm::TMainForm(TComponent* Owner): TForm(Owner){unsigned mask = SendMessage(RichEdit1->Handle, EM_GETEVENTMASK, 0, 0);SendMessage(RichEdit1->Handle, EM_SETEVENTMASK, 0, mask | ENM_LINK);SendMessage(RichEdit1->Handle, EM_AUTOURLDETECT, true, 0); //自动检测URLRichEdit1->Text = "欢迎访问C++ Builder\n""网址: http://www.ccrun.com\n""偶的信箱:\n""mailto::[email protected] \n""嘿嘿\n";}重载窗体的WndProc1。在.h中添加:protected:virtual void __fastcall WndProc(Messages::TMessage &Message);2。在.cpp中添加://---------------------------------------------------------------------------void __fastcall TMainForm::WndProc(Messages::TMessage &Message){if (Message.Msg == WM_NOTIFY){if (((LPNMHDR)Message.LParam)->code == EN_LINK){ENLINK* p = (ENLINK *)Message.LParam;if (p->msg == WM_LBUTTONDOWN){SendMessage(RichEdit1->Handle, EM_EXSETSEL, 0, (LPARAM)&(p->chrg));ShellExecute(Handle, "open", RichEdit1->SelText.c_str(), 0, 0, SW_SHOWNORMAL);}}}TForm::WndProc(Message);}如何在RichEdit中实现上标下标 以下代码已测试通过。在Form中放置一个RichEdit,两个Button,完整代码如下://--------------------------------------------------------------------------- typedef enum{CFM_Superscript, // 上标CFM_Subscript, // 下标CFM_Normal // 普通文本}TCharacterFormat;void MySetCharFormat(TRichEdit *RichEdit, TCharacterFormat CharacterFormat){// ccrun(老妖)根据Delphi超级猛料中的资料修改而成// 欢迎光临 C++ Builder 研究 http://www.ccrun.comTCharFormat Format;Format.cbSize = sizeof(Format);Format.dwMask = CFM_OFFSET;// Character offset, in twips, from the baseline.// If the value of this member is positive,// the character is a superscript;// if it is negative, the character is a subscript.switch(CharacterFormat){case CFM_Superscript:Format.yOffset = 60;break;case CFM_Subscript:Format.yOffset = -60;break;case CFM_Normal:Format.yOffset = 0;break;default:break;}// The EM_SETCHARFORMAT message sets character formatting in a rich edit control.// SCF_SELECTION: Applies the formatting to the current selectionRichEdit->Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(&Format));}//---------------------------------------------------------------------------// 先选中Richedit中的部分文本,然后点击此按钮,选中文本将变成上标void __fastcall TForm1::Button1Click(TObject *Sender){// 上标MySetCharFormat(RichEdit1, CFM_Superscript);}//---------------------------------------------------------------------------// 先选中Richedit中的部分文本,然后点击此按钮,选中文本将变成下标void __fastcall TForm1::Button2Click(TObject *Sender){// 下标MySetCharFormat(RichEdit1, CFM_Subscript);}
2.
创建RichEdit2.0控件
CreateEx(0, _T("RichEdit20A"), NULL, WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP
|ES_READONLY|ES_WANTRETURN|ES_MULTILINE,
rect.left, rect.top, cx, cy,
pParentWnd->m_hWnd, (HMENU)nID, NULL);
3. 设定选中的文字为链接显示
CHARFORMAT2 cf2;
ZeroMemory(&cf2, sizeof(CHARFORMAT2));//
cf2.cbSize = sizeof(CHARFORMAT2);
cf2.dwMask = CFM_LINK;
cf2.dwEffects |= CFE_LINK;
m_cRichEdit.SendMessage(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);
4.支持链接的点击响应
m_cRichEdit.SetEventMask(ENM_LINK);
5.响应链接的点击EN_LINKBEGIN_MESSAGE_MAP(CMyRichEdit, CRichEditCtrl)
//{{AFX_MSG_MAP(CChatEdit)
//}}AFX_MSG_MAP
ON_NOTIFY_REFLECT(EN_LINK,OnURL)
END_MESSAGE_MAP()
......void CMyRichEdit::OnURLClick(NMHDR *pNmhdr, LRESULT *pResult)
{
TCHAR LinkChar[512];
ENLINK *pLink = (ENLINK *)pNmhdr;
if (pLink->msg == WM_LBUTTONUP)
{
SetSel(penLink->chrg);//这是链接的文字范围
long Res = GetSelText((char *)LinkChar);//这是链接文字
//后面是你的处理过程
......
}
}