Dialog имеет современный дизайн времени, но старый взгляд на время выполнения (с помощью Visual C++ и редактора ресурсов)
Я создаю диалог с редактором ресурсов Visual C++.
Когда я запускаю кнопку test редактора, компоненты диалога отображаются с современным видом, в то время как при запуске приложения, которое создает и показывает диалог, он отображается со старым видом...Я просто использую вызовы WINAPI для отображения диалогового окна, а не MFC.
Вот скриншот (верхнее изображение-это пример пользовательского интерфейса во время разработки, другое-это пользовательский интерфейс во время выполнения):
Кто-нибудь знает, что я делаю не так???
Заранее спасибо,
Генри
6 ответов:
Указывает ли манифест приложения, что вы хотите использовать comctl32.dll версия 6? Это одно из требований использования визуальных стилей и более современного вида в windows XP.
Чтобы создать манифест и разрешить приложению использовать визуальные стили.
Ссылка на comctl32, связанной.lib и вызов InitCommonControls (см. документацию Platform SDK в библиотеке MSDN).
Добавьте файл YourApp.exe.манифест для вашего исходного дерева, которое имеет следующее Формат XML:
<?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="X86" name="CompanyName.ProductName.YourApp" type="win32" /> <description>Your application description here.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>Добавьте манифест в файл ресурсов вашего приложения следующим образом
Примечание: при добавлении предыдущей записи в ресурс необходимо отформатировать ее в одну строку. Кроме того, файл XML-манифеста можно поместить в тот же каталог, что и исполняемый файл приложения. Операционная система сначала загрузит манифест из файловой системы, а затем проверит раздел ресурсов исполняемого файла. Приоритет имеет версия файловой системы.CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
У вас есть манифест, правильно настроенный для использования версии 6 commctl32.DLL в свой проект? Если нет, вы не получите тематические элементы управления.
В более поздних версиях Visual Studio это обычно делается с помощью # pragma, например (это для x86, скопировано из нового проекта, созданного с помощью VS2005):
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")Если вы добавляете его в один из исходных файлов проекта и перестраиваете, манифест будет сгенерирован компоновщиком и добавлен в приложение. Для другого процессора архитектуры, вам нужно будет изменить значение" processorArchitecture". (Почему ВС не может разобраться в этом сам-загадка, которую читателю остается разгадать...)
(Как отметили некоторые другие, вы также можете вручную создать манифест и добавить его в список .файл rc. Это более многословно, но дает вам полный контроль над содержанием манифеста.)
Некоторые элементы управления Windows Forms примут свое новое обличье, как только приложение будет привязано к версии 6.0 Comctl32.файл DLL.и как вы можете достичь этого описано в разделе Использование визуальных стилей Windows XP с элементами управления в Windows Forms
У меня есть решение для VC6, но я не уверен, что оно будет работать в VS 2008.
(также проверьте Эту статью на предмет того, что вызывает проблему)Вот пример простого файла манифеста, который я использовал для его решения:
Создайте следующий XML-файл,
<?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="X86" name="Microsoft.Windows.YourApplication" type="win32" /> <description>YourApplication</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>Во-первых, давайте добавим две строки к ресурсу.H файл. Просто скопируйте и вставьте следующее:
#define IDR_MANIFEST 1 #define RT_MANIFEST 24Теперь откройте файл пользовательских ресурсов приложения. Обычно он находится в каталоге res; расширение по умолчанию: .алгоритм RC2. Вручную добавьте следующую строку:
// Add manually edited resources here... IDR_MANIFEST RT_MANIFEST MOVEABLE PURE "res\\ApplicationManifestXMLFile"Замените ApplicationManifestXMLFile фактическим именем файла (XML, который вы создали).
Вопрос задает C++, а этот другой вопрос показывает, как сделать это более чисто.
Для .Net 2.0+, пожалуйста, смотрите > эту статью MSDN о том, как это сделать с одной строкой кода, а именно:
Main() { Application.EnableVisualStyles(); }Я надеюсь, что это поможет кому-то найти эту тему.
Расширение существующих ответов...
MSDN: требования к сборке общих элементов управления Windows Vista
Опуская следующее в stdafx.h хорошо работал для меня и помог отобразить во время выполнения тонкую стилизацию границ, показанную в Редакторе ресурсов диалогового окна VS:
#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
Comments