///
//Author: aaashun
//Date: 23/2/2009
//Email: aaashun@gmail.com
///
大多数情况下MFC的MDI模板为开发多窗口或多文档应用程序提供了很大的方便,但有时MFC向导生成的框架并非是我们需要的,怎么办?对MFC生成的框架动手术吧。本文以多视(无文档)为例说明手术的关键部分,讲的有点乱,如果需要源码请来邮件索要。
最终效果图:
1.选择MDI类型,去掉文档视图关联支持
2.一路next,子窗口类型样式选择最大化
3.去掉CChildView类
删除ChildView.h和ChildView.cpp两个文件,去掉CChildFrame里的几个重写(Dump等)、几个消息响应(WM_CREATE等)和一个事件响应(IDC_FILE_CLOSE等)。
4.去掉IDC_FILE_NEW在App类中响应
5.增加ShunStdAfx.h头文件并在stdafx.h里 include一下,我会把自定义的一些东西放在这个文件里。
至此已经把VC生成的框架程序删减的差不多了,保证编译通过再进行下边的工作--开始添加。
二、接下来开始做左边的管理工具栏窗口。
1.增加DialogBar类型对话框,并为之增加类CManageBar,从CDialog派生(因为找不到CDialogBar)
2.替换ManageBar.h和ManageBar.cpp文件里的CDialog为CDialogBar
修改构造函数如下:
CManageBar::CManageBar(CWnd* pParent /*=NULL*/)
: CDialogBar()
3.为CMainFrame添加成员CManageBar m_wndManageBar,并在OnCreate中添加相应代码创建并把它show出来:
if (!m_wndManageBar.Create(this, IDD_DIALOGBAR,
CBRS_LEFT | CBRS_SIZE_DYNAMIC, AFX_IDW_DIALOGBAR))
{
TRACE0("Failed to create dialogbar/n");
return -1;
}
m_wndManageBar.EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndManageBar);
编译运行 报错 winfrm2.cpp 92 行,看提示
// assert fails when initial CBRS_ of bar does not
// match available docking sites, as set by EnableDocking()
原来是窗口不允许停靠,这样在停靠ManageBar的代码前面得加一句让窗口允许停靠。
EnableDocking(CBRS_ALIGN_LEFT);
三、添加三个FormView资源
1.添加三个FormView资源并添加相应类分别为:
IDD_FORMVIEW_ADMIN, CAdminView
IDD_FORMVIEW_CONSUMER, CConsumerView
IDD_FORMVIEW_GROUP, CGroupView
注意这三个类都是从CFormView类里派生出来
四、在ManageBar上添加树形控件
1.添加树形控件ID为IDC_TREE_MANAGEBAR,关联一个成员变量m_tree
2.为CManageBar添加成员函数InitTreeCtrl,完成控件的初始化工作
HRESULT CManageBar::InitTreeCtrl(