1.头文件申明变量和函数
BOOL change_flag;
CRect m_rect;
void ChangeSize(UINT nID, int x, int y);
2.在OnInitDialog()添加如下代码
ShowWindow(SW_SHOWMAXIMIZED);//进入界面就将界面最大化
GetClientRect(&m_rect);//获取客户界面的尺寸
3.源文件代码
void CFormModelDlg::ChangeSize(UINT nID, int x, int y) //nID为控件ID,x,y分别为对话框的当前长和宽
{
CWnd *pWnd;
pWnd=GetDlgItem(nID);
if(pWnd!=NULL) //判断是否为空,因为在窗口创建的时候也会调用OnSize函数,但是此时各个控件还没有创建,Pwnd为空
{
if(nID == IDC_COMBO1)//当对应的是combox时,会导致变化高度之后,无法进行下拉,所以需要添加 ”+150“
{
CRect rec;
pWnd->GetWindowRect(&rec); //获取控件变化前的大小
ScreenToClient(&rec); //将控件大小装换位在对话框中的区域坐标
rec.left=rec.left*x/m_rect.Width(); //按照比例调整空间的新位置
rec.top=rec.top*y/m_rect.Height();
rec.bottom=rec.bottom*y/m_rect.Height()+150;
rec.right=rec.right*x/m_rect.Width();
pWnd->MoveWindow(rec); //伸缩控件
}
else//除了combox之外的控件,不需要增加高度
{
CRect rec;
pWnd->GetWindowRect(&rec); //获取控件变化前的大小
ScreenToClient(&rec); //将控件大小装换位在对话框中的区域坐标
rec.left=rec.left*x/m_rect.Width(); //按照比例调整空间的新位置
rec.top=rec.top*y/m_rect.Height();
rec.bottom=rec.bottom*y/m_rect.Height();
rec.right=rec.right*x/m_rect.Width();
pWnd->MoveWindow(rec); //伸缩控件
}
}
}
void CFormModelDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(nType!=SIZE_MINIMIZED)//如果确定oninitdlg已经调用完毕
{
//获取界面上的所有控件ID
HWND hwndChild=::GetWindow(m_hWnd,GW_CHILD);
int nID= 0;
while(hwndChild)
{
nID=::GetDlgCtrlID(hwndChild); //获取控件ID
ChangeSize(nID,cx,cy);
hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);
}
GetClientRect(&m_rect);
if (change_flag==TRUE)//如果是初始化,还未初始化listctrl控件,所以只有等listctrl控件初始化之后才可以进行column宽度的重新修改
{
CRect rect1;
m_ListSpe.GetWindowRect(&rect1);
int iw1=rect1.Width()-50;
m_ListSpe.SetColumnWidth(0,iw1/6-8);
m_ListSpe.SetColumnWidth(1,iw1/3);
m_ListSpe.SetColumnWidth(2,50);
m_ListSpe.SetColumnWidth(3,iw1/2);
}
else
{
change_flag=TRUE;
}
}
}