MFC 实现对显示的界面(最小宽度和最小高度的限制)

MFC窗口 对拖动的最小范围的限制

第一步:在类向导中,对WM_GETMINMAXINFO消息进行映射

1)如果是单文档视图结构,在CMainFrame类中派生该消息,生成相应的响应函数

2)如果是对话框结构,在CXXXDlg类中派生该消息,生成相应的响应函数

第二步,在生成的响应函数中添加如下代码(本示例是基于单文档视图结构,代码如下

//窗口缩小到的最小范围
#define MINIMUM_WINDOWS_X 1024  
#define MINIMUM_WINDOWS_Y 768

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	int cx = GetSystemMetrics(SM_CXSCREEN); 
	int cy = GetSystemMetrics(SM_CYSCREEN); 
	int nShellHight = 0;
	
	//获取任务栏
	CWnd* pTaskWnd = FindWindow( _T("Shell_TrayWnd"), NULL ); 

	if (pTaskWnd != NULL)
	{
		LONG lStyle = GetWindowLong( pTaskWnd->GetSafeHwnd(), GWL_STYLE ); 		

		//如果任务栏存在且可见,要减去任务栏高度
		if( lStyle & WS_VISIBLE ) 
		{ 
			//任务栏可见 
			RECT TastRect;
			pTaskWnd->GetWindowRect(&TastRect); //任务栏的尺寸
			nShellHight = TastRect.bottom - TastRect.top;
		} 
		else 
		{ 
			//任务栏隐藏 不做处理
		}
	}

	cy -= nShellHight;

	lpMMI->ptMaxSize.x = cx;  // 设置窗口最大化时的宽度
	lpMMI->ptMaxSize.y = cy;  // 设置窗口最大化时的高度
	lpMMI->ptMaxPosition.x = 0; // 设置窗口最大化时x坐标
	lpMMI->ptMaxPosition.y = 0; // 设置窗口最大化时y坐标
	lpMMI->ptMinTrackSize.x = MINIMUM_WINDOWS_X; // 设置窗口最小宽度
	lpMMI->ptMinTrackSize.y = MINIMUM_WINDOWS_Y; // 设置窗口最小高度
	lpMMI->ptMaxTrackSize.x = cx; // 设置窗口最大宽度
	lpMMI->ptMaxTrackSize.y = cy; // 设置窗口最大高度

	CFrameWndEx::OnGetMinMaxInfo(lpMMI);
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值