我正在针对7、8和10的Windows7系统上编写一个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);
工作。
如果检测到样式已禁用,如何强制启用样式?
如果用户决定禁用主题,则不能推翻该决定。你只需要应付它。显而易见的方法是在这种情况下改进你的应用程序的行为。