第27课 工具提示控件
我们将学习工具提示控件:它是什么如何创建和使用.下载例子
理论:
工具提示是当鼠标在某特定区域上停留时显示的一个矩形窗口.工具提示窗口包含一些编程者想要显示的文本.在这点上,工具提示同状态栏的作用是一样的,所不同的是工具提示当单击或者远离指定区域的时候就会消逝,你可能熟悉与工具栏相关联的工具提示,那些"提示"是工具栏控件提供的便利.如果你想要在其它窗口、控件中显示工具提示的话,就不得不自己创建他们.
既然已经了解了什么是工具提示,就让我们来看看如何创建他们.大致步骤如下:
- 用createwindowex函数创建工具提示控件.
- 定义一个工具提示控件将要监视鼠标移动的区域.
- 将区域传递给工具提示控件
- 将传递区域的鼠标消息转送给工具提示控件.(这步或许更早,具体依据转播消息的方法)
工具提示控件的创建
工具提示控件是一种通用控件.同样,要在源代码某处调用initcommoncontrols以便masm能够将你的程序和comctl32.dll连接. 用createwindowex创建工具提示控件,典型代码如下:.data注意窗口风格:tis_alwaystip指定了工具提示不管包含指定区域的窗口状态如何,当鼠标移过指定区域的时候,工具提示总是显示.简单的说就是,即使窗口处于非激活状态,鼠标移过工具提示指定区域的时候,工具提示也会出现.
tooltipclassname db "tooltips_class32",0
.code
.....
invoke initcommoncontrols
invoke createwindowex, null, addr tooltipclassname, null, tis_alwaystip, cw_usedefault, cw_usedefault, cw_usedefault, cw_usedefault, null, null, hinstance, null
你不必在createwindowex中包括ws_popup 和 ws_ex_toolwindow风格,因为工具提示处理过程会自动加上,你也不必指定工具提示窗口的坐标和宽高,控件会依据要显示的文字自动调节.四个参数,均使用cw_usedefault ,其余的参数都不太重要.
指定工具
工具提示控件创建了但还没有显示,我们想要当鼠标指针在某个区域之上时显示工具提示窗口.现在需要指定这个区域.我们称这样的区域为"工具",“工具”就是工具提示控件监视鼠标指针是否移过的位于窗口客户区的一个方形区域.如果鼠标指针移过"工具",工具提示窗口就显示."工具"可覆盖整个客户区或者仅仅是它的一部分.因此我们把"工具"分成两种类型,一种是作为一个窗口,另一种则是某窗口客户区的一部分.两种各有所用.覆盖整个客户区的"工具"通常用于按钮、编辑控件等,你不必指定焦点域的坐标和大小:它被假定为窗口的整个客户区.仅覆盖窗口客户区一部分的"工具"在你想把窗口客户区分成几个部分但又不想使用子窗口时特别有用,但需要指定左上角的坐标和宽高.
使用如下的 toolinfo 结构定义"工具":
toolinfo struct
cbsize dword ?
uflags dword ?
hwnd dword ?
uid dword ?
rect rect <>
hinst dword ?
lpsztext dword ?
lparam lparam ?
toolinfo ends
| 域名 | 说明 |
| cbsize | toolinfo结构的大小.必须填充, 如果这个区域不被正确填充windows并不会报错,但你会得到不可预料的奇怪结果. |
| uflags | 指定焦点域的属性,可以是如下标志的联合:
|
| hwnd | 包含"工具"的窗口句柄,如果你指定了ttf_idishwnd标志,windows将忽略该值,而使用uid成员的值作为窗口句柄.你需要填充这个域域如果:
|
| uid | 这个域的值可能有两种含义,依 uflags 是否包含ttf_idishwnd.
|
| rect | 指定"工具"大小的rect结构.这个结构定义了一个以hwnd指定窗口客户区左上角为基点的方形大小,简言之,如果你想指定客户区的一部分作为"工具"就得填充这个结构,如果你指定了ttf_idishwnd标志 ,控件就会忽略这个值.(你已经选择整个客户区作为"工具") |
| hinst | 如果lpsztext指定了字符串资源的标识,包含将作为工具提文本字符串资源的实例句柄.听起来有点费解,阅读一下lpsztext的说明就可以明白这个域是干什么用的了.若lpsztext不包含字符串资源标识,控件会忽略这个域. |
| lpsztext | 这个域可以有如下几个值:
|