MFC改变对话框大小,不可伸缩、不可移动、固定位置、最大化、最小化、无边框移动

MFC改变对话框大小,不可伸缩、不可移动、固定位置、最大化、最小化、无边框移动 目录1.对话框不可缩放1.1 将边框border设置成除Resizing以外的选项1.2 添加函数2.改变对话框位置及大小2.1 初始化调整对话框窗口大小和位置​编辑3.对话框不可移动4.对话框边框的最大化最小化按钮的隐藏5.无边框情况下鼠标移动到用户区可以拖动对话框5.1添加WM_NCHITEST响应5.2添加WM_LBUTTONDOWN响应学习笔记------------------------------------------------------------1.对话框不可缩放1.1 将边框border设置成除Resizing以外的选项border属性的含义None无边界无标题栏、不可移动、不可拉伸Thin薄边界可移动、可拉伸Resizing边界可移动、可拉伸Dialog Frame边界可移动不可拉伸1.2 添加函数BOOL CBasicDemoDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 移除大小调整和最大化样式 ModifyStyle(WS_THICKFRAME | WS_MAXIMIZEBOX, 0); return TRUE; // 返回 TRUE 除非你将焦点设置到控件 }2.改变对话框位置及大小2.1 初始化调整对话框窗口大小和位置BOOL CBasicDemoDlg::OnInitDialog() { //得到显示器大小 int cx GetSystemMetrics(SM_CXSCREEN); int cy GetSystemMetrics(SM_CYSCREEN); //固定尺寸和位置 CRect temprect(0,0,1640,1480); CWnd::SetWindowPos(NULL,0,0,temprect.Width(),temprect.Height(),SWP_NOZORDER|SWP_NOMOVE); //全屏显示 CRect rcTemp; rcTemp.TopLeft() CPoint(0,0); rcTemp.BottomRight() CPoint(cx,cy); MoveWindow(rcTemp); //居中显示 CRect rcTemp; rcTemp.TopLeft() CPoint(cx / 2 - nDstWidth / 2, cy / 2 - nDstHeight / 2); rcTemp.BottomRight() CPoint(cx / 2 nDstWidth / 2, cy / 2 nDstHeight / 2); MoveWindow(rcTemp); }SetWindowPosBOOL SetWindowPos(const CWnd *pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags);x和y窗口的左上角的x和y坐标cx和cy窗口的宽和高nFlags设定窗口的尺寸和定位可以是下表的取值的组合3.对话框不可移动3.1 修改OnSysCommandvoid CBasicDemoDlg::OnSysCommand(UINT nID, LPARAM lParam) { if (nID SC_MOVE || nID 0xF012) return; CDialogEx::OnSysCommand(nID, lParam); }4.对话框边框的最大化最小化按钮的隐藏属性里修改5.无边框情况下鼠标移动到用户区可以拖动对话框5.1添加WM_NCHITEST响应LRESULT CBasicDemoDlg::OnNcHitTest(CPoint point) { UINT nResult CDialog::OnNcHitTest(point); return nResult HTCLIENT ? HTCAPTION : nResult;//鼠标的坐标在客户区么在的话就把它当成标题栏 return CDialogEx::OnNcHitTest(point); }5.2添加WM_LBUTTONDOWN响应void CBasicDemoDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 SendMessage(WM_SYSCOMMAND, SC_MOVE, 0);//发送一个移动的消息 CDialogEx::OnLButtonDown(nFlags, point); }6.对话框右上角放大缩小以及关闭不可用