MFC窗体调整,控件位置相对固定
#pragma once
class CMFCDlg : public CDialogEx
{
public:
CRect m_rtDlg,m_rtBtn;
CMFCDlg(CWnd* pParent = nullptr);
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MFC_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
HICON m_hIcon;
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP();
public:
afx_msg void OnSize(UINT nType, int cx, int cy);
};
#include "pch.h"
#include "framework.h"
#include "MFC.h"
#include "MFCDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CMFCDlg::CMFCDlg(CWnd* pParent )
: CDialogEx(IDD_MFC_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMFCDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CMFCDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_SIZE()
END_MESSAGE_MAP()
BOOL CMFCDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
GetClientRect(m_rtDlg);
GetDlgItem(IDC_BTN_BACK)->GetWindowRect(m_rtBtn);
ScreenToClient(m_rtBtn);
return TRUE;
}
void CMFCDlg::OnPaint()
{
CPaintDC dc(this);
CDialogEx::OnPaint();
}
HCURSOR CMFCDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CMFCDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
CRect rtDlg,rtBtn;
GetClientRect(rtDlg);
CWnd* pWnd = this->GetDlgItem(IDC_BTN_BACK);
if (!pWnd)
return;
pWnd->GetWindowRect(rtBtn);
ScreenToClient(rtBtn);
rtBtn.OffsetRect(cx - rtBtn.right - (m_rtDlg.right - m_rtBtn.right),cy - rtBtn.bottom - (m_rtDlg.bottom - m_rtBtn.bottom));
pWnd->MoveWindow(rtBtn);
Invalidate(TRUE);
}
![效果如图所示](https://i-blog.csdnimg.cn/blog_migrate/e88474806e00bdcf133c2e7819a90be6.png)