完善 CPopupText 类

2016-01-29 12:01 3 1 收藏

完善 CPopupText 类,完善 CPopupText 类

【 tulaoshi.com - C语言心得技巧 】

完善 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排除了!现在当用户单击如图一中的提示文本时,它下

来源:http://www.tulaoshi.com/n/20160129/1484273.html

延伸阅读
与胎儿玩耍有利于胎儿发育 胎儿会做游戏吗? 胎儿能否做游戏?通过胎儿超声波的荧屏显示来观察一下就知道了。下面是通过超声波的荧屏显示看到的情景:胎儿在早晨醒来伸了一个懒腰,打了一个哈欠,又调皮地用脚蹬了一下妈妈的肚子,这使他感到很满意。一个偶然的机会使胎儿的手碰到了漂浮在旁边的脐带。 很快脐带成了他的游戏对象,...
拼豆夜宵如何完善账户信息   1)首先先打开,进去之后点击左上角的,接着点击。   2)然后点击自己的,进去之后编辑好自己的信息点击就可以了。  
一丶不要放弃梦想        在你年轻的时候你可能会梦想着嫁给一个优秀的人,但是随着年龄的增大,剩女们会失去耐心和信心,感觉自己找不到好老公。但是,你要相信一个怀有梦想的女人是极美的,多给自己一些时间去发掘,一定不会让自己失望的。 二丶放眼未来        许多剩女曾经遇到过这样的情况...
标签: 心理健康
心理学研究结果表明:情绪及个人特征与疾病的发生明显相关,患病后讲究心理免疫的人,比那些精神情绪较差的人易于战胜疾病获得康复。这是因为精神因素与机体内在的免疫功能潜力密切相关,积极的心理状态能增强机体的抗病能力。 研究中有一位患者,颈部长了一个肿块,经检查确诊为恶性肿瘤,当时她感到极度的恐惧、悲观,对生活失去信心,整天...
怎样让自己的摄影技术更完善   1.学会拍摄相片内所有景物都清晰的相片 这就考验了大家对景深的把握,要拍出一张整体清晰的相片,就要应用很多技巧 要点:最好利用广角镜头,焦距调到无限远,选用小光圈,因为小光圈景深大。这样拍出来的相片不管从远到近还是从近到远都是清晰的。特殊环境下,还需配合好曝光和快门速度。 ...

经验教程

824

收藏

62
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部