如果在系统范围内禁用,则激活窗口的主题

时间:2015-12-15 15:46:37

标签: c++ windows winapi windows-themes

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

我的应用程序检测到Aero是否已启用并正确处理航空和非航空,但是当操作系统中存在无视觉样式时(即“应用窗口的视觉样式和“控制面板的”性能选项“对话框中的”复选框已关闭“。

我可以检测我的应用程序是否在没有IsAppThemed主题的情况下启动,但我似乎无法弄清楚如何直接创建启用了样式的窗口或强制启用样式..这是我尝试了什么,它不起作用:

  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);

的工作。

如果我发现它们已被禁用,我该如何强制启用样式?

1 个答案:

答案 0 :(得分:1)

如果用户决定停用主题,则无法完成该决定。你只需要应付它。显而易见的方法是在这种情况下改善应用程序的行为。