1、 添加WM_NCHITTEST消息
2、 设置对话框属性System Menu 为False。
如果不设置添加完代码以后对话框边框出现了箭头,但是窗口大小是固定的。
3、 添加代码
LRESULT CDialogZoomDlg::OnNcHitTest(CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 //无边框缩放 //这里是防止在最大化的时候能缩放窗口(在没有WS_THICKFRAME风格的情况下需要这样处理下) if (IsZoomed()) { return CDialog::OnNcHitTest(point); } CRect rect; GetClientRect(&rect); CPoint pt = point; ScreenToClient(&pt); static int nFrame = 4; // 窗口边框的宽度 rect.DeflateRect(nFrame, nFrame); CRect RectResize(rect.right - 20, rect.bottom - 20, rect.right, rect.bottom); // CRect rectTitle(nFrame,nFrame, rect.right - nFrame,CAPTION_HEIGHT); if (!rect.PtInRect(pt)) { if (pt.x <= nFrame && pt.y >= rect.bottom - nFrame) { return HTBOTTOMLEFT; } else if (pt.x <= nFrame && pt.y <= nFrame) { return HTTOPLEFT; } else if (pt.x >= rect.right - nFrame && pt.y <= nFrame) { return HTTOPRIGHT; } else if (pt.x >= rect.right - nFrame && pt.y >= rect.bottom - nFrame) { return HTBOTTOMRIGHT; } else if (pt.x <= nFrame) { return HTLEFT; } else if (pt.y <= nFrame) { return HTTOP; } else if (pt.y >= rect.bottom - nFrame) { return HTBOTTOM; } else if (pt.x >= rect.right - nFrame) { return HTRIGHT; } } else if (RectResize.PtInRect(pt)) { return HTBOTTOMRIGHT; } // else if (rectTitle.PtInRect(pt)) // { // return HTCAPTION; // } else { return HTCLIENT; } return CDialog::OnNcHitTest(point); }
只加这么多,就可以缩放。四个方向均可以。
时间: 2024-10-06 08:02:16