Маршрутизация WM_COMMAND в SDI-приложении (WTL)
От: Carc Россия http://www.amlpages.com/home.php
Дата: 15.06.09 23:50
Оценка:
Сгенерил визардом простенькое WTL-приложение SDI, добавил свой пункт в меню ID_MYCOMMAND, затем в карту "view"-окна добавил
BEGIN_MSG_MAP(CMyView)
COMMAND_ID_HANDLER(ID_MYCOMMAND,OnMyCommand)
END_MSG_MAP()


Указанный обработчик OnMyCommand ни при каких обстоятельствах не вызывается. Причем в CMyView::PreTranslateMessage WM_COMMAND с id=MYCOMMAND все таки мелькает, но обработчик указанный в карте сообщений не вызывается?

Что делаю не так? Куда копать?
Aml Pages Home
Re: Маршрутизация WM_COMMAND в SDI-приложении (WTL)
От: Figaro Россия  
Дата: 16.06.09 01:11
Оценка:
[skipped]


Конкретней, как класс объявлен и карта? Не Хочется гадать....
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Маршрутизация WM_COMMAND в SDI-приложении (WTL)
От: Carc Россия http://www.amlpages.com/home.php
Дата: 16.06.09 02:06
Оценка:
Здравствуйте, Figaro, Вы писали:

F>[skipped]



F>Конкретней, как класс объявлен и карта? Не Хочется гадать....

Сенкс, уже вроде разобрался...
Во фрейме было нужно добавить макрос в карту

class CMainFrame : public CFrameWindowImpl<CMainFrame>
        , public CUpdateUI<CMainFrame>
        , public CMessageFilter
        , public CIdleHandler

{
CMyView m_view;//мой "SDI-Вью"
BEGIN_MSG_MAP(CMainFrame)
...
CHAIN_MSG_MAP_MEMBER(m_view)
END_MSG_MAP()
}

Век живи — век учись! Странно что визард сам его не добавил!?!
Как-то раньше все больше окна да диалоги на WTL писал, а некое подобие Doc-View, MDI, SDI даже и не пробовал.
Но в любом случае спасибо за быстрый отклик.
Aml Pages Home
Re[3]: Маршрутизация WM_COMMAND в SDI-приложении (WTL)
От: byleas  
Дата: 16.06.09 06:33
Оценка:
Здравствуйте, Carc, Вы писали:

C>Странно что визард сам его не добавил!?!

Потому что этот идентификатор — команда меню главного окна, соответственно, и обрабатывается по умолчанию в главном окне. В дочерних обработчики контролов только.
Re[4]: Маршрутизация WM_COMMAND в SDI-приложении (WTL)
От: Carc Россия http://www.amlpages.com/home.php
Дата: 16.06.09 06:57
Оценка:
Здравствуйте, byleas, Вы писали:

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


C>>Странно что визард сам его не добавил!?!

B>Потому что этот идентификатор — команда меню главного окна, соответственно, и обрабатывается по умолчанию в главном окне. В дочерних обработчики контролов только.
Имелось ввиду почему визард не добавил CHAIN_MSG_MAP_MEMBER(memberWnd)... Именно из-за этого не приходили WM_COMMAND в дочернее окно.
Aml Pages Home
Re[5]: Маршрутизация WM_COMMAND в SDI-приложении (WTL)
От: byleas  
Дата: 16.06.09 09:09
Оценка:
Здравствуйте, Carc, Вы писали:

C>Имелось ввиду почему визард не добавил CHAIN_MSG_MAP_MEMBER(memberWnd)... Именно из-за этого не приходили WM_COMMAND в дочернее окно.

Вот я и сказал, почему. Или вы считаете, что дочернее окно "вид" должно обрабатывать команды от главного? А как быть в случае нескольких дочерних окон?
Re[6]: Маршрутизация WM_COMMAND в SDI-приложении (WTL)
От: Carc Россия http://www.amlpages.com/home.php
Дата: 16.06.09 15:02
Оценка:
Здравствуйте, byleas, Вы писали:

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


C>>Имелось ввиду почему визард не добавил CHAIN_MSG_MAP_MEMBER(memberWnd)... Именно из-за этого не приходили WM_COMMAND в дочернее окно.

B>Вот я и сказал, почему. Или вы считаете, что дочернее окно "вид" должно обрабатывать команды от главного? А как быть в случае нескольких дочерних окон?
1) Ну а что дурного то? В смысле не уловил сарказма... Т.е. как бы с одной стороны замечание верное, но с другой — если в дочернем окне прописано что-то в карте тогда пусть и обработает, ан нет дык и не будет обрабатываться? В общем, чего-то я не уловил — что не так?
2) А CHAIN_MSG_MAP_MEMBER(memberWnd) только на WM_COMMAND распространяется или нет?
Aml Pages Home
Re[7]: Маршрутизация WM_COMMAND в SDI-приложении (WTL)
От: byleas  
Дата: 16.06.09 18:53
Оценка: 4 (1)
Здравствуйте, Carc, Вы писали:

C>2) А CHAIN_MSG_MAP_MEMBER(memberWnd) только на WM_COMMAND распространяется или нет?

На все сообщения. По F12 видно (или alt+G, если ассист стоит).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.