Создание приложения Win32 для XP и Vista / Windows 7 - PullRequest
0 голосов
/ 14 сентября 2011

Я написал приложение на C ++, используя чистый Win32 API (без MFC или WPF). Я хочу, чтобы один и тот же .exe работал под Windows XP и Windows Vista / Windows 7.

Я использовал манифест для добавления визуальных стилей к элементам управления в моем приложении. Однако, когда я тестировал приложение на компьютере с XP, кнопки не отображаются. Только элементы управления Edit и строка меню делают.

Редактировать: Я думаю, что забыл упомянуть об этом, но приложение отлично работает на Windows 7 / Vista. Редактировать 2: Я использую компилятор MinGW Я подумал, что это проблема с манифестом, поэтому я удалил его и перекомпилировал свою программу. Но кнопки все еще не отображаются. Манифест, который я использую, выглядит следующим образом:

<?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.0"
    processorArchitecture="*"
    name="BlackJack.Viraj"
    type="win32"
/>
<description>Your application description here.</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.2600.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

Проблема в манифесте или это что-то еще?

Ответы [ 4 ]

3 голосов
/ 14 сентября 2011

Убедитесь, что вы звоните InitCommonControlsEx

1 голос
/ 14 сентября 2011

Если вы не используете новый Windows 7 API, стандартное приложение будет хорошо работать на обеих платформах. Также в Windows 7 есть режим совместимости, который можно попробовать, если вы обнаружите что-то сломанное.

Вы уверены, что вызывали API InitCommonControls в начале своей программы?

Смотри, почему это важно - http://blogs.msdn.com/b/oldnewthing/archive/2005/07/18/439939.aspx

Я бы посоветовал вам обратиться к чистому приложению Win32 http://blogs.msdn.com/b/oldnewthing/archive/2005/04/22/410773.aspx

Также я бы предложил поместить манифест в параметры самого компоновщика в исходном файле.

#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
1 голос
/ 14 сентября 2011

Это что-то еще.Предполагая, что они являются нормальными, стандартными кнопками, они должны отображаться независимо от того, как выглядит манифест или нет.Что-то еще происходит.

0 голосов
/ 14 сентября 2011

Манифест в порядке.Поэтому проблема должна быть в вашем коде.Создание тематического приложения - это не то же самое, что не тематическое.

...