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);