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 派生的标准工具栏按钮,你将会失去扩展功能派生出的对象。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)