MFC中将客户区划分子窗口
一、准备工具
- VC6.0(VS做MFC老坑了)
二、手把手教学
1.预期目标
将客户区分为左右两个子窗口,左部占整个窗口的1/4,右部占3/4
- 第一步:建立MFC工程(单文档)
- 第二步:资源视图(resourceView)->对话框(Dialog)->插入Dialog
- 第三步 修改对话框属性,将 样式(style) 改为 child(下层),将 边框(border) 改为 none
- 第四步 为新建立的对话框添加一个类,基于CFormView,命名为CLeftView
- 第五步 向CMainFrame中添加成员变量和函数
新增成员变量
CSplitterWnd m_wndSplitter;
重载CFormView的虚函数 OnCreateClient,并向其中添加以下代码
CRect rect;
GetClientRect(&rect);//获取客户区矩形
//拆分窗口
if(!m_wndSplitter.CreateStatic(this,1,2))//将窗口在分为1*2个,竖直方向一个,水平方向两个(根据自己需要改参数)
{
MessageBox("Faild 1");
return false;
}
if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLeftForm),CSize(rect.Width()/4,
rect.Height()),pContext))//水平方向第一个窗口
{
MessageBox("Faild 2");
return false;
}
if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTest20181103View),CSize(3*rect.Width()/4,
rect.Height()),pContext))//水平方向第二个窗口
{
MessageBox("Faild 3");
return false;
}
return true;
注:此时编译程序会提示有错误
需要向CMainFrame的.CPP文件中加入相应的头文件"XXXView.h"(即MFC生成的View类)和我们刚刚为对话框添加的类“LeftView.h”
别着急,还没结束,现在编译,还是提示有错误,而且这个错误很奇葩,你先编译试试~~
这是MFC的一个经典错误
error C2143: syntax error : missing ';' before '*'
error C2501: 'CTest2018110401Doc' : missing storage-class or type specifiers
error C2501: 'GetDocument' : missing storage-class or type specifiers
执行 cl.exe 时出错.
在CXXXView的.h文件中包含头文件“XXXDoc.h”,就OK了
运行下瞅瞅吧