2009-03-11 2 views
0

Недавно мы переключили наше приложение C++ MFC с VS2005 на VS2008. К сожалению, при этом наш пользовательский интерфейс имеет проблемы с внешним видом, причем такие элементы, как групповые поля, выглядят голубыми, а не черными, диалоги свойств, имеющие белый фон и т. Д. Я полагаю, что в VS2008 MFC был изменен для учета темы ОС (в моем случае XP по умолчанию тема). К сожалению, изменение всех наших элементов управления и пользовательских панелей инструментов, чтобы приложение выглядело прилично снова, потребует большой работы.Отключить тему XP в VS2008 скомпилированном MFC-приложении

Итак, кто-нибудь знает, есть ли способ в коде, чтобы вернуть приложение в режим VS2005? Я нашел следующий код

typedef void (WINAPI *tSetThemeAppProperties)( DWORD); 

tSetThemeAppProperties pSetThemeAppProperties=0; 
HINSTANCE handle = ::LoadLibrary("UxTheme.dll"); 

if (handle) 
    pSetThemeAppProperties = (tSetThemeAppProperties) ::GetProcAddress(handle,"SetThemeAppProperties"); 


if (pSetThemeAppProperties) 
{ 
    // call function 
    pSetThemeAppProperties(0/*dwFlags*/); 
} 
::FreeLibrary(handle); 

который не остановить тему XP подхватил, но отключает все темы и оставляет заявку ищет более от чем это было в VS2005.

благодаря

ответ

2

Может быть, что VS2008 является в том числе Manifest файл в проекте, который загружает comctl32.dll версии 6.0, а не 5.82 comctl32.dll ... как корабль с Windows XP и новее.

+0

Привет, я проверил наш файл манифеста, и была ссылка на commctl32 v6, которая не была в нашем манифесте vs2005. Я удалил это, и это не имело значения. Я попытался ссылаться на v5.82 файла comctl32.dll, но мое приложение не запускается. У вас есть пример манифеста (version/publickeytoken info)? – 2009-03-11 16:24:26

+0

К сожалению, я этого не делаю. Обычно я не использую C++. Я только обрабатывал файлы манифеста после преобразования чего-либо из Java в скомпилированный исполняемый файл по запросу клиента, а скомпилированная версия закончилась загрузкой более старой comctl32.dll, когда она должна была иметь более новую. – Powerlord

+0

Вы должны проверить свой файл 'stdafx.h'. Здесь также можно найти ссылку на манифест. Вы можете попробовать изменить версию манифеста, но есть 'publicKeyToken', который, как мне кажется, также нужно будет изменить. – djeidot

1

В разделе «Свойства-> Свойства конфигурации-> Линетер-> Файл манифеста" установите для параметра «Создать манифест» значение «Нет».

Затем добавьте свой собственный файл манифеста, если хотите, и установите его в разделе «Свойства-> Свойства конфигурации-> Манифест-инструмент-> Ввод и вывод», «Манифест входного ресурса».

Просто убедитесь, что если вы добавите свой файл манифеста, чтобы он не содержал ссылку на commctl32 v6.

Смежные вопросы