三个函数实现框架菜单自绘
2008-01-19 20:23:54 来源:WEB开发网核心提示:建议改进:因为每次弹出菜单的时候都调用OnInitMenu,本来已改好的菜单就不必再改了,在OnInitMenu加一个全部变量标识菜单是否改好了,三个函数实现框架菜单自绘(2),避免重复的修改菜单,那当然也可以在OnCreate中修改,对子菜单的弹出菜单没有修改MF_OWNERDRAW,不过你可以增加一点代码遍历一下就
建议改进:因为每次弹出菜单的时候都调用OnInitMenu,本来已改好的菜单就不必再改了,在OnInitMenu加一个全部变量标识菜单是否改好了,避免重复的修改菜单。那当然也可以在OnCreate中修改,不过你要确定你的菜单没有再添加新选项了。
缺点:不清楚为什么对"最近文件"那项不起作用,知道的还望告诉我一下。对子菜单的弹出菜单没有修改MF_OWNERDRAW,不过你可以增加一点代码遍历一下就OK了。这样一个简单菜单换肤就完成了,^_^
(参考了VCK的一些资料)
本文参考了 VCKBASE 的一些资料,以及 MSDN 库:只列出部分
void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
lpMeasureItemStruct 是指向MEASUREITEMSTRUCT结构体的指针,其成员变量
UINT CtlType; // 要绘制的类型
UINT itemID; // 菜单选项ID
UINT itemWidth; //菜单选项宽度
UINT itemHeight; //菜单选项高度
void CMainFrame::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
lpDrawItemStruct 是指向DRAWITEMSTRUCT结构体的指针,其成员变量
UINT CtlType; // 要绘制的类型
UINT itemID; // 菜单选项ID
UINT itemAction; // 菜单动作
UINT itemState; // 菜单选项的当前状态
HWND hwndItem; // 顶层菜单的句柄
HDC hDC; // 绘制设备DC
RECT rcItem; // 菜单选项的大小
DWORD itemData; // 附加自定义数据,由AppendMenu或InsertMenu或ModifyMenu的lpszNewItem指定
更多精彩
赞助商链接