MFC之窗口切分

MFC之窗口切分

一、准备工作(这里主要是新增一个dialog,两个类)

  • 新建一个dialog(如下):
  • 单击新建号的dialog进入,然后右击选择添加类选项,分别建立两个类FormViewOne和FormViewTwo,选择基类的时候一定要选择CFormView(这个只在2017之前的VS版本里有),VS2017如果要用的话,我目前只能说仿照着模板写,下面是模板,改一下类的名字就好。
class FormViewOne : public CFormView
{
	DECLARE_DYNCREATE(FormViewOne)

protected:
	FormViewOne();           // 动态创建所使用的受保护的构造函数
	virtual ~FormViewOne();

public:
	enum { IDD = IDD_FORMVIEW };

	virtual void OnFinalRelease();
#ifdef _DEBUG
	virtual void AssertValid() const;
#ifndef _WIN32_WCE
	virtual void Dump(CDumpContext& dc) const;
#endif
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
	DECLARE_DISPATCH_MAP()
	DECLARE_INTERFACE_MAP()
};
  • 当然呢,第二个类就不用贴上来了,因为与上面相比就只有类名字不同而已

二、调用

  • 新建的dialog必然是为了其他界面调用的,那这里我们就要找到调用的界面,然后在相应的类中实现相关的函数,我这里是在另外一个dialog中调用,所以就在该dialog添加的类中进行操作。
  1. 首先在调用的dialog添加的类的.h文件的类中进行如下操作:
public:
		afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	    CFrameWnd*      m_pMyFrame;    // 分隔窗口  
	    CSplitterWnd    m_cSplitter;     // 左右分隔  
  1. 在调用的dialog添加的类的.cpp文件中实现相关接口,主要接口就一个OnCreate()
int CXlCANcontrolDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	//需要注册窗口类
	CString strMyClass = AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW,
		::LoadCursor(NULL, IDC_ARROW), (HBRUSH) ::GetStockObject(WHITE_BRUSH),
		::LoadIcon(NULL, IDI_APPLICATION));

	m_pMyFrame = new CFrameWnd;
	m_pMyFrame->Create(strMyClass, _T(""), WS_CHILD, CRect(0, 0, 300, 300), this);
	m_pMyFrame->ShowWindow(SW_SHOW);

	m_cSplitter.CreateStatic(m_pMyFrame, 1, 2); //在Frame里切分视图窗口为1×2,就是一行两列
	m_cSplitter.CreateView(0, 0, RUNTIME_CLASS(FormViewOne), CSize(100, 100), NULL);//第一行一列
	m_cSplitter.CreateView(0, 1, RUNTIME_CLASS(FormViewTwo), CSize(100, 100), NULL);//第一行二列

	return 0;
}
  1. 在调用的dialog添加的类的.cpp文件中初始化函数OnInitDialog()中获取窗口大小
	GetWindowRect(&rect);
	ScreenToClient(&rect);
	//这里是因为我的主界面有工具栏,计算窗口=高度底部-顶部,所以顶部加上一定高度,就能多减去这个高度,防止挡住我的工具栏
	rect.top += 90;
	
	m_pMyFrame->MoveWindow(&rect);
	m_pMyFrame->ShowWindow(SW_SHOW);
  1. 在调用的dialog添加的类的.cpp文件中添加映射消息
	ON_WM_CREATE()
  1. 当然最后一步,不要忘记在调用的dialog添加的类的.cpp文件中添加头文件
#include "FormViewOne.h"
#include "FormViewTwo.h"

三、我的运行界面

发布了84 篇原创文章 · 获赞 63 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/wsq119/article/details/103110038
今日推荐