如何在应用程序中添加BCGControlBar的Ribbon控件

如何在应用程序中添加BCGControlBar的Ribbon控件,第1张

本文分步介绍了如何在应用程序中添加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))

网上找的,来源http://thisisxingmeng.blog.163.com/blog/static/4211528620087231197613/

BCG中有很多控件,其中属性配置对话框功能很强大,为了单独使用BCG 的属性配置对话框,需要对代码有一些修改,下面是具体步骤如下:

1、 在Stdafx.h中增加BCG的头文件,添加以后在项目使用BCG的任何部分就不在需要增加头文件,代码如下:

#include <BCGCBProInc.h>

2、 修改项目从CWinApp的继承关系,增加从CBCGPWorkspace的继承,如果不增加,在使用BCG的过程中会有一些问题,代码如下:

class CTestControlConfigApp : public CWinApp,

public CBCGPWorkspace

3、 在CWinApp的子类的InitInstance函数中增加如下语句:

AfxOleInit() // 进行BCG使用控件的初始化

4、 最后为了防止BCG资源泄露,需要在CWinApp的子类中的ExitInstance函数中增加如下语句:

BCGCBProCleanUp ()

5、最后,就可以使用属性配置类了

第一步,声明一个变量CBCGPPropList m_wndPropList

第二步,在OnCreate或者OnInitDialog函数中初始化,例子代码如下:

CRect rect(159,29,468,376)

if (!m_wndPropList.Create (WS_VISIBLE | WS_CHILD, rect, this, 2))

{

TRACE0("Failed to create Properies Grid \n")

return -1 // fail to create

}

m_wndPropList.EnableHeaderCtrl (FALSE)

m_wndPropList.EnableDesciptionArea ()

m_wndPropList.SetVSDotNetLook ()

m_wndPropList.MarkModifiedProperties ()

CBCGPProp* pGroup1 = new CBCGPProp (_T("Appearance"))

pGroup1->AddSubItem (new CBCGPProp (_T("3D Look"), (_variant_t) false,

_T("Specifies the dialog's font will be nonbold and controls will have a 3D border")))

CBCGPProp* pProp = new CBCGPProp (_T("Border"), _T("Dialog Frame"),

_T("One of: None, Thin, Resizable, or Dialog Frame"))

pProp->AddOption (_T("None"))

pProp->AddOption (_T("Thin"))

pProp->AddOption (_T("Resizable"))

pProp->AddOption (_T("Dialog Frame"))

pProp->AllowEdit (FALSE)

pGroup1->AddSubItem (pProp)

pGroup1->AddSubItem (new CBCGPProp (_T("Caption"), (_variant_t) _T("About BCGProTest"),

_T("Specifies the text that will be displayed in the dialog's title bar")))

m_wndPropList.AddProperty (pGroup1)

CBCGPProp* pSize = new CBCGPProp (_T("Window Size"), 0, TRUE)

pProp = new CBCGPProp (_T("Height"), (_variant_t) 250l,

_T("Specifies the dialog's height"))

pProp->EnableSpinControl (TRUE, 0, 1000)

pSize->AddSubItem (pProp)

pProp = new CBCGPProp ( _T("Width"), (_variant_t) 150l,

_T("Specifies the dialog's width"))

pProp->EnableSpinControl ()

pSize->AddSubItem (pProp)

m_wndPropList.AddProperty (pSize)

CBCGPProp* pGroup2 = new CBCGPProp (_T("Font"))

LOGFONT lf

CFont* font = CFont::FromHandle ((HFONT) GetStockObject (DEFAULT_GUI_FONT))

font->GetLogFont (&lf)

lstrcpy (lf.lfFaceName, _T("Arial"))

pGroup2->AddSubItem (new CBCGPFontProp (_T("Font"), lf, CF_EFFECTS | CF_SCREENFONTS, _T("Specifies the default font for the dialog")))

pGroup2->AddSubItem (new CBCGPProp (_T("Use System Font"), (_variant_t) true, _T("Specifies that the dialog uses MS Shell Dlg font")))

m_wndPropList.AddProperty (pGroup2)

CBCGPProp* pGroup3 = new CBCGPProp (_T("Misc"))

pProp = new CBCGPProp (_T("(Name)"), _T("IDD_ABOUT_BOX (dialog)"))

pProp->Enable (FALSE)

pGroup3->AddSubItem (pProp)

CBCGPColorProp* pColorProp = new CBCGPColorProp (_T("Window Color"), RGB (210, 192, 254), NULL, _T("Specifies the default dialog color"))

pColorProp->EnableOtherButton (_T("Other..."))

pColorProp->EnableAutomaticButton (_T("Default"), ::GetSysColor (COLOR_3DFACE))

pGroup3->AddSubItem (pColorProp)

static TCHAR BASED_CODE szFilter[] = _T("Icon Files (*.ico)|*.ico|All Files (*.*)|*.*||")

pGroup3->AddSubItem (new CBCGPFileProp (_T("Icon"), TRUE, _T(""), _T("ico"), 0, szFilter, _T("Specifies the dialog icon")))

pGroup3->AddSubItem (new CBCGPFileProp (_T("Folder"), _T("c:\\")))

COleDateTime date = COleDateTime::GetCurrentTime ()

pGroup3->AddSubItem (new CBCGPDateTimeProp (_T("Date"), date,

_T("Set a date"), 0, CBCGPDateTimeCtrl::DTM_DATE))

pGroup3->AddSubItem (new CBCGPDateTimeProp (_T("Time"), date,

_T("Set a time"), 0, CBCGPDateTimeCtrl::DTM_TIME))

m_wndPropList.AddProperty (pGroup3)

CBCGPProp* pGroup4 = new CBCGPProp (_T("Hierarchy"))

CBCGPProp* pGroup41 = new CBCGPProp (_T("First sub-level"))

pGroup4->AddSubItem (pGroup41)

CBCGPProp* pGroup411 = new CBCGPProp (_T("Second sub-level"))

pGroup41->AddSubItem (pGroup411)

pGroup411->AddSubItem (new CBCGPProp (_T("Item 1"), (_variant_t) _T("Value 1"),

_T("This is a description")))

pGroup411->AddSubItem (new CBCGPProp (_T("Item 2"), (_variant_t) _T("Value 2"),

_T("This is a description")))

pGroup411->AddSubItem (new CBCGPProp (_T("Item 3"), (_variant_t) _T("Value 3"),

_T("This is a description")))

pGroup4->Expand (FALSE)

m_wndPropList.AddProperty (pGroup4)

m_wndPropList.ShowWindow(SW_SHOW)

介绍在BCGControlBar中如何将不同的控件比如组合框或编辑框添加到工具栏上。

>>BCGControlBar v19下载

比如你想要创建一个“查找”框,让它出现在工具栏中,并包含最近使用的搜索字符串,使得用户可以在复合的编辑框中定义搜索字符串,然后可以点击回车键去通过文件搜索,或是点击退出键返回到主框架,文件主要是用CEditView-derived视图进行显示。

下面是BCGControlBar进行设置的步骤,主要涉及到创建复合框按钮命令的管理:

1、打开应用程序资源,添加一个新有着ID_EDIT_FIND命令ID的按钮到设计好的工具栏,同时用一样的ID名字创建一个新的菜单项目。添加一个新的有着ID_EDIT_FIND_COMBO命令ID的字符串“Find the text\nFind”到字符串表格,这个ID将会被作为查找复合框按钮的命令ID。

值得注意的是,这个ID_EDIT_FIND是CEditView处理的标准命令,所以你不需要对于这个命令实现一个特殊的处理程序,但是需要对ID_EDIT_FIND_COMBO命令实现一个处理程序。

2、CComboBox类中派生出一个类,命名为CFindComboBox。

3、在CFindComboBox类中覆盖PreTranslateMessage的虚拟成员函数,这样你就可以首先传递WM_KEYDOWN message,并采取以适当的行动。当用户点击退出键的时候,它必须返回到主架构窗口中。用户点击回车键的时候,它就必须把有着ID_EDIT_FIND_COMBO命令的ID的WM_COMMAND信息传递到主要架构窗口中。

4、CBCGPToolbarComboBoxButton类中派生出一个类,命名为CFindComboButton。

5、CBCGPToolbarComboBoxButton构造函数需要三个参数:按钮的命令ID和按钮的图像索引以及复合框风格。你可以通过将ID_EDIT_FIND_COMBO作为命令ID进行传递,也可以使用有着ID_EDIT_FIND的CImageHash::GetImageOfCommand来找到图像索引。

6、覆盖CBCGPToolbarComboBoxButton::CreateCombo成员函数,并创建CFindComboBox对象来返回使用它。

7、使用IMPLEMENT_SERIAL宏使得按钮更加的持久,Workspace管理器会自动加载和保存按钮的状态从或是到Windows注册表。

8、在你的视图中ID_EDIT_FIND_COMBO的处理器,使用有ID_EDIT_FIND_COMBO ID的CBCGPToolBar::GetCommandButtons来检索所有的查找命令按钮,由于是自定义的,它可以是有着一样ID的几个复制的复合框按钮。

9、使用CBCGPToolBar::IsLastCommandFromButton命令来决定是否查找命令从复合框按钮中发出,如果是,找到文本并添加搜索字符串到符合框。

下面是BCGControlBar将查找复合框按钮添加到工具栏的具体步骤:

1、在主框架窗口中实现BCGM_RESETTOOLBAR信息处理程序。值得注意的是,从框架中发出的到主要框架窗口中的信息已经被初始化了(在应用程序启动时),或是在自定义中被重置看。在这两种情况下,你需要替换有自定义查找复合框按钮的标准工具栏。

2、OnToolbarReset处理程序中分析工具栏的ID(WPARAM of the BCGM_RESETTOOLBAR的信息)。调用有着ID_EDIT_FIND的CBCGPToolBar::ReplaceButton就可以进入IDR_MAINFRAME工具栏,引用一个CFindComboButton对象。值得注意的是,你可以构建一个CFindComboButton对象,因为ReplaceButton复制了按钮对象和维护的副本。

3、如果启动定制,可以实现“自定义”的处理器( OnViewCustomize),并创建CBCGPToolbarCustomize对话框,你必须要调用CBCGPToolbarCustomize :: ReplaceButton ID_EDIT_FIND和参考CFindComboButton对象。

值得注意的是,自定义对话框中包含有着命令列框的命令页面。用户可以在工具栏中拖拽命令,在默认的情况下,自定义对话框处理应用程序菜单,对每个类构建标准的工具栏按钮列表。如果在需要的时候,你没有更换由 CBCGPToolbarButton 派生的标准工具栏按钮,你将会失去扩展功能派生出的对象。


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

原文地址: https://www.outofmemory.cn/bake/11854291.html

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

发表评论

登录后才能评论

评论列表(0条)

保存