我在窗口的回调函数中覆盖了窗口的非客户区域,如下所示:
case WM_NCPAINT:
{
HDC hdc;
RECT rect;
HPEN pen;
hdc=GetDCEx(hWnd,(HRGN)wParam,DCX_WINDOW|DCX_CACHE|DCX_INTERSECTRGN|DCX_LOCKWINDOWUPDATE);
GetWindowRect(hWnd,&rect);
pen=CreatePen(PS_SOLID, 10, RGB(255, 0, 0));//red pen 10 pixels in size
SelectObject(hdc,pen);
Rectangle(hdc,0,0,(rect.right-rect.left),(rect.bottom-rect.top));
DeleteObject(pen);
ReleaseDC(hWnd,hdc);
RedrawWindow(hWnd,&rect,(HRGN)wParam,RDW_UPDATENOW)
}break;
这可以解决问题,在上述情况下,我的窗口周围绘制了一个红色矩形。但是,如果窗口失去焦点,则会绘制默认的非客户区域,而我的自定义非客户区域图形也会消失。
我尝试在窗口的回调函数中捕获消息WM_KILLFOCUS,并与使用WM_NCPAINT进行相同的操作,但是它没有执行任何操作(尽管我看到我在按下另一个窗口时收到此消息,并且窗口失去焦点) 。
我在这里想念什么...?
为添加处理程序WM_NCACTIVATE
:
case WM_NCACTIVATE:
// Paint the non-client area now, otherwise Windows will paint its own
RedrawWindow(hWnd, NULL, NULL, RDW_UPDATENOW);
break;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句