BCG使用

照着库提供的例子,把程序框架换的支持了BCG,大体的代码替换步骤如下:

1.stdafx.h中加包含语句#include <BCGCBProInc.h>

 

2.CXXXApp多继承一个CBCGPWorkspace,形如:

class CXXXApp : public CWinApp, public CBCGPWorkspace

{...};

然后在其实现中,构造时调用这个CBCGPWorkspace的构造函数,形如:

CXXXApp::CXXXApp():CBCGPWorkspace (TRUE)

{...}

 

在InitInstance()成员函数中,加入如下代码:

BOOL CXXXApp::InitInstance()

{

...

SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

LoadStdProfileSettings();

SetRegistryBase (_T("Settings1"));

InitContextMenuManager();

InitKeyboardManager();

...

}

 

还要重写ExitInstance()成员函数,这一点居然BCG的官网文章"GettingStart"没有提到,而其提供的例子程序却都有

int CXXXApp::ExitInstance()

{

BCGCBProCleanUp();

return CWinApp::ExitInstance();

}

 

3.替换CMainFrame基类为CBCGPMDIFrameWnd,替换CChildFrm基类为CBCGPMDIChildWnd,当然实现中的相关基类调用也要替换。

 

4.MainFrame中定义菜单条CBCGPMenuBar m_wndMenuBar;,把默认工具条和状态条的类类型分别替换成CBCGPToolBar和


CBCGPStatusBar,然后在OnCreate中创建菜单条,如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

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);

...}

至此就完成了原有程序支持BCG了。

 

事实上,我程序的工具条不只一个,并且其他的工具条的创建代码是直接COPY的MFC向导生成的那个,这导致我替换BCG库的工具条后,老是出现工具条的布局错乱,每次打开程序,工

具条都会多出一个空白,就这样一个问题,让我浪费了三个晚上试了各种办法,最后是查出是非常弱智的原因。原来又是COPY代码带来的问题,m_wndToolBar.CreateEx(...)参数的最

后一个是指定工具条的窗口ID,MFC框架生成的默认工具条的创建代码中此参数使用的默认参数,一般此参数确实可以缺省,但BCG库会在注册表中记录工具条的位置等信息,BCG是以ID

在注册表中对工具进行标识的,因此多个相同ID的工具条,在程序再次启动时BCG自动读注册信息,并设置工具条位置时候就会出现错乱。因此,在资源ID定义中为此工具栏定义一个窗口

ID并在创建工具条时指定。

 

转载自:http://wenna0532.blog.163.com/blog/static/1202292982009112112616164/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值