一种漂亮的自绘菜单
2008-01-19 20:25:30 来源:WEB开发网核心提示:该函数有包括第一级菜单.但必须注意:该类的任一实例都只能调用这两个函数中的一个,不能一同使用!!!二、CMenuEx类的具体使用步骤:2.1 用CMenuEx类加载主窗口菜单的具体步骤:1、添加CMenuEx成员变量CMenuEx m_menu2、CMainFrame类添加WM_INITMENU消息,并在实现函数中加入
该函数有包括第一级菜单.
但必须注意:该类的任一实例都只能调用这两个函数中的一个,不能一同使用!!!
二、CMenuEx类的具体使用步骤:
2.1 用CMenuEx类加载主窗口菜单的具体步骤:
1、添加CMenuEx成员变量
CMenuEx m_menu
2、CMainFrame类添加WM_INITMENU消息,并在实现函数中加入代码:
m_menu.InitMenu(pMenu,IDR_MAINFRAME,&m_wndToolBar);
IDR_MAINFRAME是工具栏资源ID,m_wndToolBar是工具栏对象
3、CMainFrame类添加WM_DRAWITEM和WM_MEASUREITEM消息,并在实现函数分加入:
if(!nIDCtl) m_menu.DrawItem(lpDrawItemStruct);
if(!nIDCtl) m_menu.MeasureItem(lpMeasureItemStruct);
只须这三步就大功造成了!
但是有时你会发现菜单的位图错位了,这不是程序的错。
这是因为“工具栏位图”的个数与“工具栏按钮个数”不符,
你只需把不用的位图删掉就可以,或者添加对应的菜单项,反正使这两个数目一致就对了
4、如果你想要让你的菜单拥有“纵向位图”(像“开始”菜单),就必须在CMainFrame在OnCreate()中加入:
m_menu.SetImageLeft(IDB_BITMAP1);//IDB_BITMAP1是指定位图
2.2 用CMenuEx类加载弹出菜单的具体步骤:
1、在CChildView类中加入成员变量 CMenuEx m_menu和CToolBar *m_pToolBar
为什么要加入m_pToolBar,这里做一下说明:
因为在CMenuEx的接口函数InitPopupMenu()中需要工具栏对象指针,而工具栏对象又偏偏是CMainFrame类的成员
所以设此指针变量指向工具栏对象
2、给CChildView类的成员m_pToolBar赋值。
更多精彩
赞助商链接