Диалоговое окно имеет современный взгляд на дизайн времени, но старый взгляд на время выполнения (использующий Visual C++ и редактора ресурса)

Я создаю диалоговое окно с редактором ресурса Visual C ++.

Когда я выполняю кнопку проверки редактора, компоненты диалогового окна отображены с современным взглядом, в то время как при запуске приложения, которое создает и показывает диалоговое окно, оно отображено со старым взглядом... Я просто использую вызовы WINAPI для отображения диалогового окна, не MFC.

Вот снимок экрана (верхнее изображение является примером взгляда UI на времени проектирования, другой является взглядом UI на время выполнения):

текст ссылки

Кто-либо знает то, что я делаю неправильно?

5
задан genpfault 16 September 2019 в 14:16
поделиться

4 ответа

Указывает ли в манифесте вашего приложения, что вы хотите использовать comctl32.dll версии 6? Это одно из требований использования стилей оформления и более современного внешнего вида в Windows XP.

Чтобы создать манифест и позволить вашему приложению использовать стили оформления.

Ссылка на ComCtl32.lib и вызовите InitCommonControls (см. документацию Platform SDK в библиотеке MSDN).

Добавьте файл с именем YourApp.exe.manifest в исходное дерево в следующем формате 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>

Добавьте манифест в файл ресурсов вашего приложения следующим образом

CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"

Примечание: когда вы добавляете предыдущую запись в ресурс, вы должны отформатировать ее в одну строку. В качестве альтернативы вы можете поместить файл манифеста XML в тот же каталог, что и исполняемый файл вашего приложения. Операционная система сначала загрузит манифест из файловой системы, а затем проверьте раздел ресурсов исполняемого файла. Версия файловой системы имеет приоритет.

4
ответ дан 13 December 2019 в 19:33
поделиться

Некоторые элементы управления Windows Forms примут новый облик, как только приложение будет привязано к версии 6.0 Comctl32.dll.
, и как вы можете этого добиться, описано в разделе Использование Визуальные стили Windows XP с элементами управления в Windows Forms
1
ответ дан 13 December 2019 в 19:33
поделиться

Правильно ли настроен манифест для использования commctl32.dll версии 6 в вашем проекте? В противном случае вы не получите тематические элементы управления.

В более поздних версиях 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". (Почему VS не может понять это для себя - загадка, которую предстоит разгадать читателю ...)

(Как отмечали некоторые другие, вы также можете вручную сгенерировать манифест и добавить его в файл .rc. Это более длинный текст, но он дает вам полный контроль над манифестом.

5
ответ дан 13 December 2019 в 19:33
поделиться

У меня есть решение для 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>

Во-первых, добавим две строки в файл resource.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).

1
ответ дан 13 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: