duilib的richedit中嵌入超链接

这个其实网上能找到不少的例子,包括mfc的例子都可以参考,捣鼓一下就出来了。刚好有个网友问这个实现,干脆整个例子备忘,也方便大家参考。以下duilib基于仓库代码。duilib: 【此项目由(https://github.com/juhuaguai/duilib)而来,一般更新都在github,不定时会同步到这里。】:由官方的duilib( https://github.com/duilib/duilib ) 复制过来的,仅为了个人学习使用。可以使用vs2008打开,新增一些学习测试用的demo,代码也会同步官方的后续修改。仓库https://gitee.com/juhuaguai_net/duilib

第一步,给richedit增加eventmask,让他能够处理Link事件。

CRichEditUI* pEdit = static_cast<CRichEditUI*>(m_PM.FindControl(_T("testLink")));
DWORD dwEventMast = pEdit->GetEventMask();
dwEventMast = dwEventMast | ENM_LINK;
pEdit->SetEventMask(dwEventMast);

第二步,添加超链接的文本,并且选中它。

int nStart = pEdit->GetTextLength();
CDuiString strText = L"xx一下,你就知道!";
pEdit->AppendText(strText.GetData());
int nEnd = pEdit->GetTextLength();
pEdit->SetSel(nStart,nEnd);

第三步,给选中的文本设置超链格式。

CHARFORMAT2 cf;
ZeroMemory(&cf, sizeof(CHARFORMAT2));
cf.cbSize = sizeof(cf);
cf.dwMask = CFM_LINK;
cf.dwEffects = cf.dwEffects|CFE_LINK;
pEdit->SetSelectionCharFormat(cf);

第四步,光标移到末尾(选中末尾),取消超链格式,避免格式粘连到后续的文本。

pEdit->SetSel(-1,-1);
CHARFORMAT2 cfc;
ZeroMemory(&cfc, sizeof(CHARFORMAT2));
cfc.dwMask = CFM_LINK;
pEdit->SetSelectionCharFormat(cfc);

可以再后续通过pEdit->AppendText(L"点击试试看吧");函数继续追加其他文本。

超链设置完毕。接下来去响应,只要在duilib的Notify里面去响应DUI_MSGTYPE_LINK即可。

if (msg.sType == DUI_MSGTYPE_WINDOWINIT)
{
	InitDlg();
}
else if ( msg.sType == DUI_MSGTYPE_CLICK)
{
}
else if (msg.sType == DUI_MSGTYPE_LINK)
{
	if (msg.pSender->GetName() == L"testLink")
	{
		ENLINK* pEnLink = (ENLINK *)(msg.lParam);
		CRichEditUI* pEdit = (CRichEditUI*)(msg.pSender);
		CDuiString strLinkText = pEdit->GetTextRange(pEnLink->chrg.cpMin,pEnLink->chrg.cpMax);
		if (strLinkText == L"xx一下,你就知道!")
		{
			ShellExecute(NULL,_T("open"),L"https://cn.bing.com",_T(""),_T(""),SW_SHOWNORMAL);
		}
	}
}

整个处理流程就是这样。

另外,

从上面可以看出来,richedit支持多个超链接的识别的办法,就是通过文本内容或者说是charRange来识别的,至于有无其他识别的办法,我目前还不知道。

超链接响应时用到的数据,需要自己找地方另存(当然你也可以像示例那样直接)。

想要超链文本或者richedit的文本显示更多花骚的富文本样式,其实跟超链差不多做法,就是选中要花梢的文本,然后设置这段文本的样式(字体,颜色,字号,加粗,倾斜,下划线删除线等等,具体请参看CHARFORMAT2)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值