mfc中重绘标题栏如何去除边框
时间: 2023-07-29 13:01:44 浏览: 55
在MFC中,要去除标题栏的边框,可以使用以下步骤进行重绘。
1. 在自定义的窗口类中,添加以下两个成员变量:
BOOL m_bBorderless; // 用于标记是否去除边框
CRect m_rcBorderOffset; // 用于保存边框位置偏移量的矩形
2. 在窗口类的构造函数中,初始化m_bBorderless为FALSE,m_rcBorderOffset为空矩形。
3. 在OnNcCalcSize函数中,添加以下代码:
```cpp
if (m_bBorderless)
{
*lpClient = *lprcNewFrame;
lpClient->DeflateRect(m_rcBorderOffset);
}
```
这段代码的作用是,如果标记为去除边框,则通过修改lpClient矩形的大小,来重绘非客户区。
4. 在OnNcPaint函数中,添加以下代码:
```cpp
if (m_bBorderless)
{
// 使用指定的颜色重绘标题栏背景
pDC->FillRect(lprc, &CBrush(RGB(255, 255, 255)));
}
```
这段代码的作用是,如果标记为去除边框,则通过使用指定颜色填充标题栏的背景。
5. 在OnNcHitTest函数中,添加以下代码:
```cpp
if (m_bBorderless)
{
return HTCAPTION; // 点击标题栏时,模拟为点击窗口的标题栏
}
```
这段代码的作用是,如果标记为去除边框,则将点击标题栏的消息转换为点击窗口的标题栏消息。
通过以上步骤,可以在MFC中实现重绘标题栏且去除边框的效果。