Пакет функций MFC - как обновить элемент управления сеткой свойств

Я новичок в MFC и немного смущен новыми функциями «MFC feature pack». С помощью мастера у меня теперь есть приложение, которое выглядит как IDE - имеет прикрепляемый файловый менеджер с левой стороны и закрепляемое окно свойств с правой стороны. Я могу получить выбранные элементы в окне проводника файлов с помощью ON_WM_LBUTTONDBLCLK и GetItemText ().

Вопрос: Окно свойств должно быть «обновлено» после нажатия на элемент в окне проводника файлов. Бывший. Я нажимаю кнопку элемента в дереве управления, в окне свойств должны отображаться «изображение», «шрифт» и «цвет». Как я могу это сделать? Как вы обновляете содержимое propertygridCtrl?


person Owen    schedule 20.07.2009    source источник


Ответы (2)


Чтобы заполнить сетку свойств, посмотрите на содержимое, созданное мастером. Вы должны настроить обработчик для события нажатия кнопки элемента, очистить содержимое сетки, снова заполнить ее. Кажется очевидным ответ, так что, возможно, я неправильно понял вопрос.

person Roel    schedule 22.07.2009
comment
Что ж, в этом и заключается логика. Я могу очистить и заполнить содержимое сетки с помощью void CPropertiesWnd :: OnProperties1 (), который вызывается на карте сообщений как ON_COMMAND (ID_PROPERTIES1, OnProperties1). Это означает, что я хотел бы вызвать OnProperties1 () в классе CViewTree после нажатия на элемент дерева. Как вы вызываете afx_msg void OnProperties1 ()? - person Owen; 23.07.2009
comment
Э-э, вызывая его, как и все другие методы и функции: OnProperties1 (); ? Это просто функция, такая же, как и все остальные, вы можете вызвать ее вручную, даже если она также вызывается из обработчика сообщений. - person Roel; 23.07.2009
comment
вызывать afx_msg как функцию? хммм ... это не сработает, если вы вызываете его из другого класса. Вы обязательно получите ошибку ... - person Owen; 27.07.2009
comment
Пожалуйста, укажите, какую именно ошибку вы получаете. Функции, объявленные с помощью afx_msg перед ними являются обычными функциями, вы не называете их «как функции» - они являются функциями. afx_msg даже ничего не делает в последних версиях MFC (которые вы должны использовать, поскольку используете Feature Pack). afx_msg - это пустой #define, который "удаляется" препроцессором. Пока ваша функция является общедоступной, вы можете вызывать ее откуда угодно (очевидно, вы должны вызывать ее с правильными аргументами, но обработчики сообщений, подобные вашему, не принимают аргументов). - person Roel; 28.07.2009

Я не понимаю, в чем твоя проблема. Просто имейте класс, производный от CMFCPropertyGrid, добавьте к нему общедоступную функцию-член, чтобы обновить его данные с одним параметром. Вызовите эту функцию из окна проводника файлов, указав в качестве параметра выбранный элемент.

Может быть, вы ошиблись при выборе обработки того факта, что пользователь меняет выбранный пункт? Я не знаю, какой класс является вашим элементом управления «файловым проводником», но я предлагаю вам использовать что-то, что связано с «Элемент изменен» вместо «Щелкнуть» или «LButton», поскольку выбранный элемент может измениться другими способами, а именно клавиши со стрелками!

person sergiol    schedule 19.02.2016