![]() |
|
![]() ![]() ![]() |
|
Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
У меня изменённый каркас MDI, я его сам уродовал, и получилось довольно сносно, если не учесть что там многое до меня было не слишком коасиво
![]() У меня получается "проект ориентированное" приложение, в том смысле что есть причяленый к MainFrame ControlBar в котором есть список, и по двойному шелчку открывается ChildFarme с нормальным видом который отображает только определённую часть документа. Следовательно документ есть а дочерних фреймов нет. И сегодня возник вопрос о перенаправлении командных сообщений в этот причяленый список (это для того чтоб меншка работала, с акселератором). С поставленной задачей на 100% справиться не смог, так как не смог определить кому отправлять: - Причаленному ControlBar - Активному ChildFrame Обычно делают так: один не обработал другому пошлём. Но у меня на одну и туже менюшку разные действия должны произходить когда юзер в списке, и когда в ChildFrame! ВОПРОС: Так как мне определить где находится пользователь? Буду рад услышать все высказывания, можно и матерные лиш бы для пользы дела! ![]() Шутка! -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
А как насчет GetFocus? Неужели не поможет?
-------------------- ... |
|||
|
||||
Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Попробывал оно возвращяет контролы, в моём случае ListCtrl а у меня их 4 на 3-х вкладках, а если исходить из того что появятся новые и новые контролы то этот вариант не идеален.
Но спасибо! Хорошая идея. -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Сделал так:
При ришении кому отправить сообщение, делаю GetFocus смотрю RunTimeClass и если это не класс моего отображения в ChildFrame отправляю пристыкованому окну. НО. оно не работает я смотру в дебагере сообщение есть (в меседж маме прописано) и не отрабатывает ![]() И что делать? Я такого не видел... ![]() -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Конечно, нужно не прямо GetFocus использовать, а сначала получить фокус, а потом спросить у ControlBar IsChild (pFocus), тоже самое - у ChildFrame.
Чей чайлд в фокусе, туда и слать. Предваряя возможные сомнения, поясню, что IsChild говорит да не только в случае прямого родителя, но и дедушки до любого колена... Добавлено @ 16:42
Информации недостаточно. Главное помни, что чудес не бывает: у всего есть причина. Это очень помогает, несмотря на банальность. Можешь выложить часть кода, но сегодня не обещаю (сейчас ухожу). -------------------- ... |
|||
|
||||
Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Код в главной раме:
За IsChild спасибо, честно, не знал... Внешний вид причаленого окна прикрепил. Из него видно что вложенасть там проста зверская: В окно вписан фрейм, в него вью, в него Проперти щит, в него 3 вкладки, в первую вкладку, врейм с 3-я форм вью, и в каждом из них чтото есть... Поетому я передаю сообщение дальше а там разбираюся в какую вкладку пойдёт. Вообще такая реализация мне понравилась, может есть какиенибудь пожелания. Но у меня тут осталась проблемма, сообщение доходит до нужного вида в месадж мапе всё прописано, но она не срабатывает и какимто образом стразу приходит в вид в чилдфрейме, страным способом, щяс сижу разбираюсь. Добавлено @ 12:29 У меня что-то подозрения на функцию OnCommand, я не знаю какую роль создатели MFC отвели ей? Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Не совсем понятно, доходит оно куда надо или не доходит... Из твоего кода следует, что, даже если фокус находится с потомке контрол-бара, то сообщение может отправиться в chilld-frame, если никто его никто не обработал (в первом if возвращается false)... Это так и задумано? Кстати, false может вернуться даже в том случае, если обработчик есть: например в виде команды COMMAND_EX: вернул там false и привет... Может, в этом дело? А вообще отследить несложно: если команда попадает куда надо, а потом - куда не надо, поставь точку прерывания на первый обработчик, и проследи какого ... А если команда не попадает, куда надо, поставь условную точку прерывания в CMainFrm::OnCmdMsg на эту команду, только отшиби апдейты (pExtra и pHandlerInfo д.б. 0), а то задолбают... Это сообщение отредактировал(а) Earnest - 9.6.2006, 14:52 -------------------- ... |
|||
|
||||
Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Получилось.
Трабыл был в том что сообщение доходило куда надо, а когда нужно было послать сообщение для выполнения (я так смутно помню, там вроде в начале посылается сообщение чтоб узнать можно ли выполнить эту команду, а после уже команда), Главная рама в OnCommand находила активный чайлд и отсылала команду ему... Ну я перегрузил, иф поставил и заработало. Спасибо!!! ![]() -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |