MFC—基于单文档视图窗口分割,一个为view窗口,一个为新添加的Dialog窗口(超级详细)
我用的是VS2019版,前提是VS中已经安装了MFC。我们这次同时实现一个小功能,在左侧新建窗口添加一个Slider控件,在右侧view显示滑块值(显示采用双缓存)内容有点长,请耐心看完
一、首先创建一个单文档视图
1、点击创建

2、点击MFC应用

3、输入项目名称和选择工程目录

3、选择单文档

最后点击完成
二、创建需要添加的新窗口
1、打开资源视图,选中Dialog文件右击点击插入Dialog

2、根据需要选择控件、我们这里是添加一个滑块控件(在最左边菜单栏有工具箱,里面选择Slider),将原有控件删除

2、给新的Dialog添加类在Dialog窗口内右击选择添加类,基类选择CFormView,类名可以自己定义但是第一个字符应给为大写C

三、进行窗口分割
1、对新建Dialog窗口属性进行设置,将Border 设置为None,将Style设置为 Child。


2、进行窗口分割,这里我们要知道,CMainFrame是住窗口类,窗口分割是这个类的一个虚函数OnCreateClient,添加虚函数之前我们要将两个窗口的类声明(.h)文件添加到CMainFrame类中,我是在CMainFrame类的定义中声明(.cpp)文件中声明

3、添加虚函数OnCreateClient,选中CMainFrame右击选择类向导,在类向导中有一个虚函数选项,点解添加OnCreateClient虚函数


4、确定后会显示所添加的函数

5、在类定义中添加一个分离器对象CSplitterWnd m_wndSplitter;

6、在刚刚添加的代码中注释掉原先的返回值然后添加下述代码
// TODO: 在此添加专用代码和/或调用基类
CRect rc;
GetClientRect(&rc);
try {
m_wndSplitter.CreateStatic(this, 1, 2); //create static splite windows
m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(rc.Width() / 7, rc.Height()), pContext);
m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMFCApplication4View), CSize(rc.Height() * 6 / 7, rc.Height()), pContext);
}
catch (...) {
AfxMessageBox(_T("静态分割窗口出现错误!程序退出..."), MB_OK | MB_ICONSTOP);
return FALSE;
}
//return CFrameWndEx::OnCreateClient(lpcs, pContext);
return TRUE;
这里特别注意

这两个是所要显示的窗口,后面是窗口尺寸
7、然后点击运行,会发现抱错原因是因为两个窗口之间的数据交流是通过Doc类实现的,我们需要在原先的view串口中添加Doc类的类定义



8、然后再次运行,结果就出来了

尺寸划分有些不匀,修改一下,然后将其他窗口关掉,最终结果为

具体功能实现我会在下一次实现
更多推荐


所有评论(0)