MSN / QQ 中的CRichEditCtrl (一) —— 背景

首先对标题说明一下,在MSN中,聊天的窗口可能是一个自定义的类。大家用Spy ++可以看看。
对与自定义窗口,可以使用CreateWindow, SetWindowLong或者是SubclassWindow实现,不过这不
是我现在讨论的话题。

好, 先看看效果再说:

我实现的主要就是:(一)字体格式; (二)超链接;(三)背景图片;(四)动画表情


关于背景的实现,我看了blog上的一篇文章,知道了不能直接处理WM_ERASEBKGND。我就没有这样做了。(没有测试就轻易的相信了别人,呵呵,:))
还有据说需要Hook才行,或者是重写WM_PAINT处理函数。
是不是很恐怖?事实上没有那么恐怖。
其实很简单的,关键的一点就是RICHEDIT20A的 WS_EX_TRANSPARENT这个Style!
有了它,我们就可以Create一个透明的CRichEditCtrl了,然后就直接在Dialog上绘图片!这样看起来就是
RichEdit的背景了,是不是?
首先:
1m_Chat.CreateEx(WS_EX_TRANSPARENT, "RICHEDIT20A", "",  WS_VISIBLE | WS_CHILD  |  
2  WS_CLIPCHILDREN | WS_VSCROLL | ES_MULTILINE  | ES_READONLY |
3  ES_AUTOVSCROLL |ES_LEFT | ES_WANTRETURN, rt, this, IDC_CHAT, NULL); 


我们就得到了一个透明的RichEdit了,是不是很帅?

然后就可以使用两种方法绘制窗体背景。
(1)响应WM_ERASEBKGND
(2)OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
还有就是透明的代价,RichEdit不会刷新背景了,你得自己做。算最小刷新Rect就是讨论的主要问题了。
节约时间,就不多说了啊。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值