Изменение визуального стиля элементов управления в зависимости от версии Windows - PullRequest
0 голосов
/ 09 января 2011

Я хочу, чтобы vista / win7 использовала окна в стиле Aero, в то время как пользователи XP используют обычный стиль окон (как можно получить стиль Windows XP, а не стили win95?)this:

OSVERSIONINFOEX osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
GetVersionEx((OSVERSIONINFO*)&osvi);
if (osvi.dwMajorVersion > 5) {
               #pragma comment(linker,"/manifestdependency:\"type='win32' "\
               "name='Microsoft.Windows.Common-Controls' "\
               "version='6.0.0.0' "\
               "processorArchitecture='x86' "\
               "publicKeyToken='6595b64144ccf1df' "\
               "language='*' "\
               "\"")
}

Теперь, #pragma выполняется независимо от того, является ли оператор if истинным или ложным, что, я думаю, и работает #pragma.Конечно, есть и другой способ заставить это работать (что-то вроде #ifndef #define ... #endif, я думаю)

Cheers

Ответы [ 2 ]

2 голосов
/ 09 января 2011

Вы смешиваете оценку прагмы во время компиляции с выполнением кода во время выполнения.Очевидно, это не сработает.

Можно сохранить манифест для приложения в файле "PutYourProgramNameHere.exe.manifest".Поэтому, если вам нужны разные манифесты для XP и Vista / Win7, вы можете установить разные файлы манифеста при установке приложения на целевой компьютер.Т.е. ваш установщик проверяет версию ОС и устанавливает соответствующий манифест.

1 голос
/ 10 января 2011

Для этого можно использовать функции API активации .Требования:

  • Используйте LoadLibrary & GetProcAddress для фактической загрузки соответствующих функций API, так как они не существуют до NT 5.1
  • Либо вставьте манифест, содержащийзависимость comctl 6 как ресурс с идентификатором ресурса> 16 или файл в виде файла на диске.

В этом примере кода предполагается, что манифест встроен в качестве ресурса RT_MANIFEST с идентификатором 17. TestOSVersion () - это ваша функция, позволяющая определить, хотите ли вы создать окно со скином.1014 *

Очевидно, что для того, чтобы это работало, общий элемент управления v6 не может быть в манифесте процессов по умолчанию.

...