写的封装类方法,实用便捷。
#pragma once
#ifndef ITEMRESIZE_H
#define ITEMRESIZE_H
#include<stdio.h>
#include<vector>
using namespace std;
typedef struct _RESIZEINFO
{
UINT nID;
CWnd* pParent;
float fLeft;
float fRight;
float fTop;
float fBottom;
}RESIZEINFO;
class CItemResize
{
CRect m_rectDlg;
vector<RESIZEINFO> m_vResizeID;
public:
CItemResize();
~CItemResize();
void AddItemRect(UINT nID, CWnd* pParent);
void ResizeItem();
};
#endif
#include "stdafx.h"
#include "ItemResize.h"
CItemResize::CItemResize()
{
}
CItemResize::~CItemResize()
{
}
void CItemResize::AddItemRect(UINT nID, CWnd* pParent)
{
RESIZEINFO rf = { 0 };
rf.nID = nID;
rf.pParent = pParent;
CRect rect;
pParent->GetClientRect(&m_rectDlg);
CWnd *pItem = pParent->GetDlgItem(nID);
ASSERT(pItem);
pItem->GetWindowRect(&rect);
pParent->ScreenToClient(&rect);
rf.fLeft = (float)(rect.left) / (float)(m_rectDlg.Width());
rf.fRight = (float)(rect.right) / (float)(m_rectDlg.Width());
rf.fTop = (float)(rect.top) / (float)(m_rectDlg.Height());
rf.fBottom = (float)(rect.bottom) / (float)(m_rectDlg.Height());
m_vResizeID.push_back(rf);
}
void CItemResize::ResizeItem()
{
for (UINT i=0;i<m_vResizeID.size();i++)
{
m_vResizeID[i].pParent->GetClientRect(&m_rectDlg);
CWnd *pItem = m_vResizeID[i].pParent->GetDlgItem(m_vResizeID[i].nID);
if (pItem)
{
CRect rect;
rect.left = (int)(m_rectDlg.Width()*m_vResizeID[i].fLeft);
rect.right = (int)(m_rectDlg.Width()*m_vResizeID[i].fRight);
rect.top = (int)(m_rectDlg.Height()*m_vResizeID[i].fTop);
rect.bottom = (int)(m_rectDlg.Height()*m_vResizeID[i].fBottom);
pItem->MoveWindow(rect);
}
}
}
以下是第二种方法,来源于网络
void CPaperManagementDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if(nType==1) return;
CWnd *pWnd;
pWnd = GetDlgItem(IDC_STATIC);
ChangeSize(pWnd, cx, cy);
pWnd = GetDlgItem(IDC_FILE_TREE);
ChangeSize(pWnd, cx, cy);
pWnd = GetDlgItem(IDC_EDIT_NAME);
ChangeSize(pWnd, cx, cy);
pWnd = GetDlgItem(IDC_EDIT_REFERENCE);
ChangeSize(pWnd, cx, cy);
pWnd = GetDlgItem(IDC_EDIT_SUMMARY);
ChangeSize(pWnd, cx, cy);
pWnd = GetDlgItem(IDC_EDIT_REMARK);
ChangeSize(pWnd, cx, cy);
pWnd = GetDlgItem(IDC_BUTTON_UPDATE);
ChangeSize(pWnd, cx, cy);
pWnd = GetDlgItem(IDC_BUTTON_SAVE);
ChangeSize(pWnd, cx, cy);
pWnd = GetDlgItem(IDC_STATIC_1);
ChangeSize(pWnd, cx, cy);
pWnd = GetDlgItem(IDC_STATIC_2);
ChangeSize(pWnd, cx, cy);
pWnd = GetDlgItem(IDC_STATIC_3);
ChangeSize(pWnd, cx, cy);
pWnd = GetDlgItem(IDC_STATIC_4);
ChangeSize(pWnd, cx, cy);
GetClientRect(&m_rect);
}
void CPaperManagementDlg::ChangeSize(CWnd *pWnd, int cx, int cy)
{
if(pWnd)
{
CRect rect;
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.left=rect.left*cx/m_rect.Width();
rect.right=rect.right*cx/m_rect.Width();
rect.top=rect.top*cy/m_rect.Height();
rect.bottom=rect.bottom*cy/m_rect.Height();
pWnd->MoveWindow(rect);
}
}