mfc 窗口设置无边框
时间: 2023-07-22 09:55:18 浏览: 117
如果想让MFC窗口去掉边框,可以使用以下代码:
1. 在窗口类的头文件中添加以下代码:
```cpp
afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
afx_msg void OnNcLButtonUp(UINT nHitTest, CPoint point);
```
2. 在窗口类的源文件中添加以下代码:
```cpp
void CMyWnd::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
// 获取窗口的位置和大小
CRect rect;
GetWindowRect(rect);
// 获取鼠标相对于窗口的坐标
ScreenToClient(&point);
// 判断鼠标是否在窗口的边框上
if (point.y < 5)
{
// 拖动窗口
SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
else if (point.y > rect.Height() - 5)
{
// 关闭窗口
SendMessage(WM_SYSCOMMAND, SC_CLOSE, 0);
}
else if (point.x < 5)
{
// 最小化窗口
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
}
else if (point.x > rect.Width() - 5)
{
// 最大化窗口
SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0);
}
}
void CMyWnd::OnNcMouseMove(UINT nHitTest, CPoint point)
{
// 改变鼠标样式
CRect rect;
GetWindowRect(rect);
ScreenToClient(&point);
if (point.y < 5)
{
SetCursor(LoadCursor(NULL, IDC_SIZEALL));
}
else if (point.y > rect.Height() - 5)
{
SetCursor(LoadCursor(NULL, IDC_HAND));
}
else if (point.x < 5)
{
SetCursor(LoadCursor(NULL, IDC_APPSTARTING));
}
else if (point.x > rect.Width() - 5)
{
SetCursor(LoadCursor(NULL, IDC_ARROW));
}
else
{
SetCursor(LoadCursor(NULL, IDC_ARROW));
}
}
void CMyWnd::OnNcLButtonUp(UINT nHitTest, CPoint point)
{
// do nothing
}
```
这段代码会响应窗口的非客户区鼠标事件,实现窗口的拖动、最大化、最小化和关闭。同时,它还会改变鼠标的样式,使得鼠标在窗口边缘时可以更好地交互。
阅读全文