MFC中实现自绘菜单
来源:互联网 发布:跳跃网络立方体 编辑:程序博客网 时间:2024/05/20 22:02
为了实现菜单的自绘,花了我几个小时,其实真正解决后又发现很简单。实现菜单的自绘只需要三个步骤:
第一步:将所有菜单项设置为MF_OWNERDRAW,即自绘模式
第二步:在WM_MEASUREITEM消息中设置菜单项的大小
第三步:在WM_DRAWITEM消息中进行菜单项的绘制
问题首先出现在了第一步,我要绘制的是一个上下文菜单,即右键菜单,要将菜单项设置为MF_OWNERDRAW,需要用到ModifyMenu函数,起始由于ModifyMenu函数的参数设置错误,导致程序怎么也响应不了WM_MEASUREITEM和WM_DRAWITEM消息,所以建议在使用ModifyMenu时对返回值进行检查。
第一步的问题解决后,接在在第二步的WM_MEASUREITEM消息中设置菜单项的大小:
在WM_MEASUREITEM消息中设置的菜单项大小会传入WM_DRAWITEM消息中,然后再在WM_DRAWITEM消息中根据菜单项的大小来进行重绘。
到第三步也遇到了几个问题,由于最初对WM_DRAWITEM消息中的LPDRAWITEMSTRUCT结构体不了解,以致写出的程序不管在什么时候都会作同一个绘制操作,先来看看WM_DRAWITEM消息的声明:
afx_msg void CMainWindow::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpdis);
在这个消息中有两个参数,在自绘菜单时,两个参数都要用到。其中nIDCtl,书上说是所属控件的ID,不太明白是什么意思,在MSDN看到,对于菜单发出的WM_DRAWITEM消息,nIDCtl为0。再说LPDRAWITEMSTRUCT结构体,该结构体中包含了菜单复选状态、选中状态以及菜单项的大小等信息。
下面是OnDrawItem消息的实现代码:
效果图:
参考资料:http://www.vckbase.com/document/viewdoc/?id=1583
- MFC中实现自绘菜单
- MFC中实现自绘菜单
- MFC 实现自绘菜单
- MFC自绘菜单
- MFC 菜单自绘
- MFC 菜单自绘
- 实现自绘菜单
- 实现自绘菜单
- MFC/VC++自绘菜单下载源码
- MFC菜单自绘制
- Visual C++中自绘菜单的实现
- Visual C++中自绘菜单的实现
- Visual C++中自绘菜单的实现
- 自绘菜单的实现
- 简单实现菜单自绘
- 自绘菜单的实现
- MFC中菜单图标的实现
- 使用MFC自绘菜单时遇到一个问题
- 平面问题
- 在Dreamweaver中构建ASP.net开发环境
- 用Monte Carlo方法解决Gauss问题
- 发梢魅影
- 测试Oracle是否开启,和怎样开启
- MFC中实现自绘菜单
- 建立数据库JOB(作业)步骤
- addfielderr()错误,重复出现
- 将excel文件中的数据导入导出至SQL数据库中(重要).docx
- Ireport 用例教程
- 必须使用锁的情况(订票系统)
- 正式开博~~~~~~~~~~~
- jsp中分页的技术
- 我对CSS的理解