MFC最大化按钮自适应尺寸

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a1220364463/article/details/81506865

        使用MFC的最大化窗口只会让窗口本体最大化,并不会使窗口中的控件自适应变大。

        当然,也有人并没有一开始勾选最大化和最小化的选项,可以在Dialog的属性中找到Maximize BoxMinimize Box并将更改为True。如下图:

Maximize Box    True

 

 

       勾选好最小化与最大化的按钮后,我们可以看到窗口已经可以最小化和最大化了。但是还是不能自适应变化,所以接下来添加适当的代码让它自适应变化。

 

先声明一个CRect类型来保存窗口的尺寸:

CRect m_wndRect;//保存窗口尺寸

然后在初始化Dialog时获取窗口尺寸:

GetClientRect(&m_wndRect);//获取窗口尺寸

然后在Dialog的类向导中的消息中找到SW_SIZE并添加消息处理程序:

SW_SIZE

最后附上OnSize的代码:

void CMainInterfaceDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);

	// TODO: 在此处添加消息处理程序代码
    //我这里只是演示,所以写的控件少。
	int dlgitem[3] = { IDC_TEXT,IDOK,IDCANCEL };
	for (int i = 0; i <3; i++)//因为是多个控件,所以这里用了循环
	{
		CWnd *pWnd = GetDlgItem(dlgitem[i]);
        //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
		if (pWnd && nType != 1 && m_wndRect.Width() && m_wndRect.Height()) 
		{
			CRect rect;   //获取控件变化前的大小 
			pWnd->GetWindowRect(&rect);
			ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
			rect.left = rect.left*cx / m_wndRect.Width();//调整控件大小
			rect.right = rect.right*cx / m_wndRect.Width();
			rect.top = rect.top*cy / m_wndRect.Height();
			rect.bottom = rect.bottom*cy / m_wndRect.Height();
			pWnd->MoveWindow(rect);//设置控件大小 
		}
	}
	//重新获得窗口尺寸
	GetClientRect(&m_wndRect);
}

 

展开阅读全文

没有更多推荐了,返回首页