作者:BALLOONMAN2002 2004年6月26日
本文拟结合POWERBUILDER语言,简述如何实现树型列表动态半透明提示,即鼠标移动到树型列表某一项ITEM时会动态提示,且为类似金山词霸的半透明提示效果。
效果图见:
http://blog.csdn.net/images/blog_csdn_net/balloonman2002/17312/r_BALLOON-1.JPG
本文拟分以下四部分论述分三次完成:
(一)基本思路
(二)如何获取当前鼠标坐标对应NODE结点信息
(三)半透明效果实现
(四)气泡形状效果实现
一、基本思路
(一)在POWERBUILDER语言中,TREEVIEW控件并不具备如VB等其他语言一样当鼠标未选中NODE时,直接获取当前鼠标对应X、Y坐标下所属NODE结点的方法,VB中可以直接利用HITTEST方法来获取对当前鼠标坐标对应的NODE结点。但可以通过调用API:SENDMESSAGE函数来向TREEVIEW控件发送一个TVM_HITTEST消息来间接实现上述效果。
(二)在POWERBUILDER语言中,并没有直接让控件实现半透明的方法,而目前WINDOWS2000/XP操作系统提供了一个API函数:SetLayeredWindowAttributes,但该API函数不支持WINDOWS98操作系统,考虑到系统的全面兼容性,必须同时考虑WINDOWS98下面应该如何实现半透明提示效果。因此我们必须放弃采用上述API,而采用模拟半透明的方式,即:处理WINDOW的MOUSEMOVE事件,当鼠标移动到某一位置后将鼠标附近区域用API函数BitBlt、AlphaBlend截图下来,并拷贝到气泡提示控件背景设备即可模拟实现半透明效果。
(三)如何实现微软的气泡形状控件?由于POWERBUILDER对一些控件支持并不好,而且此类控件难以寻找,我们就考虑自己动手编写。主要借助API函数:CreateRectRgn、CreateRoundRectRgn、CreatePolygonRgn、CombineRgn等。