首页 > 学院 > 开发设计 > 正文

MFC窗口最大化时控件位置的调整

2019-11-11 04:41:49
字体:
来源:转载
供稿:网友

如图:

重载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);}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表