Mobile 上实现基于对话框的带图标的自绘菜单

Mobile 上实现基于对话框的带图标的自绘菜单

几经折磨,终于功成,放这里以作备份,也希望对其他需要的朋友有所帮助。

 

 

说明:

mobile项目中要求实现带图标的菜单,也没仔细调查,直接调用现成的SetMenuItemBitmaps,结果一编译,惨啦,mobile不支持。于是Google查找,找到Brent Corkum的BCMenu,功能好强大呀,赶紧移过来,一编译,里面又是一堆东西通不过,特别是碰到“NONCLIENTMETRICS”未定义(NONCLIENTMETRICS,是什么,有谁知道,能告诉我一下吗。),气馁了,准备不用它了。从头来过,继续找啊找,又找到了querw的TBCMenu,代码一看,呀,还是要用到BCMenu呀。虽然没能直接用,但是对自绘菜单有了个了解了。继而进入郑恒 (lbird)的MenuEx,终于能编译通过了,可惜的是,不是基于对话框的,好吧,也就这么移过来吧。因为接触win编程不久,没经验。发现只要一添加ON_WM_INITMENU,编译就出错啊,一看。晕,,,mobile上又不能用。这下傻了。该怎么办呢。。。。

Fish说只需要处理 :

              //WM_DRAWITEM:绘制菜单的样式
              //WM_MEASUREITEM:指定要绘制菜单的大小
              //WM_INITMENU:把框架菜单全部改成带MF_OWNERDRAW标志

就可以了,可是WM_INITMENU不支持呀,还有怎么改成带MF_OWNERDRAW标志呢?经过一番查找,原来mobile支持ON_WM_INITMENUPOPUP,嘿嘿嘿,OK了,正好满足我的需求。。。。开足马力开始调试了。。。。

 

 

部分代码:

在头文件中包含MenuEx.h,添加成员变量: CToolBar   m_wndToolBar;  CMenuEx    m_menu;

 

BEGIN_MESSAGE_MAP(CIconMenuDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
 ON_WM_SIZE()
#endif

 ON_WM_DRAWITEM()  
 ON_WM_MEASUREITEM()
 ON_WM_INITMENUPOPUP()

 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

 

 

BOOL CIconMenuDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
 //  执行此操作
 SetIcon(m_hIcon, TRUE);   // 设置大图标
 SetIcon(m_hIcon, FALSE);  // 设置小图标

 BOOL b = m_wndToolBar.Create(this);
 BOOL b1 = m_wndToolBar.LoadToolBar(IDR_TOOLBAR1); 
 m_menu.LoadMenu(IDR_MENU1);
 CMenu *p = m_menu.GetSubMenu(0);
 p->TrackPopupMenu(TPM_TOPALIGN, 10, 110,this);
 return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

 

void CIconMenuDlg::OnInitMenuPopup(CMenu* pPopupMenu,UINT nIndex,BOOL bSysMenu )
{
 m_menu.InitPopupMenu(pPopupMenu,IDR_TOOLBAR1,&m_wndToolBar);
}


void CIconMenuDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)   
{  
 if(!nIDCtl) m_menu.DrawItem(lpDrawItemStruct);  

 

void CIconMenuDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)   
{  
 if(!nIDCtl) m_menu.MeasureItem(lpMeasureItemStruct);     
}

 

参考:

  1. 《自绘菜单的实现》作者:querw
    http://www.vckbase.com/document/viewdoc/?id=1200
  2. 《一种漂亮的自绘菜单》作者:郑恒 (lbird)
    http://www.vckbase.com/document/viewdoc/?id=537
  3. 《简单实现菜单自绘》作者:Fish
    http://blog.csdn.net/Blue_Dream_/archive/2009/02/03/3860881.aspx
  4. Cool Owner Drawn Menus with Bitmaps》By Brent Corkum
     http://blog.csdn.net/Blue_Dream_/archive/2009/02/03/3860881.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值