crichedit超链接问题。

yaoohfox 2009-06-26 06:42:33

小弟最近碰到个问题,需要在窗口的一个文本框显示一段文字 如“CSDN网站新闻1”新闻1显示是以超链接实现的,鼠标放在这个超链接后,鼠标状态变为手型,左键点击后,调用浏览器打开"新闻1"对应的网址“http://csdn.net/news.aspx?id=1”。

不知道坛子里有人以前做过相关的没,crichedite好像可以实现,但是相关资料一直没找到。谁能给点帮助,有代码就更好啦。 在此先谢谢啦。
...全文
204 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyxie 2009-06-26
  • 打赏
  • 举报
回复
zai ?
yaoohfox 2009-06-26
  • 打赏
  • 举报
回复
你在的?
yaoohfox 2009-06-26
  • 打赏
  • 举报
回复
问题解决了。能够指定的文字部分显示为超链接。 m_richedit.SetSel(-1,-1);错了,应该为m_richedit.SetSel(0,100);(实际选中的文字)。原先没有选择到文字。
具体文字对应的链接可以自己去对应了,谢谢Skyxie。结贴给分。
skyxie 2009-06-26
  • 打赏
  • 举报
回复
m_richedit.SetSel(8, 12); //将要设为link的部分选中

你的代码 m_richedit.SetSel(-1,-1); 了, 当然不能显示超链接
yaoohfox 2009-06-26
  • 打赏
  • 举报
回复
谢谢Skyxie了。你的代码不全,但是很有参考价值。我参考你的修改了下。但是还是不能显示为超链接。

CString test=_T("baidu");
m_richedit.SetSel(-1,-1);
m_richedit.ReplaceSel(test);
m_richedit.SetSel(-1,-1);
CHARFORMAT2 cf2;
ZeroMemory(&cf2,sizeof(CHARFORMAT2));
cf2.cbSize = sizeof(CHARFORMAT2);
cf2.dwMask = CFM_LINK;
cf2.dwEffects |= CFE_LINK;
::SendMessage(GetDlgItem(IDC_RICHEDIT21)->GetSafeHwnd(), EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);

我把上面的这段代码放在一个按钮的事件里执行不行。不能显示超链接。路过的高人指点一下。

自动检测超链接然后打开超链接我参考别人的基本做好了。http://topic.csdn.net/t/20061220/14/5243943.html#

1.添加消息定义
afx_msg void OnRichEditExLink(NMHDR* in_pNotifyHeader, LRESULT* out_pResult); //.h
ON_NOTIFY(EN_LINK, IDC_RICHEDIT1, OnRichEditExLink ) //.cpp

2.修改richedit控件属性
unsigned int mask = ::SendMessage(m_rich.m_hWnd, EM_GETEVENTMASK, 0, 0);
::SendMessage(m_rich.m_hWnd, EM_SETEVENTMASK, 0, mask | ENM_LINK | ENM_MOUSEEVENTS | ENM_SCROLLEVENTS | ENM_KEYEVENTS);
::SendMessage(m_rich.m_hWnd, EM_AUTOURLDETECT, true, 0);

3.消息处理函数
void CTESTEDITHPYDlg::OnRichEditExLink( NMHDR* in_pNotifyHeader, LRESULT* out_pResult )
{
ENLINK* l_pENLink = ( ENLINK* )in_pNotifyHeader ;
*out_pResult = 0 ;
switch( l_pENLink->msg )
{
case WM_LBUTTONDOWN:
{
CString l_URL ;
CHARRANGE l_CharRange ;
CRichEditCtrl *m_TempEdit;
m_TempEdit = (CRichEditCtrl*)CRichEditCtrl::FromHandle(l_pENLink->nmhdr.hwndFrom);
m_TempEdit->GetSel( l_CharRange ) ;
m_TempEdit->SetSel( l_pENLink->chrg ) ;
l_URL = m_TempEdit->GetSelText() ;
m_TempEdit->SetSel( l_CharRange ) ;
CWaitCursor l_WaitCursor ;
ShellExecute( this->GetSafeHwnd(), _T( "open" ), l_URL, NULL, NULL, SW_SHOWNORMAL ) ;
*out_pResult = 1 ;
}
break ;
}
}
yaoohfox 2009-06-26
  • 打赏
  • 举报
回复
谢谢Skyxie了。你的代码不全,但是很有参考价值。我参考你的修改了下。但是还是不能显示为超链接。

CString test=_T("baidu");
m_richedit.SetSel(-1,-1);
m_richedit.ReplaceSel(test);
m_richedit.SetSel(-1,-1);
CHARFORMAT2 cf2;
ZeroMemory(&cf2,sizeof(CHARFORMAT2));
cf2.cbSize = sizeof(CHARFORMAT2);
cf2.dwMask = CFM_LINK;
cf2.dwEffects |= CFE_LINK;
::SendMessage(GetDlgItem(IDC_RICHEDIT21)->GetSafeHwnd(), EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);

我把上面的这段代码放在一个按钮的事件里执行不行。不能显示超链接。路过的高人指点一下。

自动检测超链接然后打开超链接我参考别人的基本做好了。http://topic.csdn.net/t/20061220/14/5243943.html#

1.添加消息定义
afx_msg void OnRichEditExLink(NMHDR* in_pNotifyHeader, LRESULT* out_pResult); //.h
ON_NOTIFY(EN_LINK, IDC_RICHEDIT1, OnRichEditExLink ) //.cpp

2.修改richedit控件属性
unsigned int mask = ::SendMessage(m_rich.m_hWnd, EM_GETEVENTMASK, 0, 0);
::SendMessage(m_rich.m_hWnd, EM_SETEVENTMASK, 0, mask | ENM_LINK | ENM_MOUSEEVENTS | ENM_SCROLLEVENTS | ENM_KEYEVENTS);
::SendMessage(m_rich.m_hWnd, EM_AUTOURLDETECT, true, 0);

3.消息处理函数
void CTESTEDITHPYDlg::OnRichEditExLink( NMHDR* in_pNotifyHeader, LRESULT* out_pResult )
{
ENLINK* l_pENLink = ( ENLINK* )in_pNotifyHeader ;
*out_pResult = 0 ;
switch( l_pENLink->msg )
{
case WM_LBUTTONDOWN:
{
CString l_URL ;
CHARRANGE l_CharRange ;
CRichEditCtrl *m_TempEdit;
m_TempEdit = (CRichEditCtrl*)CRichEditCtrl::FromHandle(l_pENLink->nmhdr.hwndFrom);
m_TempEdit->GetSel( l_CharRange ) ;
m_TempEdit->SetSel( l_pENLink->chrg ) ;
l_URL = m_TempEdit->GetSelText() ;
m_TempEdit->SetSel( l_CharRange ) ;
CWaitCursor l_WaitCursor ;
ShellExecute( this->GetSafeHwnd(), _T( "open" ), l_URL, NULL, NULL, SW_SHOWNORMAL ) ;
*out_pResult = 1 ;
}
break ;
}
}
skyxie 2009-06-26
  • 打赏
  • 举报
回复
m_richedit.SetSel(8, 12); //将要设为link的部分选中

// 设为link
ZeroMemory(&cf2, sizeof(CHARFORMAT2));
cf2.cbSize = sizeof(CHARFORMAT2);
cf2.dwMask = CFM_LINK;
cf2.dwEffects |= CFE_LINK;
::SendMessage(GetDlgItem(IDC_RICHEDIT)->GetSafeHwnd(), EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧