上位机MFC扩展编程扩展库目录文件介绍
当前这套教程介绍的是俄罗斯BCGSoft公司的BCGControlBar商业界面库。
据评估是全球最优秀的MFC界面类库,功能强大,显示丰富。
教程涉及的源代码仅供参考学习。
微软高版本的MFC购买此库进行修剪发布,所以熟悉MFC就能很好的使用此界面库。
可以搜索BCGP下载库的学习版本。
下载扩展库打开目录后,会有很多文件与文件夹,这里对这些文件作一些介绍。
上位机MFC扩展编程扩展库目录文件介绍
1.文件夹:BCGCBPro。
界面库的源代码,内含库工程的管理文件与头文件,源文件,语言资源文件等等。
打开工程管理文件可编辑出链接库,动态库等供我们程序使用。
2.文件夹:BCGPAppWizard,BCGPAppWizard7,BCGPAppWizard2005。
为界面库工程向导文件。
我们创建工程时可以选择基于MFC中,可以选择基于此界面库的。
由于此界面库仅为MFC的扩展,所以MFC的知识可以在此界面库内使用。
向导工程安排在后面章节介绍。
3.文件夹:Bin,Bin64。
为界面库编译生成的静态库,动态库,例程的32,64位版本的程序。
4.文件夹:Designer。
为界面,Ribon,工具栏等设计工具。
5. 文件夹:Examples,Samples。
为界面库自带的例程工程源代码,打开里面的工程管理文件可编译出例程。
6. 文件夹:Graphics。
为svg格式的图片。
MFC扩展库的配制在我们自己工程中配制扩展库,主要就是包含库的头文件,静态库(LIB)文件,
例如我信MFC扩展库路径为D:\Program Files (x86)\BCGSoft\BCGControlBarPro
则头文件路径
D:\Program Files (x86)\BCGSoft\BCGControlBarPro\BCGCBPro
库文件路径
D:\Program Files (x86)\BCGSoft\BCGControlBarPro\Bin
动态库路径
D:\Program Files (x86)\BCGSoft\BCGControlBarPro\Bin
在运行编译好的自己的例程时,还得将用到的库的动态库放在同级目录。
不然运行时会提示缺少动态库文件。
如果嫌这样操作麻烦,也可以将库动态库目录设置在系统的路径内:
具体如何添加,每个系统略有不同,可自行百度。
MFC扩展库文档工程创建
基于单文档或多文档的工程,工程中对应的类比较多,有视窗,框架,文档类等。
我们在使用扩展库时也要将这些类更换为库的对应类。
同样第一步也是包含界面库的头文件,库文件路径。
2. 工程的stdafx.h文件中包含库头文件#include "BCGCBProInc.h"
换CWinAppEx为CBCGPWinApp: #define CWinAppEx CBCGPWinApp
换CFrameWndEx 为CBCGPFrameWnd : #define CFrameWndEx CBCGPFrameWnd
3.因为不使用MFC自带的控件了,所以一些菜单栏,工具栏,状态栏都要进行替换
如CStatusBar 的换成对应CBCGPStatusBar
如果嫌麻烦,也可以直接使用库的类向导来创建工程。
搜索BCGP,可以下载得到我翻译的中文版本的工程向导文件及使用方法。
MFC扩展库界面定制
建立了基于扩展库的程序后,其界面也可以根据需要进行更改。
比如界面主题设置,
工具条的添加定制等。
1.可选择在APP类初始化函数InitInstance中添加代码设置界面主题
SetVisualTheme(BCGP_VISUAL_THEME_OFFICE_2016_BLACK);
2.添加下载代码打开定制工具栏,菜单栏等
CBCGPToolbarOptions toolbarOptions;
toolbarOptions.m_nViewToolbarsMenuEntryID = ID_VIEW_TOOLBAR;
toolbarOptions.m_nCustomizeCommandID = ID_VIEW_CUSTOMIZE;
toolbarOptions.m_strCustomizeCommandLabel = _T("Customize...");
SetToolbarOptions(toolbarOptions);
3.在框架窗口中,更换菜单,工具栏状态栏为界面库对应的类
CBCGPToolBar m_wndToolBar;
CBCGPStatusBar m_wndStatusBar;
CBCGPMenuBar m_wndMenuBar;
- CBCGPPopupMenu::SetForceMenuFocus(FALSE);
- if (!m_wndMenuBar.Create(this))
- {
- TRACE0("Failed to create menubar\n");
- return -1; // fail to create
- }
- m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle() | CBRS_SIZE_DYNAMIC);
- if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
- !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
- {
- TRACE0(“failed to create toolbar");
- return -1;}
- if (!m_wndStatusBar.Create(this))
- {
- TRACE0(“failed to creat statusbar");
- return -1;}
- m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
- EnableDocking(CBRS_ALIGN_ANY);
- m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
- DockControlBar(&m_wndMenuBar);
- m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
- DockControlBar(&m_wndToolBar);
复制代码
MFC扩展库界面工程向导使用
我们创建MFC程序时使用工程向导可以很方便可视化创建工程,定制程序框架功能。
此扩展库也提供向导功能,这样就不用像前面课程一步步通过代码添加界面功能。
工程向导与MFC的向导基本一致,但多了扩展库自己的一些属性,这些属性的含义可参考如下。
1.工具栏/菜单界面。
如果要创建具有“Classic”(基于工具栏/菜单的用户界面)的应用程序,请选择此选项。
2.高颜色工具栏图像。
如果选中此项,将使用高颜色(24bpp)位图创建所有工具栏。
3.基于功能区的接口。
如果要使用功能区栏创建Office2007/2010样式的应用程序,请选择此选项。
4.后台视图。
如果要创建带后台视图的功能区栏,请选中此项。
5.使用Ribbon Designer。
如果选中此项,则将使用功能区设计器资源创建项目。否则,功能区栏将在源代码中初始化。
6.MDI选项卡。
您的MDI应用程序将使用MDI选项卡创建。如果您的应用程序是SDI,则此选项将被禁用。
7.MDI选项卡组。
您的MDI应用程序将使用MDI选项卡组创建。如果您的应用程序是SDI,则此选项将被禁用。
8.视觉风格。
选择最初应用于应用程序的视觉主题(如Office2010或Visual Studio 2010)。
9.添加“应用程序外观”菜单。
如果您希望允许用户修改应用程序,请选中此选项查看运行时。
如果应用程序基于工具栏/菜单,则“查看”菜单下将显示“应用程序外观”菜单项。在功能区栏中,“样式”菜单将放置在右侧
10.可选自定义(“Alt+Drag”)。
允许在不调用自定义对话框的情况下拖放工具栏/菜单项。
11.用户定义的工具栏。
添加在运行时创建自定义工具栏的功能。
12.用户定义的图像。
允许将工具栏按钮与用户定义的位图关联。
13.键盘定制。
添加到项目键盘快捷键自定义中。
14.鼠标自定义。
添加到鼠标事件的项目自定义中。
15.上下文菜单定制。
将上下文菜单自定义添加到项目中。
16.个性化菜单。
首先显示最近使用过的菜单项。如果不选择此选项,将显示所有菜单项。
17.用户定义的工具。
添加在运行时自定义用户定义(通常是外部)工具的功能。
18.“窗口…”对话框。
选中此选项是否要将标准的“Windows…”对话框替换为增强型(仅限MDI应用程序)。
19.静态链接库。
您的项目将静态链接到bcgcontrolbar库。此选项不能用于评估版本!
高级属性:
1.快捷方式(“outlook”-样式)栏。如果要添加快捷方式栏,请选中此选项。
2.嵌入式控制。将使用嵌入控件创建快捷方式栏。
3.标题栏。如果要添加标题栏,请选中此选项。
4.停靠工作区栏。添加带有可分离选项卡的工作区栏示例。
5.对接输出杆。添加输出栏的示例。
6.对接属性网格。添加Visual Studio样式的属性网格。
7.启用自动隐藏。为所有停靠窗格启用“自动隐藏窗口”功能。
8.对接类型。选择控制栏停靠样式。
您可以选择:
Visual Studio.net样式Visual Studio 2005/2008/2010/2012/2013/2015样式。
MFC扩展库语言的设置
MFC扩展库面向全球用户,语言是一个很重要部分。
界面库里的资源默认是英文。如果要使用其他语言,比如中文,就要额外编译语言资源。
一样资源也分为静态与动态版。
这们来看下如何设置
首先是使用库的对应的语言工程编译出动态库。
我们程序有动态调用扩展库,有静态调用扩展库。
动态调用时
1.在app类中添加HINSTANCE m_hinstBCGCBRes;
2.加载语言库与设置
m_hinstBCGCBRes = LoadLibrary(_T("BCGCBProRes***.dll")); // *** - language
BCGCBProSetResourceHandle(m_hinstBCGCBRes);
3.退出程序释放资源FreeLibrary(m_hinstBCGCBRes);
如果我们程序是静态调用扩展库时
在资源管理器窗口,包含语言资源就好
#include “L.***\bcgcontrolbar.rc” ,
***为非特定语言,比如中文:#include "L.chs\bcgcontrolbar.rc"
4.库工程文件编译时默认使用的是英文的资源管理文件BCGCBPro.rc。
最简单直接有效的的方法就是使用对应文件文件夹(如中文L.chs)内的资源管理文件替换,
改名为BCGCBPro.rc,重新编译,这样库内使用的资源就为指定语言了。
当然,如果程序涉及多语言切换,可使用上面动态切换语言的方法。
MFC扩展库RibbonDesigner简单使用
当使用Ribon功能时,其外观可以通过工具BCGRibbonDesigner进行设置,
这里我们来简单看下如何使用这个工具,工具具体操作就不介绍了,下载了库文件后有对应视屏版本。
BCGRibbonDesigner工具可以编辑现成工程的资源,生成xml文件。
之后只要在项目工程里简单使用就好。
比如定义变量
CBCGPRibbonBar m_wndRibbonBar;
然后初始化
if (!m_wndRibbonBar.Create(this))
{
return -1;
}
if (!m_wndRibbonBar.LoadFromXML(_T("IDR_BCGP_RIBBON_XML")))
{
return -1;
}
注意字符串IDR_BCGP_RIBBON_XML是库自带的常量。
MFC扩展库ToolbarEditor简单使用
BCGToolbarEditor可以用来编辑工具条资源。
使用此扩展库创建的文档工程,默认工具条会对应两个图片,
这样就可以通过这个工具快速编辑
工具条资源的编辑比较简单,在使用这个工具编辑工具条后,我们只要注意控件ID就可以了。
我们是通过控件ID来添加控件响应函数的。
MFC扩展库VisualDesigner简单使用
BCGVisualDesigner可以快速创建和修改用于MFC应用程序的数字仪表盘和图表。
它生成描述仪表板和图表元素的布局和属性的XML文件。
只要需要,XML就可以在运行时加载和处理,以向最终用户呈现交互式数字仪表板和/或图表。
生成XML文件后,我们可以在工程中定义CBCGPVisualContainerCtrl m_wndContainer;
将文件导入到工程,文件类型必须定义为BCGP_VISUAL_XML
然后加入文件ID就好:
m_wndContainer.GetVisualContainer()->LoadFromXML(IDR_DASHBOARD1);
如上我们准备好了界面后,界面控件还未实现消息响应,我们要注册控件的相关消息处理函数。
如:
ON_REGISTERED_MESSAGE(BCGM_ON_GAUGE_FINISH_TRACK, OnTrackKnob)
可以注册计量表滑动停止消息处理函数OnTrackKnob
- afx_msg LRESULT OnTrackKnob(WPARAM wp, LPARAM lp);
- LRESULT CMy4Dlg::OnTrackKnob(WPARAM wp, LPARAM lp)
- {
- static double dblCount = 0.0;
- int nID = (int)wp;
- CBCGPVisualContainer* pContainer = m_wndContainer.GetVisualContainer();
- ASSERT_VALID(pContainer);
- if (nID == 101)// Knob with ID == 101
- {
- CBCGPGaugeTrackingData* pData = (CBCGPGaugeTrackingData*)lp;
- double dblVal = pData->m_Value;
- CBCGPCircularGaugeImpl* pGauge1 = DYNAMIC_DOWNCAST(CBCGPCircularGaugeImpl, pContainer->GetByID(1));
- ASSERT_VALID(pGauge1);
- CBCGPNumericIndicatorImpl* pSubGauge = DYNAMIC_DOWNCAST(CBCGPNumericIndicatorImpl, pGauge1->GetSubGaugeByID(1));
- ASSERT_VALID(pSubGauge);
- pGauge1->SetValue(dblVal);
- pSubGauge->SetValue(dblVal);
- CBCGPCircularGaugeImpl* pGauge2 = DYNAMIC_DOWNCAST(CBCGPCircularGaugeImpl, pContainer->GetByID(2));
- ASSERT_VALID(pGauge2);
- pGauge2->SetValue(100 - dblVal);
- CBCGPNumericIndicatorImpl* pGauge3 = DYNAMIC_DOWNCAST(CBCGPNumericIndicatorImpl, pContainer->GetByID(3));
- ASSERT_VALID(pGauge3);
- dblCount += 0.2;
- pGauge3->SetValue(dblCount);
- pGauge3->Redraw();
- CBCGPColorIndicatorImpl* pLedRed = DYNAMIC_DOWNCAST(CBCGPColorIndicatorImpl, pContainer->GetByID(6));
- ASSERT_VALID(pLedRed);
- pLedRed->SetOpacity(dblVal < 30.0 ? 1.0 : 0.4);
- CBCGPColorIndicatorImpl* pLedYellow = DYNAMIC_DOWNCAST(CBCGPColorIndicatorImpl, pContainer->GetByID(7));
- ASSERT_VALID(pLedYellow);
- pLedYellow->SetOpacity(dblVal >= 30.0 && dblVal < 60.0 ? 1.0 : 0.4);
- if (dblVal >= 30.0 && dblVal < 60.0)
- pLedYellow->StartFlashing();
- else
- pLedYellow->StopFlashing();
- CBCGPColorIndicatorImpl* pLedGreen = DYNAMIC_DOWNCAST(CBCGPColorIndicatorImpl, pContainer->GetByID(8));
- ASSERT_VALID(pLedGreen);
- pLedGreen->SetOpacity(dblVal >= 60.0 ? 1.0 : 0.4);
- }
- return 0;
- }
复制代码 上面介绍的为文字版本MFC扩展库使用方法,对应视频教程,
可以搜索BCGP,找到帖子,会有扩展库,中文工程向导,视频教程供使用。
|