窗体缩放方法

来源:互联网 发布:微商团队怎么优化 编辑:程序博客网 时间:2024/04/27 13:25
首先,一个窗口是否可以拖动改变大小决定于border的属性,

仅当border为Resizing是窗口可以拖动改变大小,其它属性时则不可以。



例子:

通常,主窗体上有TabCtrl控件,并且有通过TabCtrl加载的子窗口,在子窗口有ListCtrl控件和Button,那么:

当主窗体缩放时,需要同步放大TabCtrl和当前子窗口,并且当子窗口被缩放时,上面的ListCtrl个Button控件也要跟着调整大小和位置。

方法如下:

步骤一:重载主窗口的WM_SIZE方法,用于处理TabCtrl和其子窗口的缩放结果。注意不要使用WM_SIZING,否则缩放过程会闪烁。

//窗体缩放事件void CAppConfigDlg::OnSize(UINT nType, int cx, int cy){CDialogEx::OnSize(nType, cx, cy);// TODO:  在此处添加消息处理程序代码CRect rect;GetClientRect(&rect);//TabCtrl缩放处理if (m_TabCtrl.GetSafeHwnd()){m_TabCtrl.MoveWindow(0, 0, rect.Width(), rect.Height());}//子页面缩放处理if (m_clsUploadAPK.GetSafeHwnd()){rect.left += 4;rect.top += 30;rect.right -= 3;rect.bottom -= 3;m_clsUploadAPK.MoveWindow(&rect);}}


步骤二:重载主窗口WM_SIZING方法,用于锁定窗体最小尺寸,这个需要在缩放过程中不断控制。如果不想控制最小尺寸,可以忽略此步骤。

//锁定窗口最小尺寸void CAppConfigDlg::OnSizing(UINT fwSide, LPRECT pRect){CDialogEx::OnSizing(fwSide, pRect);// TODO:  在此处添加消息处理程序代码if (pRect->right - pRect->left < m_nMinWidth){pRect->right = pRect->left + m_nMinWidth;}if (pRect->bottom - pRect->top < m_nMinHeight){pRect->bottom = pRect->top + m_nMinHeight;}}

步骤三:重载子窗口的WM_SIZE方法,用于处理子窗口上面ListCtrl和Button的位置调整

//控件位置调整void CUploadAPK::OnSize(UINT nType, int cx, int cy){CDialogEx::OnSize(nType, cx, cy);// TODO:  在此处添加消息处理程序代码//调整ListCtrlif (m_ctrApkList.GetSafeHwnd()){m_ctrApkList.MoveWindow(5, 47, cx - 12, cy - 85);}//调整按钮CRect rect;((CButton*)GetDlgItem(IDC_Upload))->GetClientRect(&rect);((CButton*)GetDlgItem(IDC_Upload))->MoveWindow(cx - rect.Width() - 10, cy - rect.Height() - 10, rect.Width(), rect.Height());}


0 0
原创粉丝点击