首先对标题说明一下,在MSN中,聊天的窗口可能是一个自定义的类。大家用Spy ++可以看看。
对与自定义窗口,可以使用CreateWindow, SetWindowLong或者是SubclassWindow实现,不过这不
是我现在讨论的话题。
好, 先看看效果再说:
我实现的主要就是:(一)字体格式; (二)超链接;(三)背景图片;(四)动画表情
好,开始咯。
字体的实现是很简单的,我没有使用rtf,觉得太烦琐了,我也不需要那么复杂的控制。
仅仅是一个结构CHARFORMAT:
<script type=text/javascript> function ToggleSourceCodeRegion(regionNumber) { var divRegion = document.getElementById('region' + regionNumber); var divRegionBlock = document.getElementById('regionBlock' + regionNumber); if (divRegion.style.display == 'inline') { divRegion.style.display = 'none'; divRegionBlock.style.display = 'inline'; } else { divRegion.style.display = 'inline'; divRegionBlock.style.display = 'none'; } } </script>
1typedef struct _charformat 2{ 3 UINT cbSize; 4 _WPAD _wPad1; 5 DWORD dwMask; 6 DWORD dwEffects; 7 LONG yHeight; 8 LONG yOffset; 9 COLORREF crTextColor; 10 BYTE bCharSet; 11 BYTE bPitchAndFamily; 12 char szFaceName[LF_FACESIZE]; 13 _WPAD _wPad2; 14} CHARFORMATA;
相当的明白了,我就不用多说了;对于CRichEditCtrl,它提供的关于格式的接口有:
SetDefaultCharFormat(CHARFORMAT &cf);
SetSel(CHARFORMAT &cf);
大家都是明白人,一看便知,也不多说了,那么如何使用CFontDialog选择字体呢?
呵呵,其实很简单咯,因为有这个东西 => CFontDialog::GetCharFormat(CHARFORMAT &cf);
所以,总的实现可能就是这么简单的几句代码:
<script type=text/javascript> function ToggleSourceCodeRegion(regionNumber) { var divRegion = document.getElementById('region' + regionNumber); var divRegionBlock = document.getElementById('regionBlock' + regionNumber); if (divRegion.style.display == 'inline') { divRegion.style.display = 'none'; divRegionBlock.style.display = 'inline'; } else { divRegion.style.display = 'inline'; divRegionBlock.style.display = 'none'; } } </script>
1CFontDialog fontdlg; 2 3 int ret = fontdlg.DoModal(); 4 if(IDOK == ret) 5 { 6 CHARFORMAT cf; 7 fontdlg.GetCharFormat(cf); 8 m_SendMsg.SetDefaultCharFormat(cf);
9 }这个本身很简单,那就只写这么多了,一会儿写下一篇。