WM_NCPAINT 重绘RichEdit win32
时间: 2023-07-22 15:06:53 浏览: 54
WM_NCPAINT 是一个Windows消息,用于在非客户区绘制窗口。RichEdit是一个Windows控件,因此也可以使用WM_NCPAINT消息来绘制它的非客户区。要重绘RichEdit的非客户区,您可以重载RichEdit控件的WndProc函数,并在其中处理WM_NCPAINT消息。
以下是一个示例代码,演示如何在RichEdit控件的非客户区中绘制一个自定义的边框:
```c++
LRESULT CALLBACK MyRichEditWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_NCPAINT:
{
// 获取RichEdit控件的边框矩形
RECT rc;
GetWindowRect(hwnd, &rc);
rc.right -= rc.left;
rc.bottom -= rc.top;
rc.left = rc.top = 0;
// 获取设备上下文
HDC hdc = GetWindowDC(hwnd);
// 绘制边框
HPEN hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
HGDIOBJ hOldPen = SelectObject(hdc, hPen);
HBRUSH hBrush = CreateSolidBrush(RGB(255, 255, 255));
HGDIOBJ hOldBrush = SelectObject(hdc, hBrush);
Rectangle(hdc, rc.left, rc.top, rc.right, rc.bottom);
SelectObject(hdc, hOldBrush);
DeleteObject(hBrush);
SelectObject(hdc, hOldPen);
DeleteObject(hPen);
// 释放设备上下文
ReleaseDC(hwnd, hdc);
}
break;
}
// 调用默认的WndProc函数
return CallWindowProc(DefWindowProc, hwnd, msg, wParam, lParam);
}
```
在窗口初始化代码中,将RichEdit控件的WndProc函数设置为MyRichEditWndProc函数即可:
```c++
HWND hwndRichEdit = CreateWindowEx(0, RICHEDIT_CLASS, NULL, WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL, x, y, width, height, hwndParent, (HMENU)ID_RICHEDIT, hInstance, NULL);
SetWindowLongPtr(hwndRichEdit, GWLP_WNDPROC, (LONG_PTR)MyRichEditWndProc);
```