ComboBox поиска на тулбаре
От: Kernel0  
Дата: 24.03.14 06:49
Оценка:
Может кто-нибудь объяснить пункт "Creating the Find Control":
http://msdn.microsoft.com/en-us/library/bb983718.aspx
В частности проблема в том, что не вызываются PreTranslateMessage для CFindComboBox. Вообще никакие события не вызываются. Лучше всего было бы, если бы кто-то смог набросать весь код по этому гайду. При необходимости могу выдать свою версию. Заранее спасибо.
Re: ComboBox поиска на тулбаре
От: AlexGin Беларусь  
Дата: 24.03.14 11:42
Оценка:
Здравствуйте, Kernel0, Вы писали:

K>Может кто-нибудь объяснить пункт "Creating the Find Control":

K>http://msdn.microsoft.com/en-us/library/bb983718.aspx
K>В частности проблема в том, что не вызываются PreTranslateMessage для CFindComboBox. Вообще никакие события не вызываются. Лучше всего было бы, если бы кто-то смог набросать весь код по этому гайду. При необходимости могу выдать свою версию. Заранее спасибо.

Столкнулся я с этой проблемой.
ИМХО — тут баги M$

Решил ее таким образом:
Сделал (в моем проекте) класс-наследник от CMFCToolBar, в нем я создал таймер, по которому опрашивается этот самый ComboBox. Если были изменения, то посылается сообщение головному окну.

З.Ы. Согласен, с критикой, что решение некрасивое. Зато — работоспособное
Никакими другими способами решить проблему, к сожалению, не удалось.
Re: ComboBox поиска на тулбаре
От: Carc Россия https://vk.com/gosha_mazov
Дата: 24.03.14 11:52
Оценка:
Здравствуйте, Kernel0, Вы писали:

K>Может кто-нибудь объяснить пункт "Creating the Find Control":

K>http://msdn.microsoft.com/en-us/library/bb983718.aspx
K>В частности проблема в том, что не вызываются PreTranslateMessage для CFindComboBox. Вообще никакие события не вызываются. Лучше всего было бы, если бы кто-то смог набросать весь код по этому гайду. При необходимости могу выдать свою версию. Заранее спасибо.
Курить статью Блуждания по лабиринту маршрутизации сообщений и команд в MFC
Автор(ы): Поль ДиЛашиа (Paul DiLascia)

В статье даётся исчерпывающее описание механизмов маршрутизации сообщений и команд в MFC. Автор прослеживает путь сообщения с момента получения и до попадания в соответствующий обработчик, объясняет механизм работы карт сообщений, обработку команд и уведомлений, а также обновление объектов пользовательского интерфейса при помощи сообщений CN_UPDATE_COMMAND_UI. Прочитав статью, вы сможете решить практически любую проблему, связанную с обработкой сообщений в MFC.
и все заработает. Проверено.
Aml Pages Home
Re[2]: ComboBox поиска на тулбаре
От: Kernel0  
Дата: 24.03.14 11:56
Оценка:
Здравствуйте, Carc, Вы писали:

C>Здравствуйте, Kernel0, Вы писали:


K>>Может кто-нибудь объяснить пункт "Creating the Find Control":

K>>http://msdn.microsoft.com/en-us/library/bb983718.aspx
K>>В частности проблема в том, что не вызываются PreTranslateMessage для CFindComboBox. Вообще никакие события не вызываются. Лучше всего было бы, если бы кто-то смог набросать весь код по этому гайду. При необходимости могу выдать свою версию. Заранее спасибо.
C>Курить статью Блуждания по лабиринту маршрутизации сообщений и команд в MFC
Автор(ы): Поль ДиЛашиа (Paul DiLascia)

В статье даётся исчерпывающее описание механизмов маршрутизации сообщений и команд в MFC. Автор прослеживает путь сообщения с момента получения и до попадания в соответствующий обработчик, объясняет механизм работы карт сообщений, обработку команд и уведомлений, а также обновление объектов пользовательского интерфейса при помощи сообщений CN_UPDATE_COMMAND_UI. Прочитав статью, вы сможете решить практически любую проблему, связанную с обработкой сообщений в MFC.
и все заработает. Проверено.


Курить статью? Значит гайд написан неправильно? Вы проверяли данную статью конкретно под эту задачу?
Re[3]: ComboBox поиска на тулбаре
От: Carc Россия https://vk.com/gosha_mazov
Дата: 24.03.14 12:04
Оценка: -1
Здравствуйте, Kernel0, Вы писали:

K>Здравствуйте, Carc, Вы писали:


C>>Здравствуйте, Kernel0, Вы писали:


K>>>Может кто-нибудь объяснить пункт "Creating the Find Control":

K>>>http://msdn.microsoft.com/en-us/library/bb983718.aspx
K>>>В частности проблема в том, что не вызываются PreTranslateMessage для CFindComboBox. Вообще никакие события не вызываются. Лучше всего было бы, если бы кто-то смог набросать весь код по этому гайду. При необходимости могу выдать свою версию. Заранее спасибо.
C>>Курить статью Блуждания по лабиринту маршрутизации сообщений и команд в MFC
Автор(ы): Поль ДиЛашиа (Paul DiLascia)

В статье даётся исчерпывающее описание механизмов маршрутизации сообщений и команд в MFC. Автор прослеживает путь сообщения с момента получения и до попадания в соответствующий обработчик, объясняет механизм работы карт сообщений, обработку команд и уведомлений, а также обновление объектов пользовательского интерфейса при помощи сообщений CN_UPDATE_COMMAND_UI. Прочитав статью, вы сможете решить практически любую проблему, связанную с обработкой сообщений в MFC.
и все заработает. Проверено.


K>Курить статью? Значит гайд написан неправильно? Вы проверяли данную статью конкретно под эту задачу?

Я новым мфсями сори, не пользовался. Возможно я поторопился и упустил из виду новый CMFCToolBar — он же реально другой. Но по этой статье я много раз лично приделывал маршрутизацию к собственным левым наследникам от CControlBar, и именно по этой статье, но для старой MFC (без этого нового, прикупленого микрософтом codepack`а с модными контролами). Так что думаю статья в любом случае полезна будет.

Внимательно бы надо посмотреть следующее: переопределить где то у себя OnCmdMsg (либо в своем CMFCToolBar-наследнике, либо если возможно в наследнике CFindComboBox) и посмотреть придирчиво вызывается ли она вообще, и или иногда (ну к примеру когда фокус на этом списке). Обычно такое копание в нужном направлении приводит.
Aml Pages Home
Re[4]: ComboBox поиска на тулбаре
От: AlexGin Беларусь  
Дата: 24.03.14 15:41
Оценка:
Здравствуйте, Carc, Вы писали:

C>Я новым мфсями сори, не пользовался. Возможно я поторопился и упустил из виду новый CMFCToolBar — он же реально другой. Но по этой статье я много раз лично приделывал маршрутизацию к собственным левым наследникам от CControlBar, и именно по этой статье, но для старой MFC (без этого нового, прикупленого микрософтом codepack`а с модными контролами). Так что думаю статья в любом случае полезна будет.

Я пользуюсь новыми мфсями уже более двух лет. Проблема, которую описал ТС, имеется. Именно тут авторы что-то недосмотрели. Мой вариант workaround-а я указывал выше. Пробовал по-разному, однако удалось только то брутальное решение, которое я применил.

Буду рад, если ты предложишь что-то более удачное. Отсылка к "букварям" по MFC и WinAPI не в счет

Кстати, насчет CControlBar — не в тему, так как он остался за бортом MFC Feature Pack (новый пакет контролов, который ты называешь "новым мфсями"). Этот MFC Feature Pack, ИМХО, сделан по принципу и подобию BCGControlBar Library.

C>Внимательно бы надо посмотреть следующее: переопределить где то у себя OnCmdMsg (либо в своем CMFCToolBar-наследнике, либо если возможно в наследнике CFindComboBox) и посмотреть придирчиво вызывается ли она вообще, и или иногда (ну к примеру когда фокус на этом списке). Обычно такое копание в нужном направлении приводит.

Так как OnCmdMsg имеется в потомках CCmdTarget, а здесь идет речь о CMFCToolBarComboBoxButton (или его потомках), которые не являются потомками от CCmdTarget, то тут, к сожалению, переопределение виртуального метода OnCmdMsg нам ничем не поможет.
Re[5]: ComboBox поиска на тулбаре
От: Kernel0  
Дата: 27.03.14 10:23
Оценка:
В общем, я воспользовался PreTranslateMessage для тулбара (наследника CMFCToolBar), на который ставится кнопка — через него проходят нажатия клавиш комбо-бокса. Сделал через него горячие клавиши Копировать-Вставить и т.п. с клавиатуры. Заодно отпала необходимость в CFindComboBox — используется встроенный в CMFCToolBarComboBoxButton комбо-бокс.
Re: ComboBox поиска на тулбаре
От: rus blood Россия  
Дата: 08.04.14 14:04
Оценка:
Здравствуйте, Kernel0, Вы писали:

K>Может кто-нибудь объяснить пункт "Creating the Find Control":

K>http://msdn.microsoft.com/en-us/library/bb983718.aspx
K>В частности проблема в том, что не вызываются PreTranslateMessage для CFindComboBox. Вообще никакие события не вызываются. Лучше всего было бы, если бы кто-то смог набросать весь код по этому гайду. При необходимости могу выдать свою версию. Заранее спасибо.

Там в описании ошибка.
Метод CreateCombo класса CFindComboButton должен вернуть инстанс класса CFindComboBox.
Сам класс CMFCToolBarComboBoxButton не является UI-ным, он просто содержит параметры для создания и управления комбиком.
После того, как объект этого класса будет "уложен" на тулбар (ReplaceButton), тулбар создаст инстанс CFindComboBox через вызов CreateCombo, и далее этот объект начнет получать PreTranslateMessage.
Имею скафандр — готов путешествовать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.