北方站长站
客服热线:0632-5117766

CRichEditCtrl实现MSN背景,字体,超链接

[2007-09-29 00:00:00] 作者:Northz.com 来源:北方站长站

Tags:字体 链接 背景 实现 使用 一个 这个 就是 NULL 可以

  


图1:实现效果图

一、MSN超链接的实现
  关于HyperLink的是实现,我找到了一种自绘的实现方式,自己维护,效果也很不错(如图2)。

CRichEditCtrl实现MSN背景,字体,超链接
图2:超链接

  就在我觉得实现OLE的插入有难度时,就想过了直接自己绘制,自己维护,但是觉得做法不是很正统,对不起Microsoft给我留的IRichEditOle接口,就没有使用这种解决方法。我们大致讲一下实现方式:

  定义一个struct描述每个hyperlink对象:

1typedef struct _HYPERLINKINFO
2{
3 CRect rectDimension;
4 CString csLinkText;
5 UINT unLinkDlgID;
6 inline operator = (struct _HYPERLINKINFO linkInfo){ rectDimension = linkInfo.rectDimension;csLinkText = linkInfo.csLinkText;unLinkDlgID = linkInfo.unLinkDlgID;}
7}HYPERLINKINFO,*LPHYPERLINKINFO;


  这里有一个UINT unLinkDlgID,是来描述点击这个link后弹出的dialog的。

  CRect rectDimension;用来保存这个link的rect,以检查鼠标是否在其中,以显示鼠标光标;对于多links,他使用了一个CList来维护(或者可以选择使用std::list):

1CList m_lsLinks;


  其中很关键的就是判断鼠标是不是在一个link的rect内。这种实现的确很不错,但是我要说的是另一个更现代的实现方式,实现起来也简单得多,关键的就是有个Style =>。ENM_LINK 这个style在RichEdit20中才有,所以我们应该使用RichEdit20A!我们维护这样一个类:

1class _AFX_RICHEDITEX_STATE
2{
3public:
4 _AFX_RICHEDITEX_STATE();
5 virtual ~_AFX_RICHEDITEX_STATE();
6 HINSTANCE m_hInstRichEdit20 ;
7};


eyW北方站长站

 

News

 

info

 

down

出售手机裁听器,手机跟踪定位系统    企业网站,网城,购物网,都市导购,校园网    网上书店系统    上海电信机房服务器托管,双线主机托管    美女图片馆    15G 高清晰图片资源 无水印    室内装潢材料新产品杰威尔艺术漆    收一万ip的美女图片    大量收购个人网址导航网站    出售网址站PR=4alexa=119,764    

1 2 3 下一页

下一篇链接:使用C++ Builder开发DirectX应用程序

上一篇链接:轻轻松松学习C++ 标准模板库STL

评论】 【打印】 【加入收藏】 【关闭→论坛 →博客 →数据中心

 共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面