我想处理 WM_NCPAINT 消息来绘制我自己的窗口框架。我写了一些简单的代码来绘制一个矩形,它应该在它周围给出一个黑色边框。这是代码:
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch(msg){
case WM_NCPAINT:
{
RECT rc;
GetWindowRect(hWnd, &rc);
HDC hDC = GetWindowDC(hWnd);
Rectangle(hDC, 0, 0, rc.right - rc.left, rc.bottom - rc.top);
ReleaseDC(hWnd, hDC);
return TRUE;
}
case WM_DESTROY:
{
PostQuitMessage(0);
break;
}
}
return DefWindowProc(hWnd, msg, wParam, lparam);
}
但是,这有几个问题。在左边缘或上边缘调整窗口大小时,会导致窗口在下边缘和右边缘严重闪烁。第二个问题是在窗户的上角,有圆角,我的画似乎没有发生。(这是 Windows 10)。据我了解,不应该有任何闪烁,因为我在收到 WM_NCPAINT 消息后立即绘制窗口,但似乎并非如此。有人可以告诉我我做错了什么以及如何避免这些问题吗?