MFC BCGControlBar 库 使用方法

安装 BCGControlBar 库到你的计算机:

  • 解压缩 BCGControlBar.zip (比如,到 c:\bcg 目录中)
  • 把 c:\bcg\bin 增加到你的 path 环境变量中,
  • 运行 Visual C++ 并且打开 Tools | Options 对话框,切换到Directories 页并且把 c:\bcg\bcgcontrolbar 加入到 include 目录 中,把 c:\bcg\bin 加入 library 和 executable 目录中;
  • 打开Bcgcontrolbar 和/或 BcgcontrolbarStatic 项目(路径是 c:\bcg\bcgcontrolbar) 并且选择需要的选项;
  • 如果要安装 BCGControlBar 应用程序向导,只需要打开BCGBAppWizard 项目并编译链接。你将在项目列表中看到一个新的条目。

你必须编译链接所有的 BCGControlBar 库的 DLL 文件;

打开 BCGControlBar 项目并编译链接。下面是一个你将得到的 DLLs 和 库文件列表:

BCGCB***D.dll, BCGCB***D.libDLL debug version
BCGCB***.dll, BCGCB***.libDLL release version
BCGCB***UD.dll, BCGCB***UD.libDLL debug version, UNICODE
BCGCB***U.dll, BCGCB***U.libDLL release version UNICODE
BCGCB***StaticD.libstatic library debug version
BCGCB***StaticDS.libstatic library debug version, MFC shared DLL*
BCGCB***Static.libstatic library release version
BCGCB***StaticS.libstatic library release version, MFC shared DLL*
BCGCB***StaticUD.libstatic library debug version, UNICODE
BCGCB***StaticUDS.libstatic library debug version, UNICODE, MFC shared DLL*
BCGCB***U.libstatic library release version, UNICODE
BCGCB***US.libstatic library release version, UNICODE, MFC shared DLL*

*** 表示版本号。比如,如果你使用的库版本为 5.00 发行版, DLL 的相应的发行版本为 BCGCB500.dll
* static library version with MFC shared DLL 适用于 4.7   或更高版本。

所有这些文件将定位在你的 <BCGLibrary Directory>\Bin 目录中。 记得要把这些目录加入你的系统目录中。


请按如下内容改变你的源代码:

  • 添加 BCGControlBar 路径到 INCLUDE 路径
  • 确定你在你的应用程序中调用 了 AfxOleInit() InitInstance()
  • 添加下列语句到 stdafx.h 文件:
#include "BCGCB.h"
  • 添加 CBCGWorkspace-派生到你的应用程序类:
class CMyApp : public CWinApp,
                         public CBCGWorkspace
  • 首先,你必须定义在注册表中存放你自定义数据的位置和你 需要什么样的自定义(鼠标、键盘、上下文菜单),为了做这些工作,在CMyApp::InitInstance 中设置注册表入口并初始化自定义管理器:
SetRegistryBase (_T("Settings"));

// 初始化自定义管理器:
InitMouseManager();
InitContextMenuManager();
InitKeyboardManager();
  • 如果你已经决定使用鼠标或上下文菜单的自定义功能,你必 须在鼠标自定义管理器中附加一个视图,或初始化上下文菜单。重载CBCGWorkspace::PreLoadState 行为:
class CMyApp ....
{
...
virtual void PreLoadState();
...
};

void CMyApp::PreLoadState()
{
    // 把鼠 标事件连接到特定 的视图 :
     GetMouseManager()->AddView (iIdTestView, _T("Test view"), IDR_VIEW);

    // 初始化上下文菜单:
     GetContextMenuManager()->AddMenu (_T("Test menu"), idMenu); 
}
  • 同时在 mainfrm.h 和 mainfrm.cpp 文件中 把 CMDIFrameWnd 变成 CBCGMDIFrameWnd ,(在 SDI 应用程序的情况下, 把 CFrameWnd 变成 CBCGFrameWnd)
  • 把 CMDIChildWnd 变成  CBCGMDIChildWnd
  • 把 CToolbar 变成 CBCGToolBar 并且添加一个内嵌菜单栏对象到你的 CMainFrame 类中:
CBCGMenuBar     m_wndMenuBar;    // 新的菜单栏
CBCGToolBar       m_wndToolBar;      // 应用程序工具栏
  • 在 CMainFrame::OnCreate() 行为中添加如下的行,以便使能菜单栏功能:
// 创建菜单栏(替换标准菜单):
if (!m_wndMenuBar.Create (this))
{
       TRACE0("Failed to create menubar\n");
       return -1;      //创建失败
}

m_wndMenuBar.SetBarStyle (m_wndMenuBar.GetBarStyle() |
                                           CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

  • 为了使能菜单栏停靠,你应当添加如下代码:
m_wndMenuBar.EnableDocking (CBRS_ALIGN_ANY);
DockControlBar (&m_wndMenuBar);

重要之处: 你可以在应用程序中使用任何数目的CBCGToolBar 工具栏。所有的工具栏图像将被合并到一个位图文件中。无论如何,仅仅有一个CBCGMenuBar 对象被使用。

为了使能 工具栏/菜单 的自定义,请作出如下改变:

  • 添加 工具栏/菜单 自定义命令(比如,View | Customize...
  • 实现 OnViewCustomize 行为。代码看起来如下:
void CMainFrame::OnViewCustomize() 
{
// 创建一个自定义工具栏对话框:
CBCGToolbarCustomize* pDlgCust = new CBCGToolbarCustomize (this, 
TRUE /* Automatic menus scaning */);

// 添加预定义工具栏:
pDlgCust->AddToolBar ("Main", IDR_MAINFRAME);
....

// 添加用户自定义命令:
pDlgCust->AddButton ("User", CBCGToolbarButton (ID_USER_TOOL1, 1, "User Tool 1", TRUE));
pDlgCust->AddButton ("User", CBCGToolbarButton (ID_USER_TOOL2, 2, "User Tool 2", TRUE));
pDlgCust->AddButton ("User", CBCGToolbarButton (ID_USER_TOOL3, 3, "User Tool 3", TRUE));
....

pDlgCust->SetUserCategory ("User");

// 使能用户自定义工具栏的 Create/Delete :
pDlgCust->EnableUserDefinedToolbars ();

pDlgCust->Create ();
}

为了使能 Microsoft?Office 2000 菜单:

  • 定义你自己的基本命令集合(通常在CMainFrame::OnCreate()中):
CList<UINT, UINT> lstBasicCoomads;

lstBasicCoomads.AddTail (ID_FILE_NEW);
lstBasicCoomads.AddTail (ID_FILE_OPEN);
lstBasicCoomads.AddTail (ID_FILE_SAVE);

......
lstBasicCoomads.AddTail (ID_APP_ABOUT);

CBCGToolBar::SetBasicCommands (lstBasicCoomads);

  • 这些命令将显示在下拉菜单中:

为了使能菜单阴影:

CBCGMenuBar::EnableMenuShadows (BOOL bEnable = TRUE)

注意 如果你查看的内容可能动态改变就不要在弹出式菜单中使用菜单 阴影(比如,视图显示动画、HTML页)在这种情况下,菜单阴影 会记忆以前的视图图像。

为了在运行时改变菜单字体:

CBCGMenuBar::SetMenuFont (LPLOGFONT lpLogFont, BOOL bHorz = TRUE);

为了使能“页面”(自定义)按钮,只需要调用:

m_wndToolBar.EnableCustomizeButton (TRUE, id_of_customize_command,
_T("Customize..."));

为了使能图像覆盖下的文字:

m_wndToolBar.EnableTextLabels (BOOL bEnable = TRUE);

为了使能用户自定义工具:

  • 添加一个新的菜单条目:ID_TOOLS_ENTRY。该条目将 自动被实际存在的工具列表取代。
  • 添加如下的条目到 STRING 资源:
    1. ID_TOOL1     "Activates user-defined tool\nUser Tool"
    2. ID_TOOL2     "Activates user-defined tool\nUser Tool"
      ....
    3. ID_TOOLx     "Activates user-defined tool\nUser Tool"
  • 在应用程序的InitInstance() 中调用:
    EnableUserTools (ID_TOOLS_ENTRY, ID_TOOL1,     ID_TOOLx);
  • 一个 "Tools" 新页面将加入到自定义对话框中

为了使能动态可裁剪菜单:

  • 在 STRING 资源表中保留部分条目。这些标识符将被当作控制栏标识符使用。
    1. ID_TEAR_OFF1     "<dummy>"
    2. ID_TEAR_OFF2     "<dummy>"
    3. .......
    4. ID_TEAR_OFFx     "<dummy>"
  • 对于每一个可裁剪弹出式菜单,把 "Break" 属性改位 "Bar" (MF_MENUBARBREAK)
  • 在应用程序的 InitInstance() 中调用:
    EnableTearOffMenus (_T("RegBase", ID_TEAR_OFF1, ID_TEAR_OFFx);

为了使能静态可裁剪菜单

  • 在 STRING 资源表中保留一个条目。这个标识符将区别于动态 可裁剪 标识符(如上所述)。

    ID_TEAR_OFF_BAR     "<dummy>"
  • 在主框架的 OnShowPopupMenu,为特定的菜单按钮使能可裁剪:
    pMenuButton->SetTearOff (D_TEAR_OFF_BAR);

 

BCGControlBar9.0的注册密码:6CA746D4-8A7B-4373-B550-18F56C26D785

转载于:https://www.cnblogs.com/vipwtl/p/6146359.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四则运算2开发简介

四则运算2在四则运算1的基础之上&#xff0c;又添加了新的功能&#xff0c;但是我觉得四则运算2的难度比四则运算1增大了很多&#xff0c;我在编程的过程中&#xff0c;遇到的最大难度就是不知该如何更好的融合各个功能之间的关系。 写到现在&#xff0c;四则运算2主要实现了以…

ABB机器人的 备份与恢复

保存内容 备份功能可保存上下文中的所有系统参数、系统模块和程序模块。 备份内容 数据保存于用户指定的目录中。 默认路径可加以设置。 目录分为四个子目录&#xff1a;Backinfo、Home、Rapid 和 Syspar。 System.xml 也保存于包含用户设置的 ../backup &#xff08;根…

flask项目开发中,遇到http 413错误

在flask项目中&#xff0c;上传文件时后台报http 413 Request Entity Too Large 请求体太大错误&#xff01; 解决的2种方法&#xff1a; 1.在flask配置中设置 MAX_CONTENT_LENGTH的值; 如设置为20M ( MAX_CONTENT_LENGTH20*1024*1024) 这时小于20M的文件都可以上传 相关连接&…

【机器视觉】——畸变与矫正

目录 一、什么是畸变?畸变的原因是什么? 1、径向畸变(桶形畸变和枕形畸变)

ApplicationContextAware 接口

一、这个接口有什么用&#xff1f; 当一个类实现了这个接口&#xff08;ApplicationContextAware&#xff09;之后&#xff0c;这个类就可以方便获得ApplicationContext中的所有bean。换句话说&#xff0c;就是这个类可以直接获取spring配置文件中&#xff0c;所有有引用到的be…

Java之泛型练习

package cn.itcast.generics;import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet;/** 方法一&#xff1a;实现Comparable接口*/ //class Person implements Comparable<Person> {//实现Comparable接口&#xff0c;使得集合元素具备可比较…

ABB 配置文件

配置文件 配置文件是列出系统参数值的文本文件。 注意&#xff1a; 如果该参数指定默认值&#xff0c;那么就不会被列在 配置文件。 控制器中有六个配置区域&#xff0c;配置文件保存为后缀 .CFG文件。 配置文件默认保存在系统文件夹SYSPAR&#xff0c;例如.. \ MySystem\ …

巨杉db

巨杉数据库 and mongo db ,分布式数据库&#xff0c; 转载于:https://www.cnblogs.com/feiyun8616/p/8178116.html

【深度学习】——物体检测细节处理(NMS、样本不均衡、遮挡物体)

目录 一、候选框大量重叠问题 1、NMS核心思想 2、 步骤&#xff1a; 3、缺陷 4、改进 1&#xff09;soft NMS——衰减的方式来减小预测框的分类得分 2&#xff09;softer nms——增加了位置置信度 二、样本不平衡问题 1、不平滑的来源&#xff08;3方面&#xff09; 1&a…

忙着,快乐着

无比充实的周末&#xff0c;好久没有这样忙过了&#xff0c;周六早上七点多起床去上考研课&#xff0c;上了整整一天&#xff0c;晚上回到寝室用吃饭的时间让自己放松一下&#xff0c;看了一会儿综艺节目&#xff0c;吃晚饭就开始写这次的代码&#xff0c;写累了就去洗洗睡了&a…

ABB Fronius TPS 4000/5000 IRC5 接口

在RobotStudio生成机器人系统时&#xff0c;选择&#xff1a; Power Source option 650-9 Fronius TPS 4000/5000。Fronius的设备类别和设置被激活。此选项支持福尼斯TPS 4000/5000弧焊电机&#xff0c;包括支持三种焊接模式&#xff1a; 1 Job模式 2 修正的Job模式 …

ASP.NET 实现Base64文件流下载PDF

因为业务需要调用接口获取的是 Base64文件流 需要提供给客户下载PDF文档 源码部分借鉴网上&#xff0c;具体地址忘记了。 //Base64文件流 byte[] buffer Convert.FromBase64String(decodedString); System.IO.Stream iStream new System.IO.MemoryStream(buffer);try{int len…

Viewpager无限循环(首页与尾页平滑过渡)

#Viewpager无限循环(首页与尾页平滑过渡) ##double kill 在网上找了不少的viewpager无限轮播的例子&#xff0c;大部分都是Interger.MAX_VALUES。 滑到最后一页的时候setCurrentItem(0),这样虽然实现了无限轮播&#xff0c;但是当从最后一页跳转到第一页的时候不够优雅。。通过…

【深度学习】——物体检测的难点

目录 一、小物体检测 1、降采样率减小 空洞卷积 2、anchor设计 1&#xff09;统计方法 2&#xff09;anchor边框聚类 3、多尺度训练&#xff08;multi scale training——MST&#xff09; 4、 特征融合 一、小物体检测 在分类任务中&#xff0c;一般物体的大小都差不多&a…

ABB 机器人 通信指令(人机对话):

&#xff08;1&#xff09;清屏指令&#xff1a;TPErase &#xff08;2&#xff09;写屏指令&#xff1a;PWrite String   tring&#xff1a;显示的字符串。(string)在示教器显示屏上显示字符串数据&#xff0c;也可以用“……”形式直接定义字符串&#xff0c;每一个写屏…

hadoop streaming编程小demo(python版)

大数据团队搞数据质量评测。自动化质检和监控平台是用django&#xff0c;MR也是通过python实现的。(后来发现有orc压缩问题&#xff0c;python不知道怎么解决&#xff0c;正在改成java版本) 这里展示一个python编写MR的例子吧。 抄一句话&#xff1a;Hadoop Streaming是Hadoop提…

Asp.net在IE10、IE11下事件丢失经验总结

asp.net4.0出生得比IE10早&#xff0c;所以asp.net4.0以前版本不认识IE10 的 User-Agent 标头&#xff0c;导致的后果就是ASP.NET 特定功能失效&#xff0c;例如&#xff1a;页面报错__doPostBack找不到&#xff0c;不支援 Cookies 功能等等。这属于.net的Bug&#xff0c;微软也…

第6章 循环结构

循环语句: 可以让一部分代码,反复执行 1.1 循环语句while while循环: 编写格式:while(条件){ 循环体 } 条件: 当条件是true,就执行循环体,执行完循环体后 程序再次执行while中的条件,如果条件还是true,继续执行循环体 直到条件是false的时候,循环就结束 public class WhileDem…

【深度学习】——pytorch搭建模型及相关模型

目录 1、搭建模型的流程 1&#xff09;步骤 2&#xff09;完整代码——手写minist数据集为例&#xff08;这里使用的数据集是自带的&#xff09; 2、搭建模型的四种方法 1&#xff09;方法一——利用nn.Sequential&#xff08;&#xff09; 2&#xff09;方法二——利用co…