Используя Window API, как мне обеспечить, чтобы элементы управления сохраняли собственный внешний вид?

StackOverflow https://stackoverflow.com/questions/111630

Вопрос

Некоторые из созданных мной элементов управления, похоже, по умолчанию используют старую тему Windows 95, как мне предотвратить это?Вот пример кнопки, которая не сохраняет внешний вид операционной системы (я использую Vista в качестве среды разработки):

HWND button = CreateWindowEx(NULL, L"BUTTON", L"OK", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                  170, 340, 80, 25, hwnd, NULL, GetModuleHandle(NULL), NULL);

Я использую родной C ++ с Windows API, без управляемого кода.

Это было полезно?

Решение

Я считаю, что это не имеет никакого отношения к вашему коду, но вам нужно настроить правильный проявляющийся файл для получения тематических элементов управления.

Немного информации здесь: @msdn.com и здесь: @blogs.msdn.com

Вы можете увидеть разницу между приложением с манифестом и без него здесь: heaventools.com

Другие советы

Чтобы добавить манифест в приложение, вам необходимо создать файл MyApp.manifest и добавить его в файл ресурсов приложения:

//-- This define is normally part of the SDK but define it if this 
//-- is an older version of the SDK.
#ifndef RT_MANIFEST
#define RT_MANIFEST              24
#endif

//-- Add the MyApp XP Manifest file
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "MyApp.manifest"

С более новыми версиями Visual Studio (Визуальная студия) существует Инструмент Манифеста вкладка, найденная в настройках проекта и Дополнительные файлы Манифеста поле, найденное на этой вкладке, также можно использовать для определения файла манифеста.

Вот простой файл MyApp.manifest для приложения Win32:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.1"
    processorArchitecture="X86"
    name="Microsoft.Windows.MyApp"
    type="win32"
/>
<description>MyApp</description>
</assembly>

Если ваше приложение зависит от других библиотек DLL, эти сведения также можно добавить в манифест, и Windows будет использовать эту информацию, чтобы убедиться, что ваше приложение всегда использует правильные версии этих зависимых библиотек DLL.

Например, вот подробные сведения о зависимости манифеста для библиотек common control и версии 8.0 C runtime:

<dependentAssembly>
    <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="X86"
        publicKeyToken="6595b64144ccf1df"
        language="*"
    />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity
        type="win32"
        name="Microsoft.VC80.CRT"
        version="8.0.50608.0"
        processorArchitecture="x86"
        publicKeyToken="1fc8b3b9a1e18e3b" />
</dependentAssembly>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top