WS_EX_TOPMOST and WS_POPUP

问题描述 投票:0回答:1

我想在标题栏中画一些东西来表示一个X,因为这里没有 WS_CAPTION,它只是使用 WS_EX_TOOLWINDOW | WS_EX_TOPMOSTWS_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;
}
winapi gdi
1个回答
1
投票

.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;
}

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.