如果在系统范围内禁用,则为 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);
成功了。
如果我检测到样式被禁用,如何强制启用它们?
如果用户决定禁用主题,您不能推翻该决定。你只需要应付它。显而易见的前进方向是改进您的应用程序在这种情况下的行为。
我正在 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);
成功了。
如果我检测到样式被禁用,如何强制启用它们?
如果用户决定禁用主题,您不能推翻该决定。你只需要应付它。显而易见的前进方向是改进您的应用程序在这种情况下的行为。