首先在***Dlg.h头文件中定义
- CRect m_rectmin;//用于存储初始化对话框的大小
- CRect Button1Rectinit;//用于存储初始化控件的大小
CRect m_rectmin;//用于存储初始化对话框的大小
CRect Button1Rectinit;//用于存储初始化控件的大小
然后定义一个变化函数
- //控件大小位置随对话框大小任意变化
- //参数是控件ID 控件初始化参数lpRect
- void autosize(UINT nID,LPRECT lpRect);
//控件大小位置随对话框大小任意变化
//参数是控件ID 控件初始化参数lpRect
void autosize(UINT nID,LPRECT lpRect);
在***Dlg.cpp文件中,添加如下代码:
- ***Dlg::OnInitDialog()
- {
- ******
- GetWindowRect(&m_rectmin);//获取对话框大小初始值
- //获取对话框中各个控件的大小初始值
- CWnd *pWnd;
- pWnd = GetDlgItem(IDC_BUTTON1); //获取按钮1句柄
- pWnd->GetWindowRect(&Button1Rectinit);
- ********
- }
***Dlg::OnInitDialog()
{
******
GetWindowRect(&m_rectmin);//获取对话框大小初始值
//获取对话框中各个控件的大小初始值
CWnd *pWnd;
pWnd = GetDlgItem(IDC_BUTTON1); //获取按钮1句柄
pWnd->GetWindowRect(&Button1Rectinit);
********
}
- void CPISProcToolsDlg::autosize(UINT nID,LPRECT lpRect)
- {
- CWnd *pWnd;
- pWnd = GetDlgItem(nID); //获取控件句柄
- if(!pWnd) return; //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
- CRect rect,recttemp; //定义rect为控件变化后的参数
- GetClientRect(&recttemp); //recttemp获取变化后对话框客户区大小
- //计算各个参数值,利用每个值主窗口的相对值计算
- rect.left = recttemp.Width() * lpRect->left/m_rectmin.Width();
- rect.right = recttemp.Width() * lpRect->right/m_rectmin.Width();
- rect.top = recttemp.Height() * lpRect->top/m_rectmin.Height();
- rect.bottom = recttemp.Height() * lpRect->bottom/m_rectmin.Height();
- pWnd->MoveWindow(rect);//调整控件位置
- }
void CPISProcToolsDlg::autosize(UINT nID,LPRECT lpRect)
{
CWnd *pWnd;
pWnd = GetDlgItem(nID); //获取控件句柄
if(!pWnd) return; //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
CRect rect,recttemp; //定义rect为控件变化后的参数
GetClientRect(&recttemp); //recttemp获取变化后对话框客户区大小
//计算各个参数值,利用每个值主窗口的相对值计算
rect.left = recttemp.Width() * lpRect->left/m_rectmin.Width();
rect.right = recttemp.Width() * lpRect->right/m_rectmin.Width();
rect.top = recttemp.Height() * lpRect->top/m_rectmin.Height();
rect.bottom = recttemp.Height() * lpRect->bottom/m_rectmin.Height();
pWnd->MoveWindow(rect);//调整控件位置
}
然后重载WM_SIZE函数和WM_OnGetMinMaxInfo函数:
- void CPISProcToolsDlg::OnSize(UINT nType, int cx, int cy)
- {
- CDialog::OnSize(nType, cx, cy);
- // TODO: 在此处添加消息处理程序代码
- if(nType == SIZE_MINIMIZED) return;//防止窗口最小化时出现不可预知的问题
- autosize(IDC_BUTTON1,Button1Rectinit);
- }
void CPISProcToolsDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
if(nType == SIZE_MINIMIZED) return;//防止窗口最小化时出现不可预知的问题
autosize(IDC_BUTTON1,Button1Rectinit);
}
- void CPISProcToolsDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)//限制对话框大小下限
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- lpMMI-> ptMinTrackSize.x = m_rectmin.Width() ; //宽
- lpMMI-> ptMinTrackSize.y = m_rectmin.Height() ; //高
- CDialog::OnGetMinMaxInfo(lpMMI);
- }
void CPISProcToolsDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)//限制对话框大小下限
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
lpMMI-> ptMinTrackSize.x = m_rectmin.Width() ; //宽
lpMMI-> ptMinTrackSize.y = m_rectmin.Height() ; //高
CDialog::OnGetMinMaxInfo(lpMMI);
}
本文章来自于【http://blog.csdn.net/fc841105/article/details/6717111】