BCMenu
1、在SDI(单文档)中使用BCMenu
在 SDI 中使用 BCMenu,首先,自然是建立一个 SDI 工程,然后将“BCMenu.h”和“BCMenu.cpp”放入文件夹下,单击\工程\增加到工程\文件\,将\和\两个文件加入工程。
在 MainFrm.h 这个头文件里的成员函数 CMainFrame 里添加类型为 public 的脚本: BCMenu m_menu; HMENU NewMenu();
在 MainFrm.h 这个头文件的里添加下面的脚本: #include \
打开 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); 2、在MDI(多文档)中使用BCMenu
在 MDI 中使用 BCMenu,首先,自然是建立一个 MDI 工程,然后将“BCMenu.h”和“BCMenu.cpp”放入文件夹下,单击\工程\增加到工程\文件\,将\和\两个文件加入工程。
在 MainFrm.h 这个头文件里的成员函数 CMainFrame 里添加类型为 public 的脚本: HMENU NewMenu();
HMENU NewDefaultMenu(); BCMenu m_menu,m_default;
在 MainFrm.h 这个头文件的里添加下面的脚本: #include \
打开 Mainfrm.cpp 文件并加入下面的函数: HMENU CMainFrame::NewMenu() {
static UINT toolbars[]={ IDR_MAINFRAME };
m_menu.LoadMenu(IDR_MYMENUTYPE); m_menu.LoadToolbars(toolbars,1);
return(m_menu.Detach()); }
HMENU CMainFrame::NewDefaultMenu() {
m_default.LoadMenu(IDR_MAINFRAME); m_default.LoadToolbar(IDR_MAINFRAME); return(m_default.Detach()); }
编辑 C***App (***是你取的程序名字)里的 InitInstance() 成员函数。找到下面的脚本: if (!ProcessShellCommand(cmdInfo)) return FALSE;
m_pMainWnd = pMainFrame;
// This code replaces the MFC created menus with the Ownerdrawn versions
在它后面添加下面的脚本:
pDocTemplate->m_hMenuShared=pMainFrame->NewMenu();
pMainFrame->m_hMenuDefault=pMainFrame->NewDefaultMenu(); pMainFrame->OnUpdateFrameMenu(pMainFrame->m_hMenuDefault);
在 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)CMDIFrameWnd::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=CMDIFrameWnd::OnMenuChar(nChar, nFlags, pMenu);
return(lresult); }
void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) {
CMDIFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu); if(!bSysMenu){
if(BCMenu::IsMenu(pPopupMenu))BCMenu::UpdateMenu(pPopupMenu); } }
构建运行一下,我们发现现在的菜单是 ORIGINAL 风格,要改成 XP 风格的话,请在适当的地方(如: CMainFrame 类里的 OnCreate 成员函数里。)加入下面的脚本: BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP); 3、在Dialog(基本对话框)中使用BCMenu
如果说在 SDI 和 MDI 中使用 BCMenu 很麻烦的话,那么在 Dialog 中使用起来就是相当的简单了,不过因为在网页上没有说明 Dialog 里使用 BCMenu 的方法,只有一个很麻烦的示例,所以我的做法是新建一个基本对话框后和示例进行对比得到的,如果出现问题的话(至少我还没发现问题),请与示例文件进行对比。
首先新建一个MFC基于Dialog的程序,然后自然是创建一个菜单咯。 再把\和\文件复制到当前的文件夹下。
单击\工程\增加到工程\文件\,将\和\两个文件加入工程。 右击\添加一个成员变量:
双击\在其上方添加头文件(绿色为自动生成的脚本,红色为添加的脚本): // BCMenuDialogDlg.h : header file //
#if !defined(AFX_BCMENUDIALOGDLG_H__D5EE798A_B08C_4F8A_8404_0BED7C0F108A__INCLUDED_) #define
AFX_BCMENUDIALOGDLG_H__D5EE798A_B08C_4F8A_8404_0BED7C0F108A__INCLUDED_ #include \#if _MSC_VER > 1000 #pragma once
#endif // _MSC_VER > 1000
//加入 BCMenu 类的头文件。 #include \
///////////////////////////////////////////////////////////////////////////// // CBCMenuDialogDlg dialog
再在\函数里进行添加: // TODO: Add extra initialization here //设置风格为 XP(如果要用 ORIGINAL 风格,就设置为 BCMENU_DRAWMODE_ORIGINAL)。 BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP); //载入需要改变的菜单。
m_menu.LoadMenu(IDR_MENU_MAIN);
SetMenu(&m_menu);
return TRUE; // return TRUE unless you set the focus to a control
这样就可以了,更多的使用方法可以参考\源文件,如在运行时改变菜单的风格
CButtonST
本篇主要包括了以下的效果:
1. 在按钮上加入Icon,使Icon和文字同时显示 2. 显示平面按钮
3. 使按钮上的图标可变
4. 设置按钮在不同状态下的底色和文字颜色
5. 设置图标和文字的位置
6. 根据Icon的形状设置按钮的形状
7. 添加Tooltips
以下是Basic Features的演示界面:
效果一:在按钮上加入Icon,使Icon和文字同时显示
假设按钮ID为IDC_BUTTON1
1. 添加成员变量
1.CButtonST m_btn;
2. 添加Icon资源,设其ID设为IDI_ICON1
3. 在OnInitDialog函数中初始化按钮
1.m_btn.SubclassDlgItem(IDC_BUTTON1,this); 2.m_btn.SetIcon(IDI_ICON1); 3.m_btn.SetFlat(FALSE);
注意:为达到最好效果,请根据Icon的大小调整按钮的大小。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库BCMenu在线全文阅读。
相关推荐: