【摘要】:在一些具有自绘属性的列表类控件添加列表项时,产生WM_MEASUREITEM消息回调。在消息回调函数OnMeasureItem中,执行基类函数CWnd::OnMeasureItem将回调路由,进入每个自绘子窗口关联的派生类的虚函数MeasureItem中。使用MFC应用程序向导创建一个工程名为“dr”的对话框程序,用于演示WM_DRAWITEM和WM_MEASUREITEM消息的使用方法。9)在主对话框中,添加WM_DRAWITEM和WM_MEASUREITEM消息映射函数,如图10-46所示。11)修改WM_DRAWITEM消息映射函数代码。WM_MEASUREITEM和WM_DRAWITEM消息,能够在父窗口中提前截获所有子窗口的自绘和测量消息回调。
WM_DRAWITEM消息,一般用于在父窗口中建立消息映射函数。如果父窗口中有一个或多个具有自绘属性的控件,WM_PAINT消息映射函数执行后就立即执行WM_DRAWITEM的消息映射函数OnDrawItem,对所有具有自绘属性的子窗口进行更新。执行基类函数CWnd::OnDrawItem将回调路由,进入每个自绘子窗口关联的派生类的虚函数DrawItem中。
WM_MEASUREITEM消息,同样一般在父窗口中建立消息映射函数。在一些具有自绘属性的列表类控件添加列表项时,产生WM_MEASUREITEM消息回调。在消息回调函数OnMeasureItem中,执行基类函数CWnd::OnMeasureItem将回调路由,进入每个自绘子窗口关联的派生类的虚函数MeasureItem中。
使用MFC应用程序向导创建一个工程名为“dr”的对话框程序,用于演示WM_DRAWITEM和WM_MEASUREITEM消息的使用方法。
1)在主对话框中添加一些控件,如图10-44所示。

图10-44 编辑主对话框资源
2)修改控件(自绘)属性,见表10-2。
表10-2 主对话框的控件属性

3)将上一个工程的图标复制到res子目录中,并导入到工程里,如图10-45所示。

图10-45 导入后的图标资源ID
4)在主对话框类的头文件中,添加一些成员变量和函数。

5)在主对话框类的源文件(drDlg.cpp)中编写按钮自绘函数的代码。


6)在主对话框类的源文件中,编写自绘组合控件的代码。
(https://www.chuimin.cn)

7)在主对话框类的源文件中,编写添加下拉列表项的代码。

8)修改对话框初始化函数OnInitDialog的代码。

9)在主对话框中,添加WM_DRAWITEM和WM_MEASUREITEM消息映射函数,如图10-46所示。

图10-46 添加消息映射函数
10)修改WM_MEASUREITEM消息映射函数代码。

11)修改WM_DRAWITEM消息映射函数代码。

12)最后添加WM_DESTROY消息映射函数OnDestroy,并修改代码。

13)编译并运行,测试代码,如图10-47所示。
WM_MEASUREITEM和WM_DRAWITEM消息,能够在父窗口中提前截获所有子窗口的自绘和测量消息回调。如果使用这两种消息,还能够省略子窗口派生类,在父窗口中统一编写所有子窗口的自绘代码。这样处理的优点是方便快捷,省略了一些复杂的过程;缺点是不如派生类代码的独立性强,不利于深入推进项目开发。

图10-47 查看运行结果
相关推荐