如圖:
重載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);}
新聞熱點
疑難解答