| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Вопрос на соображалку |
| Автор: Rapalex 8.6.2006, 14:55 |
| У меня изменённый каркас MDI, я его сам уродовал, и получилось довольно сносно, если не учесть что там многое до меня было не слишком коасиво У меня получается "проект ориентированное" приложение, в том смысле что есть причяленый к MainFrame ControlBar в котором есть список, и по двойному шелчку открывается ChildFarme с нормальным видом который отображает только определённую часть документа. Следовательно документ есть а дочерних фреймов нет. И сегодня возник вопрос о перенаправлении командных сообщений в этот причяленый список (это для того чтоб меншка работала, с акселератором). С поставленной задачей на 100% справиться не смог, так как не смог определить кому отправлять: - Причаленному ControlBar - Активному ChildFrame Обычно делают так: один не обработал другому пошлём. Но у меня на одну и туже менюшку разные действия должны произходить когда юзер в списке, и когда в ChildFrame! ВОПРОС: Так как мне определить где находится пользователь? Буду рад услышать все высказывания, можно и матерные лиш бы для пользы дела! Шутка! |
| Автор: Earnest 8.6.2006, 15:34 |
| А как насчет GetFocus? Неужели не поможет? |
| Автор: Rapalex 8.6.2006, 15:52 |
| Попробывал оно возвращяет контролы, в моём случае ListCtrl а у меня их 4 на 3-х вкладках, а если исходить из того что появятся новые и новые контролы то этот вариант не идеален. Но спасибо! Хорошая идея. |
| Автор: Rapalex 8.6.2006, 16:36 |
| Сделал так: При ришении кому отправить сообщение, делаю GetFocus смотрю RunTimeClass и если это не класс моего отображения в ChildFrame отправляю пристыкованому окну. НО. оно не работает я смотру в дебагере сообщение есть (в меседж маме прописано) и не отрабатывает И что делать? Я такого не видел... |
| Автор: Rapalex 9.6.2006, 12:23 | ||
Код в главной раме:
За IsChild спасибо, честно, не знал... Внешний вид причаленого окна прикрепил. Из него видно что вложенасть там проста зверская: В окно вписан фрейм, в него вью, в него Проперти щит, в него 3 вкладки, в первую вкладку, врейм с 3-я форм вью, и в каждом из них чтото есть... Поетому я передаю сообщение дальше а там разбираюся в какую вкладку пойдёт. Вообще такая реализация мне понравилась, может есть какиенибудь пожелания. Но у меня тут осталась проблемма, сообщение доходит до нужного вида в месадж мапе всё прописано, но она не срабатывает и какимто образом стразу приходит в вид в чилдфрейме, страным способом, щяс сижу разбираюсь. Добавлено @ 12:29 У меня что-то подозрения на функцию OnCommand, я не знаю какую роль создатели MFC отвели ей? |
| Автор: Earnest 9.6.2006, 14:50 | ||
Не совсем понятно, доходит оно куда надо или не доходит... Из твоего кода следует, что, даже если фокус находится с потомке контрол-бара, то сообщение может отправиться в chilld-frame, если никто его никто не обработал (в первом if возвращается false)... Это так и задумано? Кстати, false может вернуться даже в том случае, если обработчик есть: например в виде команды COMMAND_EX: вернул там false и привет... Может, в этом дело? А вообще отследить несложно: если команда попадает куда надо, а потом - куда не надо, поставь точку прерывания на первый обработчик, и проследи какого ... А если команда не попадает, куда надо, поставь условную точку прерывания в CMainFrm::OnCmdMsg на эту команду, только отшиби апдейты (pExtra и pHandlerInfo д.б. 0), а то задолбают... |
| Автор: Rapalex 9.6.2006, 15:09 |
| Получилось. Трабыл был в том что сообщение доходило куда надо, а когда нужно было послать сообщение для выполнения (я так смутно помню, там вроде в начале посылается сообщение чтоб узнать можно ли выполнить эту команду, а после уже команда), Главная рама в OnCommand находила активный чайлд и отсылала команду ему... Ну я перегрузил, иф поставил и заработало. Спасибо!!! |