MF C Элемент управления EditBrowse не отображает значок папки во время выполнения - PullRequest
1 голос
/ 19 февраля 2020

У меня есть приложение диалогового типа, которое включает MF C EditBrowse Control. Этот элемент управления включает значок папки / лупы справа, где пользователь должен щелкнуть, чтобы вызвать всплывающее окно браузера папок.

screen grab of what it should look like

Значок этой папки / лупы правильно отображается в диалоговом редакторе Visual Studio, но во время выполнения он отображается как простая плоская кнопка. В противном случае он ведет себя правильно, то есть всплывающее окно браузера и выбранная папка отображается, когда пользователь нажимает кнопку ОК.

При запуске с отладчиком в окне вывода VS отображается сообщение о том, что «Не удается загрузить растровое изображение: 4299». Это сообщение отображается после строки CDialogEx :: OnInitDialog () в моем OnInitDialog ().

Я написал тестовые программы, и они правильно отображают значок. Я также добавил дополнительные элементы управления EditBrowse в моей исходной программе, но они сталкиваются с той же проблемой и просто добавили еще одну строку «не могу загрузить растровое изображение». Я также добавил другие элементы управления MF C, и некоторые из них также не отображают свои значки (или другие элементы).

Мне удалось немного повлиять на проблему, сделав вызовы EnableBrowseButton () и EnableFolderBrowswButton () из моего OnInitDialog. Если я это сделаю, я получу значок, который выглядит как 3 горизонтальные точки:

enter image description here

, что лучше, но я бы предпочел папку / лупу icon.

Это достаточно сложное приложение, я бы предпочел не переписывать его с самого начала и, более того, мне хотелось бы понять, что происходит. Я вполне уверен, что это результат добавления / удаления элементов управления по мере разработки приложения, но я не имею четкого представления о том, с чего начать отслеживать, где что-то пошло не так.

Мысли о том, как отлаживать это? Кстати, это VS 2010.

1 Ответ

1 голос
/ 19 февраля 2020

CMFCEditBrowseCtrl использует Visual Manager для загрузки растрового изображения из ресурсов MF C.

Этот ресурс загружен в "afxribbon.rc"

Убедитесь, что следующие строки включены в основной файл * .r c (именно так VS Wizard создает * .r c file)

#if !defined(_AFXDLL)
#include "afxribbon.rc"   // MFC ribbon and control bar resources
#endif

(я полагаю, вы можете опустить оператор #if/end, но, вероятно, он есть по причине)

В качестве альтернативы, CMFCEditBrowseCtrl::SetBrowseButtonImage может использоваться для назначения иконки пользователя.

...