如图:
重载OnSize()函数进行控件调整:m_bStart在构造函数中设置为FALSE,对话框初始化函数中设置为TRUE,否则会报错。因为只有当窗口产生后才调用OnSize()函数进行控件的调整,当窗口没产生时就对窗口进行调整就会有问题。
void CFileSearchToolDlg::OnSize(UINT nType, int cx, int cy){ CDialogEx::OnSize(nType, cx, cy); CRect RectOld,RectNew; int Off=0; if (m_bStart) { //基于屏幕坐标 m_EditPath.GetWindowRect(&RectOld); //基于客户区坐标 m_EditPath.SetWindowPos(NULL,RectOld.left,RectOld.top,cx-335,RectOld.Height(),SWP_NOMOVE|SWP_NOZORDER); m_EditPath.GetWindowRect(&RectNew); Off=RectNew.Width()-RectOld.Width(); CRect RectScan; m_BtnScan.GetWindowRect(&RectScan); ScreenToClient(&RectScan); CRect RectStart; m_BtnStart.GetWindowRect(&RectStart); ScreenToClient(&RectStart); m_BtnScan.SetWindowPos(NULL,RectScan.left+Off,RectScan.top,0,0,SWP_NOZORDER|SWP_NOSIZE); m_BtnStart.SetWindowPos(NULL,RectStart.left+Off,RectStart.top,0,0,SWP_NOSIZE|SWP_NOZORDER); CRect RectList; m_ListResult.GetWindowRect(&RectList); ScreenToClient(&RectList); m_BtnStart.GetWindowRect(&RectStart); ScreenToClient(&RectStart); RectList.right=RectStart.right; RectList.bottom=cy-10; m_ListResult.SetWindowPos(NULL,0,0,RectList.Width(),RectList.Height(),SWP_NOZORDER|SWP_NOMOVE); if (RectList.Width()>1090) { m_ListResult.SetColumnWidth(7,LVSCW_AUTOSIZE_USEHEADER); } // Invalidate(TRUE); }}2、控制窗口最大化时的大小和位置,以及拖曳窗口时的最大拖曳窗口和最小拖曳窗口:响应 WM_GETMINMAXINFO 消息void CFileSearchToolDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI){ //最大化时窗口的大小 int nScreenWidth=GetSystemMetrics(SM_CXSCREEN); int nScreenHeight=GetSystemMetrics(SM_CYSCREEN); lpMMI->ptMaxSize.x=nScreenWidth; lpMMI->ptMaxSize.y=600; //最大化时窗口在屏幕中的位置 CRect MaxRect; GetWindowRect(&MaxRect); lpMMI->ptMaxPosition.y=(nScreenHeight-MaxRect.Height())/2; //对窗口进行拖曳时,设置最大拖曳窗口和最小拖曳窗口 lpMMI->ptMinTrackSize.x=m_Rect.Width(); lpMMI->ptMinTrackSize.y=m_Rect.Height(); lpMMI->ptMaxTrackSize.x=nScreenWidth; lpMMI->ptMaxTrackSize.y=600; CDialogEx::OnGetMinMaxInfo(lpMMI);}
新闻热点
疑难解答