добавление syslink, не отображающего диалоговое окно mfc

Сначала добавив syslink в мое диалоговое окно, он не открывался. Меня попросили добавить следующую строку в мой код для отображения диалогового окна с элементом управления «Syslink».

#pragma comment(linker,"\"/manifestdependency:type='win32'\name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

Это работало нормально, когда я добавил эту строку в свой проект VS. Что означает эта строка кода?

Во-вторых, когда я добавил один и тот же код для диалогового окна и элемента управления syslink в файл .rc другого файла и в файле resource.h, и когда я скомпилировал его с помощью файла make, я столкнулся с той же проблемой. Однако на этот раз я добавил строку комментария #pragma. (FYI — если я удаляю элемент управления syslink из файла rc, диалоговое окно работает нормально). В чем может быть проблема ?

1

Решение

Прагма заставляет библиотеку Microsoft быть связанной с вашей программой. Чтобы использовать эти «общие элементы управления 6», вам также необходимо вызвать InitCommonControlsEx во время запуска программы.

2

Другие решения

@ ScottMcP-MVP Спасибо за ваш ответ.

На самом деле я решил вторую проблему. «/ ALLOWISOLATION: NO» был установлен как опция компоновщика в моем make-файле, который создавал объектный файл и двоичные файлы так, как если бы не было файла манифеста. Таким образом, директива «# pragma comment», которая модифицировала манифест, не имела эффекта при компиляции из make-файла. Когда я удалил этот параметр компоновщика, все работало нормально, даже без вызова «InitCommonControls»

Насколько я понимаю, указанная «директива # pragma» добавляет комментарий в объектный файл для ссылки на библиотеку общих элементов управления, а также добавляет запись в файл манифеста для ссылки на библиотеку общих элементов управления, только если ее версия 6 или выше. (Поскольку syslink определяется только с версии 6)

Пожалуйста, поправьте меня, если я ошибаюсь.

0

Это исправляет элемент управления SYSLink

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' "\
"version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

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

Сбой из-за необходимости поддержки текста в кодировке Unicode, который по умолчанию не загружен, находится в версии 6 файла Comctl32.dll.

Все новые функциональные возможности, определенные в версии 6 ComCtl32.dll, поддерживают
только Юникод. Поэтому вы не можете создавать ANSI-версии SysLink
элементы управления, только версии Unicode.

0