我想在标题栏中画一些东西来表示一个X,因为这里没有 WS_CAPTION
,它只是使用 WS_EX_TOOLWINDOW | WS_EX_TOPMOST
和 WS_POPUP|WS_THICKFRAME
. 但是我什么地方都画不出来。 我做了一个下面的测试,只是把它全部填成红色,但没有任何变化。 我到底做错了什么或漏掉了什么?
case WM_NCACTIVATE:
case WM_NCPAINT:
{
// call default handler (I've tried it both ways, with and without DefWindowProc)
::DefWindowProc(hwnd, umsg, wparam, lparam);
HDC hdc;
if ((hdc=::GetWindowDC(hwnd))!=NULL) {
// Paint into this DC
RECT rcwin;
if (::GetWindowRect(hwnd, &rcwin)) {
HBRUSH hbrush=::CreateSolidBrush(RGB(255, 0, 0));
if (hbrush) {
rcwin.right-=rcwin.left;
rcwin.bottom-=rcwin.top;
rcwin.left=rcwin.top=0;
::FillRect(hdc, &rcwin, hbrush);
::DeleteObject(hbrush);
}
}
::ReleaseDC(hwnd, hdc);
}
return 0;
}
.WM_NCACTIVATE
绘制时 RedrawWindow()
జజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజ WM_PAINT
文件WM_NCPAINT
说要用
以获得 WM_NCPAINT
以供借鉴。该。 是一个 你可以在里面画画。你可以使用 GetDCEx()
的边界矩形,以获得 HDC
,如果需要的话。wParam
HRGN
GetRgnBox()
基于Remy的一个关于邪恶的WM_NCPAINT的链接,从pascal版本转换到下面的C++版本。 它和stackoverflow中的链接一样好用,但同样,只有在以下情况下才可以使用。HRGN
是提供。 我在这里发帖只是为了补充。
case WM_NCPAINT: {
::DefWindowProc(hwnd, umsg, wparam, lparam);
HRGN hrgn = (HRGN)wParam;
HDC hdc = ::GetDCEx(hwnd, hrgn, DCX_WINDOW | DCX_INTERSECTRGN);
HBRUSH hbrush = ::CreateSolidBrush(RGB(255, 0, 0));
::FillRgn(hdc, hrgn, hbrush);
::DeleteObject(hbrush);
::ReleaseDC(hwnd, hdc);
return 0;
}