MFC创建一个CDialogEx的基类

有了自动布局缩放的方法,那就创建一个基类,所有窗口类都继承此类

添加MFC类

名称自定义  CbaseDlg

CbaseDlg.h

#pragma once
#include "afxcontrolbarutil.h"
#include "afxdialogimpl.h"
#include "./layout/ControlAutoLayout.h"


// CbaseDlg 对话框  基类 自动布局缩放,其他窗口继承此类

class CbaseDlg : public CDialogEx
{
	DECLARE_DYNAMIC(CbaseDlg)

public:
	//CbaseDlg(CWnd* pParent = nullptr);   // 标准构造函数
	CbaseDlg(UINT nIDD, CWnd* pParent = NULL);


	virtual ~CbaseDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_CbaseDlg };
#endif

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

	afx_msg void OnSize(UINT nType, int cx, int cy);  // cx 窗体宽度,cy窗体高度
	DECLARE_MESSAGE_MAP()
private:
	ControlAutoLayout control_auto_layout_;
};

CbaseDlg.cpp

// CbaseDlg.cpp: 实现文件
//

#include "stdafx.h"
#include "ServerManager.h"
#include "CbaseDlg.h"
#include "afxdialogex.h"


// CbaseDlg 对话框

IMPLEMENT_DYNAMIC(CbaseDlg, CDialogEx)


CbaseDlg::CbaseDlg(UINT nIDD, CWnd* pParent /*=NULL*/)
	: CDialogEx(nIDD, pParent)
{
}

CbaseDlg::~CbaseDlg()
{
}

void CbaseDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BOOL CbaseDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	control_auto_layout_.SetDialogHandle(this);
	return 0;
}

void CbaseDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);
	//同步控件大小
	CRect rectDlg;
	GetClientRect(rectDlg);//获得窗体的大小
	control_auto_layout_.InitLayout(rectDlg.Width(), rectDlg.Height());
	//遍历控件
	HWND  hwndChild = ::GetWindow(m_hWnd, GW_CHILD);  //列出所有控件   
	int c_id;
	while (hwndChild)
	{
		c_id = ::GetDlgCtrlID(hwndChild);//取得ID  
		control_auto_layout_.SetControlAutoChangeMode(c_id, 1, 1, 1, 1);
		hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
	}
}


BEGIN_MESSAGE_MAP(CbaseDlg, CDialogEx)
	ON_WM_SIZE()
END_MESSAGE_MAP()


// CbaseDlg 消息处理程序

主要是  有两个函数  

BOOL CbaseDlg::OnInitDialog()//初始化的函数

void CbaseDlg::OnSize(UINT nType, int cx, int cy)//窗口变化的函数

其他窗口类继承 CbaseDlg

用户设置类

UserSetDlg.h

#pragma once
#include"CbaseDlg.h"

// UserSetDlg 对话框

class UserSetDlg : public  CbaseDlg
{
	DECLARE_DYNAMIC(UserSetDlg)

public:
	UserSetDlg(CWnd* pParent = nullptr);   // 标准构造函数
	virtual ~UserSetDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_DEPT_DLG };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
	afx_msg void OnSize(UINT nType, int cx, int cy);  // cx 窗体宽度,cy窗体高度
    
    BOOL UserSetDlg::OnInitDialog();
  
	DECLARE_MESSAGE_MAP()
};

UserSetDlg.cpp

// UserSetDlg.cpp: 实现文件
//

#include "stdafx.h"
#include "ServerManager.h"
#include "UserSetDlg.h"
#include "afxdialogex.h"


// UserSetDlg 对话框

IMPLEMENT_DYNAMIC(UserSetDlg, CbaseDlg)

UserSetDlg::UserSetDlg(CWnd* pParent /*=nullptr*/)
	: CbaseDlg(IDD_USER_DLG, pParent)
{

}

UserSetDlg::~UserSetDlg()
{
}

void UserSetDlg::DoDataExchange(CDataExchange* pDX)
{
	CbaseDlg::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(UserSetDlg, CbaseDlg)
	ON_WM_SIZE()
END_MESSAGE_MAP()

void UserSetDlg::OnSize(UINT nType, int cx, int cy)
{
	CbaseDlg::OnSize(nType, cx, cy);
	
}

BOOL UserSetDlg::OnInitDialog()
{
	CbaseDlg::OnInitDialog();
	
	return TRUE;
}


// UserSetDlg 消息处理程序

这样  用户设置窗口  就 自动 继承了  自动布局的方法

如图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑贝是条狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值