mfc 多文档中怎样动态添加菜单项?

mfc 多文档中怎样动态添加菜单项?,第1张

pDocTemplate = new CSingleDocTemplate(

IDR_MAINFRAME,

RUNTIME_CLASS(CMyScrollViewDoc),

RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口

RUNTIME_CLASS(CMyScrollViewView))这个函数将文档类视类和框架类结合在一起,这个是单文档的组织形式,所以在单文档中框架类始终没有改变,所以可以动态加载菜单;

pDocTemplate = new CMultiDocTemplate(IDR_questionTYPE,

RUNTIME_CLASS(CquestionDoc),

RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架

RUNTIME_CLASS(CquestionView))而这个是多文档的组织形式,可以看到第三个参数变成了CChildFrame,而不是CMainFrame,第一个参数也有所改变看,所以每新建一个多文档就会对应一个CChildFrame,所以动态添加的菜单不会显示在CMainFrame上,多文档不共用框架类

动态控件的创建过程:

1.建立控件ID号:

ID号是控件的标识,创建控件前必须先为它设置一个ID号。

打开资源中的“String Table”,在空白行上双击鼠标,这时会d出一个ID属性对话框,在其中的ID编辑框中输入ID,如:IDC_MYBUTTON,在Caption中输入控件标题或注解(注:Caption框不能为空,为空会导致创建失败),这里我输入的是按钮上要显示的文字--动态按钮。

2.建立控件对象:

不同种类的控件应创建不同的类对象:

·按钮控件 CButton (包括普通按钮、单选按钮和复选按钮)

·编辑控件 CEdit

·静态文本控件 CStatic

·标签控件 CTabCtrl

·旋转控件 CSpinButtonCtrl

·滑标控件 CSliderCtrl

·多信息编辑控件 CRichEditCtrl

·进度条控件 CProgressCtrl

·滚动条控件 CSrcollBar

·组合框控件 CComboBox

·列表框控件 CListBox

·图像列表控件 CImageCtrl

·树状控件 CTreeCtrl

·动画控件 CAnimateCtrl

本文分步介绍了如何在应用程序中添加BCGControlBar的Ribbon控件,并且附源码。

1、打开MainFrme.h,移除CBCGPMenuBar、 m_wndMenuBar、CBCGPToolBar、 m_wndToolBar。

2、对Ribbon Bar和主要的 Ribbon Button添加自定义。

1

2

CBCGPRibbonBar m_wndRibbonBar

CBCGPRibbonMainButton m_MainButton

3、添加定义面板图像列表。

1

CBCGPToolBarImages m_PanelIcons

4、打开MainFrm.cpp,移除m_wndMenuBar 和m_wndToolBar有关的东西。

5、对源添加一个Ribbon Main Button(IDB_MAIN)26X26像素的位图,小图标(16像素高度)的位图列表以及大图标(32像素高度)位图列表,并将他们命名为IDB_SMALL_ICONS和IDB_LARGE_ICONS respectively。

6、在CMainFrame::OnCreate中创建Ribbon Bar:

1

m_wndRibbonBar.Create (this)

7、初始化和设置主要的Ribbon Button:

1

2

3

4

m_MainButton.SetMenu (IDR_FILE_MENU)

m_MainButton.SetImage (IDB_MAIN)

m_MainButton.SetToolTipText (_T("File"))

m_wndRibbonBar.SetMainButton (&m_MainButton, CSize (45, 45))

8、初始化和加载面板图标的图像列表。

1

2

m_PanelIcons.SetImageSize (CSize (16, 16))

m_PanelIcons.Load (IDB_PANEL_ICONS)

9、添加第一类:

1

2

3

4

CBCGPRibbonCategory* pCategory = m_wndRibbonBar.AddCategory

(_T("&Write"), // Category name

IDB_WRITE, // Category small images (16 x 16)

IDB_WRITE_LARGE) // Category large images (32 x 32)

10、添加第一个面板到这个类别:

1

2

3

CBCGPRibbonPanel* pPanel = pCategory->AddPanel (

_T("Clipboard"), // Panel name

m_PanelIcons.ExtractIcon (0)) // Panel icon

11、添加ribbon元素到面板:

1

2

3

4

5

6

7

8

9

10

11

12

// Create the first button to Panel ("Paste"):

CBCGPRibbonButton* pPasteButton = new CBCGPRibbonButton (ID_EDIT_PASTE, _T("Paste"), -1, 0)

// The third parameter (-1) tells that this button does not have a small icon.

// Therefore the "Paste" button will be always displayed with large icon.

// Associate a popup menu with the "Paste" button:

pPasteButton->SetMenu (IDR_CONTEXT_MENU)

// Add other buttons to the panel. These buttons have small icons only:

pPanel->Add (new CBCGPRibbonButton (ID_EDIT_CUT, _T("Cut"), 1))

pPanel->Add (new CBCGPRibbonButton (ID_EDIT_COPY, _T("Copy"), 2))

pPanel->Add (new CBCGPRibbonButton (ID_EDIT_PAINT, _T("Paint"), 9))


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7852100.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存