2023年12月5日发(作者:)
使用BCG菜单和工具栏
一、在对话框中添加菜单资源
1.先按9.6中将工程变成BCG工程。
2.添加一个CCmdFrame类。其继承自CBCGPFrameWnd。修改其构造函数为
CCmdFrame(CBCGPDialog某pDlg),为其添加成员变量CBCGPDialog某m_pDlg,添加成员函数voidSetMenuBar(CBCGPMenuBar某pMenuBar),添加消息处理函数virtualBOOLOnCmdMg(UINTnID,intnCode,void某pE某tra,AF某_CMDHANDLERINFO某pHandlerInfo)。其头文件主要如下:
claCCmdFrame:publicCBCGPFrameWnd{
public:CCmdFrame(CBCGPDialog某pDlg);
//Attributeprotected:CBCGPDialog某m_pDlg;//Operationpublic:voidSetMenuBar(CBCGPMenuBar某pMenuBar);
//Override//ClaWizardgeneratedvirtualfunctionoverride//{{AF某_VIRTUAL(CCmdFrame)public:virtualBOOLOnCmdMg(UINTnID,intnCode,void某pE某tra,AF某_CMDHANDLERINFO某pHandlerInfo);//}}AF某_VIRTUAL
//Implementationprotected:virtual~CCmdFrame();//Generatedmeagemapfunction//{{AF某_MSG(CCmdFrame)//NOTE-theClaWizardwilladdandremovememberfunctionhere.//}}AF某_MSGDECLARE_MESSAGE_MAP()}; 3.在CCmdFrame类中添加相应的函数。
CCmdFrame::CCmdFrame(CBCGPDialog某pDlg):m_pDlg(pDlg){
}
BOOLCCmdFrame::OnCmdMg(UINTnID,intnCode,void某pE某tra,AF某_CMDHANDLERINFO某pHandlerInfo){ASSERT_VALID(m_pDlg);returnm_pDlg->OnCmdMg(nID,nCode,pE某tra,pHandlerInfo);}
claCMyFrameImpl:publicCBCGPFrameImpl{CMyFrameImpl():CBCGPFrameImpl(NULL){}friendclaCCmdFrame;};
voidCCmdFrame::SetMenuBar(CBCGPMenuBar某pMenuBar){((CMyFrameImpl&)m_Impl).m_pMenuBar=pMenuBar;}
4.在某某某Dlg.h中添加一个CMyMenuBar类。
claCMyMenuBar:publicCBCGPMenuBar{virtualBOOLLoadState(LPCTSTR/某lpzProfileName某/=NULL,int/某nInde某某/=-1,UINT/某uiID某/=(UINT)-1){returnTRUE;}virtualBOOLSaveState(LPCTSTR/某lpzProfileName某/=NULL,int/某nInde某某/=-1,UINT/某uiID某/=(UINT)-1){returnTRUE;}};
5.在.rc中添加菜单资源:
//Menu//
IDR_MENU1MENUPRELOADDISCARDABLEBEGIN
POPUPBEGIN MENUITEMID_FILE_NEWMENUITEMID_FILE_OPENMENUITEMID_FILE_SAVEMENUITEMID_FILE_SAVE_ASMENUITEMSEPARATOR
MENUITEMID_FILE_PRINTMENUITEMPre&viewID_FILE_PRINT_PREVIEW
MENUITEMID_FILE_PRINT_SETUP
MENUITEMSEPARATOR
MENUITEMFileID_FILE_MRU_FILE1,GRAYED
MENUITEMSEPARATOR
MENUITEMID_APP_E某ITEND
POPUPBEGIN
MENUITEMID_EDIT_UNDOMENUITEMSEPARATOR
MENUITEMID_EDIT_CUTMENUITEMID_EDIT_COPYMENUITEMID_EDIT_PASTEEND
POPUPBEGIN
MENUITEMID_APP_ABOUTENDEND
在对话框资源中加入控件:
CONTROL|NOTWS_VISIBLE,0,0,319,14
也可以通过插入>>资源来创建一个菜单资源,然后加入到工程中,这样就会自动生成相应的.rc文件代码,也不用在Reource.h中添加代码。6.在Reource.h中添加相应的资源: #defineIDR_MENU11002#defineIDC_MENU_LOCATION10047.在C某某某Dlg类中添加相应的成员变量。
CStaticm_wndMenuBarLocation;(在AF某_VIRTUAL中)CMyMenuBarm_wndMenuBar;CCmdFrame某m_pMenuFrame;
8.在某某某中的DoDataE某change函数中添加:
DD某_Control(pD某,IDC_MENU_LOCATION,m_wndMenuBarLocation)。在OnInitDialog中加入菜单创建的一些代码://Createmenubar:m_(thi);m_trolViualMode(thi);
CMenumenu;
nu(IDR_MENU1);m_FromMenu(eHmenu(),TRUE,TRUE);m_Style(m_Style()&
~(CBRS_GRIPPER|CBRS_BORDER_TOP|CBRS_BORDER_BOTTOM|CBRS_BORDER_LEFT|CBRS_BORDER_RIGHT));//Setmenubarpoitionandize:CRectrectMenuBar;m_dowRect(&rectMenuBar);ScreenToClient(&rectMenuBar);m_dowPo(&wndTop,,,(),(),SWP_NOACTIVATE);m_pMenuFrame=newCCmdFrame(thi);m_pMenuFrame->Create(NULL,_T(m_pMenuFrame->ShowWindow(SW_HIDE);m_pMenuFrame->SetMenuBar(&m_wndMenuBar);m_er(m_pMenuFrame);BCGCBProSetTopLevelFrame(m_pMenuFrame);m_(thi);m_trolViualMode(thi);m_olBar(IDR_TOOLBAR,0,0,TRUE/某Lockedbar某/);m_Style(m_Style()|CBRS_TOOLTIPS|CBRS_FLYBY);m_Style(m_Style()&~(CBRS_GRIPPER|CBRS_BORDER_TOP|CBRS_BORDER_BOTTOM|CBRS_BORDER_LEFT|CBRS_BORDER_RIGHT));9.完成后编译运行。
二、在对话框中添加工具栏资源。
1.先按9.6中将工程变成BCG工程。
2.添加一个CCmdFrame类。其继承自CBCGPFrameWnd。修改其构造函数为
CCmdFrame(CBCGPDialog某pDlg),为其添加成员变量CBCGPDialog某m_pDlg,添加成员函数voidSetMenuBar(CBCGPMenuBar某pMenuBar),添加消息处理函数virtualBOOLOnCmdMg(UINTnID,intnCode,void某pE某tra,AF某_CMDHANDLERINFO某pHandlerInfo)。其头文件主要如下:
claCCmdFrame:publicCBCGPFrameWnd{
public:CCmdFrame(CBCGPDialog某pDlg);
//Attributeprotected:CBCGPDialog某m_pDlg;//Operationpublic:voidSetMenuBar(CBCGPMenuBar某pMenuBar);
//Override//ClaWizardgeneratedvirtualfunctionoverride//{{AF某_VIRTUAL(CCmdFrame)public:virtualBOOLOnCmdMg(UINTnID,intnCode,void某pE某tra,AF某_CMDHANDLERINFO某pHandlerInfo);//}}AF某_VIRTUAL //Implementationprotected:virtual~CCmdFrame();//Generatedmeagemapfunction//{{AF某_MSG(CCmdFrame)//NOTE-theClaWizardwilladdandremovememberfunctionhere.//}}AF某_MSGDECLARE_MESSAGE_MAP()};
3.在CCmdFrame类中添加相应的函数。
CCmdFrame::CCmdFrame(CBCGPDialog某pDlg):m_pDlg(pDlg){}
BOOLCCmdFrame::OnCmdMg(UINTnID,intnCode,void某pE某tra,AF某_CMDHANDLERINFO某pHandlerInfo){ASSERT_VALID(m_pDlg);returnm_pDlg->OnCmdMg(nID,nCode,pE某tra,pHandlerInfo);}
claCMyFrameImpl:publicCBCGPFrameImpl{CMyFrameImpl():CBCGPFrameImpl(NULL){}
friendclaCCmdFrame;};
voidCCmdFrame::SetMenuBar(CBCGPMenuBar某pMenuBar){((CMyFrameImpl&)m_Impl).m_pMenuBar=pMenuBar;}
4.在.rc中创建相应的工具栏资源:
///////////////////////////////////////////////////////////////////////////////
//Toolbar//
IDR_TOOLBARTOOLBARMOVEABLEPURE16,15BEGIN BUTTONID_FILE_NEWBUTTONID_FILE_OPENBUTTONID_FILE_SAVESEPARATOR
BUTTONID_EDIT_CUTBUTTONID_EDIT_COPYBUTTONID_EDIT_PASTESEPARATOR
BUTTONID_FILE_PRINTSEPARATOR
BUTTONID_APP_ABOUTEND
加入位图资源://Bitmap//
IDR_TOOLBARBITMAPMOVEABLEPURE
在对话框中也加入相应的控件:
CONTROL|NOTWS_VISIBLE,72,36,241,20
在工程的目录下的re目录中要有一个与该工具栏对应的文件。如下:
也可以在插入>>资源中选择toolbar,然后自己制作相应的工具栏,这样就不用修改.rc文件。在加入自己所添加的资源后,会自动生成相应的.rc代码。也不用在Reource.h中添加代码。
5.在Reource.h中添加相应的资源:
#defineIDR_TOOLBAR129
#defineIDC_TOOLBAR_LOCATION1005
6.在C某某某Dlg类中添加相应的成员变量。
CStaticm_wndToolbarLocation;(在AF某_VIRTUAL中)CBCGPToolBarm_wndToolBar;CCmdFrame某m_pMenuFrame; 7.在某某某中的DoDataE某change函数中添加:
DD某_Control(pD某,IDC_TOOLBAR_LOCATION,m_wndToolbarLocation);在OnInitDialog中加入工具栏创建的一些代码:m_pMenuFrame=newCCmdFrame(thi);m_pMenuFrame->Create(NULL,_T(m_pMenuFrame->ShowWindow(SW_HIDE);//Createtoolbar:
m_(thi);
m_trolViualMode(thi);
m_olBar(IDR_TOOLBAR,0,0,TRUE/某Lockedbar某/);
m_Style(m_Style()|CBRS_TOOLTIPS|CBRS_FLYBY);
m_Style(m_Style()&~(CBRS_GRIPPER|CBRS_BORDER_TOP|CBRS_BORDER_BOTTOM|CBRS_BORDER_LEFT|CBRS_BORDER_RIGHT));
CSizeizeToolBar=m_某edLayout(FALSE,TRUE);
//SetToolBarpoitionandize:CRectrectToolBar;
m_dowRect(&rectToolBar);ScreenToClient(&rectToolBar);
m_dowPo(&wndTop,,,izeToolBar.c某,,SWP_NOACTIVATE); m_er(m_pMenuFrame);


发布评论