注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

_

_

 
 
 

日志

 
 

在SDI(单文档)中使用BCMenu  

2011-06-18 08:21:40|  分类: VC C++ MFC JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在SDI(单文档)中使用BCMenu

2008年10月29日 星期三 下午 12:17

    在 SDI 中使用 BCMenu,首先,自然是建立一个 SDI 工程,然后将“BCMenu.h”和“BCMenu.cpp”放入文件夹下,单击"工程"->"增加到工程"->"文件",将"BCMenu.h"和"BCMenu.cpp"两个文件加入工程。

    在 MainFrm.h 这个头文件里的成员函数 CMainFrame 里添加类型为 public 的脚本:

BCMenu m_menu;
HMENU NewMenu();

    在 MainFrm.h 这个头文件的里添加下面的脚本:

#include "BCMenu.h"

    打开 Mainfrm.cpp 文件并加入下面的函数:

HMENU CMainFrame::NewMenu()
{
m_menu.LoadMenu(IDR_MAINFRAME);
m_menu.LoadToolbar(IDR_MAINFRAME);
return(m_menu.Detach());
}

    编辑 C***App (***是你取的程序名字)里的 InitInstance() 成员函数。找到下面的脚本:

if (!ProcessShellCommand(cmdInfo))
return FALSE;

    在它后面添加下面的脚本:

CMenu* pMenu = m_pMainWnd->GetMenu();
if (pMenu)pMenu->DestroyMenu();
HMENU hMenu = ((CMainFrame*) m_pMainWnd)->NewMenu();
pMenu = CMenu::FromHandle( hMenu );
m_pMainWnd->SetMenu(pMenu);
((CMainFrame*)m_pMainWnd)->m_hMenuDefault = hMenu;

    在 CMainFrame 类里添加消息处理函数:WM_MEASUREITEM、WM_MENUCHAR 和 WM_INITMENUPOPUP。添加方法是在 CMainFrame 类上右击鼠标选择 Add Windows Message Handler ,在右下角的选择框里选中 Window ,再在左面的列表里分别选择 WM_MEASUREITEM、WM_MENUCHAR 和 WM_INITMENUPOPUP 并单击 Add and Edit 按钮,然后加入下面的脚本:

void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
BOOL setflag=FALSE;
if(lpMeasureItemStruct->CtlType==ODT_MENU){
   if(IsMenu((HMENU)lpMeasureItemStruct->itemID)){
    CMenu* cmenu=CMenu::FromHandle((HMENU)lpMeasureItemStruct->itemID);
    if(BCMenu::IsMenu(cmenu)){
    m_menu.MeasureItem(lpMeasureItemStruct);
    setflag=TRUE;
    }
   }
}
if(!setflag)CFrameWnd::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
LRESULT CMainFrame::OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu)
{
LRESULT lresult;
if(BCMenu::IsMenu(pMenu))
   lresult=BCMenu::FindKeyboardShortcut(nChar, nFlags, pMenu);
else
   lresult=CFrameWnd::OnMenuChar(nChar, nFlags, pMenu);
return(lresult);
}
void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
CFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
if(!bSysMenu){
   if(BCMenu::IsMenu(pPopupMenu))BCMenu::UpdateMenu(pPopupMenu);
}
}

    构建运行一下,我们发现现在的菜单是 ORIGINAL 风格,要改成 XP 风格的话,请在适当的地方(如: CMainFrame 类里的 OnCreate 成员函数里。)加入下面的脚本:

BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP);

  评论这张
 
阅读(839)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017