小编Bri*_*ton的帖子

在Windows 10上使用DrawThemeBackground绘制的部件不正确

问题描述

我想在C中创建一个Windows API应用程序,它将菜单和标题按钮呈现在同一个非客户区域,类似于Firefox 注意菜单和标题按钮

为了做到这一点,我已经确定解决方案需要:

  • 是类型WS_POPUP,以便菜单与顶部对齐
  • 取得非客户区域的所有权(呈现菜单的位置)
  • 手动渲染最小化/最大化/关闭按钮

该解决方案需要在Windows 7,8和10(以及理想的未来版本)上运行.

它现在看起来如何

我在GitHub上有一个测试程序.

在我的应用程序中,我已经覆盖了适当的事件:

WM_NCCALCSIZE,WM_NCHITTEST,WM_NCLBUTTONDOWN,WM_NCLBUTTONUP,WM_NCMOUSEMOVE,WM_NCPAINT

然后我重新绘制这些事件非客户端领域: WM_NCACTIVATE,WM_SETTEXT

这是我如何进行渲染的示例:

// globals set elsewhere
RECT customAreaRect, minRect, maxRect, closeRect, coverMenuRect;
BOOL maximized;

// ...

LRESULT OnPaintNCA(HWND hWnd, WPARAM wParam, LPARAM lParam) {
  RECT windowRect;
  HRGN hRgn = NULL;
  GetWindowRect(hWnd, &windowRect);
  if (wParam == 1) {
    hRgn = CreateRectRgnIndirect(&windowRect);
  } else {
    hRgn = (HRGN)wParam;
  }

  if (hRgn) {
    // Carve out …
Run Code Online (Sandbox Code Playgroud)

c winapi visual-c++

9
推荐指数
1
解决办法
1468
查看次数

标签 统计

c ×1

visual-c++ ×1

winapi ×1