一个有Toolbar功能的可重用类 CPopupText
2006-07-23 11:19:06 来源:WEB开发网本文示例源代码或素材下载
背景:我用一个CListBox派生类实现宿主(owner-draw)列表框,这个列表框的项目宽度超过了列表框本身的宽度,因此当鼠标指针指向大宽度的列表框项时,我想显示一个类似Toolbar的提示窗口,在窗口中显示完整的列表框项目文本。
起初我想使用CToolTipCtrl::AddTool的第三个参数lpRectTool来实现这个功能,但没有成功。后来,我采用了自立更生的解决方案,创建了一个可重用窗口类,CPopupText-基类是CWnd。用这个派生类不仅可以在列表框中实现类似Toolbar的提示窗口,还可以在其它的通用控件(如组合框、列表视图等)中实现类似Toolbar的提示窗口。
CPopupText实现了一个类似Toolbar的弹出式窗口-浅黄色的背景,黑色的文本。
CPopupText的使用方法是:实例化对象并创建窗口。
CPopupText wndText;
wndText.Create(...);
Create 函数的参数为:父窗口,风格,ID以及位置信息CPoint,通常你要创建不可见窗口(即关闭WS_VISIBLE),然后,当你想显示提示时,先调用 SetWindowText 函数
设置提示文本,接着调用 ShowWindow 函数显示提示文本。
wndText.SetWindowText("hello, world");
wndText.ShowWindow(SW_SHOWNA);
CPopupText类会根据提示文本的长度自己决定弹出窗口的大小。它的字体默认值与状态行显示字体相同(由SystemParametersInfo(SPI_GETNONCLIENTMETRICS)返回的 NONCLIENTMETRICS 结构成员 lfStatusFont 定义),设置 SW_SHOWNA是很重要的,因为你不想使提示窗口为活动窗口,而只是显示它。另外,CPopupText还提供一个专门的函数CPopupText::ShowDelayed,它的功能是在显示提示窗口之前设置一个毫秒级延时,如果延时为零,则立刻显示提示窗口,你可以使用这个特点来替代对ShowWindow的调用。如果要隐藏提示窗口或取消ShowDelayed,调用CPopupText::Cancel。
更多精彩
赞助商链接