完善 CPopupText 类

scwk002

scwk002

2016-01-29 12:01

完善 CPopupText 类,完善 CPopupText 类
完善 CPopupText 类 赵湘宁 本文例子的源代码下载 问题:        VC知识库《在线杂志》的第八期中有这样一篇文章,标题是: “介绍一个有Toolbar功能的可重用类 CPopupText”。这篇文章的内容是关于在一个列表框中,如果列表框中数据项的文字长度超过了列表框本身的宽度,则会显示一个类似ToolTips的弹出提示,将超长的列表框数据项完整地显示出来(如图一)。文中给出的 CPopupText 类非常好用,但是该文章提供的例子代码——ListCtrl运行起来似乎有点问题,就是在单击提示条下面的列表框数据项时,无法选中这个项目。如果能完善一下就好了...... 图一 显示弹出式提示 解答:     提出这个问题的朋友很细心。确实不错,稍微认真一点的人都不难发现这个例子中存在着上面所说的bug。本文将针对这个问题对程序进行修改和完善。      这个例子程序使用了一个特别的类——CListBoxTipHandler,它的作用是截获发送到列表框的消息。这个类派生于CSubclassWnd,请读者们注意,CSubclassWnd是个非常有用的类,它易于使用,可重用性极强。在VC知识库的很多文章和例子代码中都使用到了这个类(在其它的商业开发中当然也可以利用这个类)。这个类的作用是将截获的 Windows 消息发送到另外一个窗口。CListBoxTipHandler类还用到了另一个类——CPopupText,这个类的作用是显示超长的列表框项目文本。下面我们就来分析一下要实现的目标。    当用户点击弹出的提示条文本时(如图一),要想让 Windows 忽略提示文本的存在,让鼠标单击事件穿透文本直接传到下面的列表框是行不通的。那么如何让才能让鼠标单击事件传到列表框呢?Windows 自有其绝招。   当用户在屏幕的某个地方点击鼠标时,Windows 通过其内部机制来决定光标下面是什么东西,在发送WM_LBUTTONDOWN消息之前,Windows 首先要发送WM_NCHITTEST消息来查询光标处于哪个非客户区上方。如果光标在标题上方,则 Windows 返回HTCAPTION。如果光标处于菜单上方,则 Windows 返回HTMENU。如果光标落在客户区,则 Windows 返回HTCLIENT。大多数应用程序都不处理WM_NCHITTEST消息——一般这个消息都是由缺省的窗口过程(DefWindowProc)处理,所以可能有些人从来就没有听说过有这么一个Windows消息。DefWindowProc 进行所有相应的计算来确定像素是否落在标题,菜单,边界,大小调整客户区等区域,同时返回相应的HT码。在这些返回的HT码中有一个HTTRANSPARENT。这个返回码是我们分场感兴趣的东西。它告诉Windows,“我是透明的,不要把任何鼠标事件消息发给我,把它们发给下一个窗口吧。”这里所说的下一个窗口,指的是光标下面Z-坐标上的窗口线程。实际上这就是我们所需要的东西——对CPopupText类做如下修改:
UINT CPopupText::OnNcHitTest(CPoint pt){  return HTTRANSPARENT;}
哈哈,就这么简单,bug排除了!现在当用户单击如图一中的提示文本时,它下
展开更多 50%)
分享

猜你喜欢

完善 CPopupText 类

C语言教程 C语言函数
完善 CPopupText 类

有Toolbar功能的可重用类 CPopupText

编程语言 网络编程
有Toolbar功能的可重用类 CPopupText

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

介绍一个有Toolbar功能的可重用类 CPopupText

C语言教程 C语言函数
介绍一个有Toolbar功能的可重用类 CPopupText

《天天酷跑》完善攻略心得

天天酷跑 手机游戏 IOS
《天天酷跑》完善攻略心得

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

完善高深的近身搏击术

武术 养生 健康
完善高深的近身搏击术

如何打造完善乡村风格 6招轻松打造完善乡村风格

田园风格装修 中式田园风格 家居装修 装修设计
如何打造完善乡村风格 6招轻松打造完善乡村风格

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《剑魂之刃》竞技场解析

《剑魂之刃》竞技场解析

外部参照简介和外部参照的附着

外部参照简介和外部参照的附着
下拉加载更多内容 ↓