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

标签 c++ windows winapi windows-themes

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

我的应用程序检测是否启用了 Aero 并正确处理了 aero 和非 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);

成功了。

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

最佳答案

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

关于c++ - 如果在系统范围内禁用,则激活窗口主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34293463/

相关文章:

c++ - 这被认为是动态内存分配吗?

c++编译器错误类没有名为的成员

windows - 批处理文件: GOTO in a FOR loop

c - 使用 DeviceIoControl 从应用程序向驱动程序发送数据

c++ - 使用 Win32 API 设置程序描述和公司名称

c++ - 我怎样才能让我的非常大的程序链接起来?

c++ - 正则表达式慢

windows - Windows 的哪一部分加载 mscoree.dll?

c++ - 未显示消息框

c - 为什么在使用 Win32 ConsoleInput 函数时 scanf 不起作用?