如果在系统范围内禁用,则为 window 激活主题

Activate theme for a window if disabled system-wide

我正在 Windows 7 系统上针对 7、8 和 10 编写 Windows(无 MFC 或 Qt)win32 应用程序。

我的应用检测是否启用了 Aero 并正确处理了 aero 和非 aero,但是当 没有视觉样式 OS(即,"Apply visual styles for windows and buttons" 复选框在“控制面板”的“性能选项”对话框中被关闭)。

我可以检测到我的应用程序是否启动时没有使用 IsAppThemed 的主题,但我似乎无法弄清楚如何直接创建启用样式的 window 或强制启用风格..这是我试过的,但没有用:

  case WM_CREATE: {
    if (IsAppThemed() == FALSE) {
      // No visual style is applied
      SetThemeAppProperties(STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS);
      SendMessage(hWnd, WM_THEMECHANGED, 0, 0);
      RedrawWindow(hWnd, 0, 0, RDW_UPDATENOW);
    }
  } break;

甚至没有

SetWindowTheme(hWnd, 0, 0);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

成功了。

如果我检测到样式被禁用,如何强制启用它们?

如果用户决定禁用主题,您不能推翻该决定。你只需要应付它。显而易见的前进方向是改进您的应用程序在这种情况下的行为。