MFC如何实现菜单栏选择一项,然后触发菜单栏的ON_WM_MEASUREITEM
时间: 2024-10-28 12:09:53 浏览: 13
吕鑫:《VC++就业培训宝典之MFC视频教程》第十章 第七节 通过WM_DRAWITEM和WM_MEASUREITEM消息在父窗口实现自绘
MFC(Microsoft Foundation Classes),是微软为Windows应用程序开发提供的一个框架,其中包含了一个丰富的控件集合,包括菜单栏(MenuBar)。在MFC中,当用户通过菜单栏选择一项时,通常会触发相应的消息处理函数,如`OnCommand`或`OnNotify`。
如果你想让菜单项的选择触发`ON_WM_MEASUREITEM`事件(这个一般用于定制控件的大小),这通常发生在自定义菜单项需要动态调整大小的时候,例如包含图标或有特殊布局需求的菜单项。不过,`ON_WM_MEASUREITEM`主要用于响应`CMFCToolBar`中的工具栏项测量,而不是菜单条。
实现过程大致如下:
1. 首先,在你的CWnd派生类中,你需要重写`OnMeasureItem`方法:
```cpp
afx_msg int OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
```
2. 在`OnMeasureItem`中,你可以根据`lpMeasureItemStruct`中的参数计算并设置所需的尺寸。
3. 然而,菜单栏本身并不直接关联到`ON_WM_MEASUREITEM`。如果你需要基于菜单项内容的变化来调整菜单项的尺寸,你可能会考虑在`OnMenuSelect`、`OnNotify`或其他适当的命令处理函数中调用`InvalidateRect`来更新菜单项的显示区域,这会间接地导致系统重绘,并可能涉及`WM_NCHITTEST`消息处理,进一步影响`WM_SIZE`等消息。
请注意,如果只是想改变菜单的外观,MFC提供了内置的模板可以轻松定制,不一定非要手动处理`ON_WM_MEASUREITEM`。
阅读全文