mfc如何使控件随着窗口变化自动调整大小

2024-11-17 03:34:56
推荐回答(1个)
回答(1):

void SystemDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
if(nType==1) return; //最小化则什么都不做 
CWnd *pWnd; 
pWnd = GetDlgItem(Btn); //获取控件句柄
ChangeSize(pWnd,cx,cy); //调用changesize()函数
GetClientRect(&m_rect); //将变化后的对话框设置为旧大小
Invalidate();//声明无效区域
UpdateWindow();//立即更新程序
}
void SystemDlg::ChangeSize(CWnd* pWnd, int cx, int cy)
{
if (pWnd)
{
CRect rect; 
pWnd->GetWindowRect(&rect); //获取控件变化前的大小
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标 
rect.left=rect.left*cx/m_rect.Width();//调整控件大小 ,cx/m_rect.Width()为对话框在横向的变化比例
rect.right=rect.right*cx/m_rect.Width(); //cx存储的是变化后的宽度,cy存储的是变化后的高度
rect.top=rect.top*cy/m_rect.Height(); //m_rect.height()表示的是变化前主窗体的高度
rect.bottom=rect.bottom*cy/m_rect.Height();
pWnd->MoveWindow(rect);//设置控件大小
}
}