1、利用BCG向导建立一个单文档程序The_BCG_Form,去掉不必要的功能。
新建项目时不创建解决方案的目录,否则会多出一个目录和*.sln、*.suo、*.ncb三个文件并列。应用程序类型:单文档、文档/视图结构支持、中文(中国)、使用Unicode库、MFC标准、在静态库中使用MFC。
复合文档支持:无。
文档模板字符串:默认。
数据库支持:无。
用户界面功能:粗框架、最小化框、最大化框、系统菜单、初始状态栏、标准停靠。
BCPControlBar常规设定:只选中“工具栏/菜单栏样式的界面”,其它全空。
BCPControlBar高级设定:只选中“标准拖放”,其它全空。
在最后一步,选择View的基类为CFormView,完成建立。
注意:创建时要选择“文档/视图结构支持”,否则无法修改基类。如果选择了添加外观或某些工具栏菜单,可能会出现m_wndToolBar未声明的错误。在MainFrm.h中添加CBCGPToolBar m_wndToolBar;但没有解决。出现错误IDP_OLE_INIT_FAILED未声明的标识符,可在Resource.h中添加#define IDP_OLE_INIT_FAILED 100解决。
2、添加Office2007蓝色界面资源:
在解决方案资源管理器的资源文件上按右键,添加现有项。C:\Program Files\BCGSoft\BCGControlBarPro\BCGCBPro\Styles\BCGPStyle2007Luna.rc
其他界面再对应加入即可。嫌麻烦可以把styles目录单独弄出来到好找的地方。
// enable Office 2007 look:
CBCGPVisualManager:: SetDefaultManager ( RUNTIME_CLASS ( CBCGPVisualManager2007));
// enable Office 2010 look:
//CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager2010));
// enable Windows 2007 look:
//CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManagerScenic));
//CBCGPDockManager::SetDockMode (BCGP_DT_STANDARD);
// VISUAL_MANAGER
在The_BCG_FormView.h中修改CFormView为CBCGPFormView即是修改基类。
在The_BCG_FormView.cpp中的其他CFormView也改为CBCGPFormView。
在The_BCG_FormView.cpp的构造函数里面,添加启动界面效果代码。
CThe_BCG_FormView:: CThe_BCG_FormView()
: CBCGPFormView( CThe_BCG_FormView:: IDD)
{
// TODO: add construction code here
EnableVisualManagerStyle();
}
这样我们就完成了初步单文档里面的Form体界面效果了,窗体的对话框已经变蓝。
在The_BCG_FormView.cpp中的初始化函数OnInitialUpdate 里面添加两行代码,注意添加的位置:
void CThe_BCG_FormView:: OnInitialUpdate()
{
ModifyStyleEx( WS_EX_CLIENTEDGE, WS_EX_STATICEDGE); //去掉Form体凹陷,这句不能放在OnCreate中,否则会错位。
ModifyStyle(- 1 ,WS_CHILD| WS_VISIBLE); //做为子窗体,可见
CBCGPFormView:: OnInitialUpdate();
GetParentFrame()-> RecalcLayout();
ResizeParentToFit();
}
这段没弄清楚咋回事。
在MainFrm.h文件中,注释下以下代码。
protected : // control bar embedded members
//CBCGPStatusBar m_wndStatusBar;
//CBCGPMenuBar m_wndMenuBar;
//CBCGPToolBar m_wndToolBar;
在MainFrm .cpp中,修改OnCreate ()函数中改为下面代码。
int CMainFrame:: OnCreate( LPCREATESTRUCT lpCreateStruct)
{
if ( CBCGPFrameWnd:: OnCreate( lpCreateStruct) == - 1 )
return - 1 ;
//-------修改系统菜单,模拟对话框菜单-------
CMenu * pSystemMenu= GetSystemMenu( FALSE );
pSystemMenu-> DeleteMenu( 0 ,MF_BYPOSITION); //去掉分割线和最大化、最小化之类的菜单项
pSystemMenu-> DeleteMenu( 1 ,MF_BYPOSITION);
pSystemMenu-> DeleteMenu( 1 ,MF_BYPOSITION);
pSystemMenu-> DeleteMenu( 1 ,MF_BYPOSITION);
pSystemMenu-> DeleteMenu( 1 ,MF_BYPOSITION);
pSystemMenu-> AppendMenu( MF_SEPARATOR); //添加分割线
pSystemMenu-> AppendMenu( MF_STRING, ID_APP_ABOUT, _T("关于 CThe_BCG_Form (&A)..." ) ); //ID_APP_ABOUT就是单文档里面的ID号
// enable Office 2007 look:
CBCGPVisualManager:: SetDefaultManager ( RUNTIME_CLASS ( CBCGPVisualManager2007));
return 0 ;
}
BOOL CMainFrame:: PreCreateWindow( CREATESTRUCT& cs)
{
if ( ! CBCGPFrameWnd:: PreCreateWindow( cs) )
return FALSE ;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
m_strTitle= "这是用单文档做出来的对话框" ;
cs.style &= ~FWS_ADDTOTITLE; //去掉单文档的“无标题”
cs.style &= ~WS_THICKFRAME; //去掉可调大小
cs.style &= ~WS_MAXIMIZEBOX; //去掉最大化按钮
cs.style &= ~WS_MINIMIZEBOX; //去掉最小化按钮
cs.hMenu= NULL ; //去掉菜单栏
return TRUE ;
}
这段也没弄清楚。
在MainFrm.h中加入afx_msg void OnSysCommand(UINT nID, LPARAM lParam);这句话。
在MainFrm.cpp中重载WM_SYSCOMMAND消息,加入以下代码。
void CMainFrame:: OnSysCommand( UINT nID, LPARAM lParam)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if ( nID== ID_APP_ABOUT)
{
theApp.OnAppAbout();
}
CBCGPFrameWnd:: OnSysCommand( nID, lParam);
}