::DispatchMessage(pMsg)
От: Jukier  
Дата: 06.09.10 12:25
Оценка:
Есть класс наследник от htmlayout::event_handler.
Переопределяю virtual BOOL handle_key(HELEMENT he, KEY_PARAMS& params);

Фильтрую сообщения с помощью PreTranslateMessage(MSG* pMsg) в WTL. Вызываю ::DispatchMessage(pMsg).
Но не зависимо от того, что возвращает handle_key(), ::DispatchMessage(pMsg) возвращает 0.
Как получить мне нужное значение?
Re: ::DispatchMessage(pMsg)
От: c-smile Канада http://terrainformatica.com
Дата: 06.09.10 18:03
Оценка:
Здравствуйте, Jukier, Вы писали:

J>Есть класс наследник от htmlayout::event_handler.

J>Переопределяю virtual BOOL handle_key(HELEMENT he, KEY_PARAMS& params);

J>Фильтрую сообщения с помощью PreTranslateMessage(MSG* pMsg) в WTL. Вызываю ::DispatchMessage(pMsg).

J>Но не зависимо от того, что возвращает handle_key(), ::DispatchMessage(pMsg) возвращает 0.
J>Как получить мне нужное значение?

Я не понял вопрос если честно.

Про WM_KEYDOWN читаем:

An application should return zero if it processes this message.

Про DispatchMessage читаем:

LRESULT
The return value specifies the value returned by the window procedure.

т.е. как бы всё by design...

Ты лучше опиши задачу которую пытаешься решить — может быть другое решение.
Re[2]: ::DispatchMessage(pMsg)
От: Jukier  
Дата: 07.09.10 06:33
Оценка:
Здравствуйте, c-smile, Вы писали:

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


J>>Есть класс наследник от htmlayout::event_handler.

J>>Переопределяю virtual BOOL handle_key(HELEMENT he, KEY_PARAMS& params);

J>>Фильтрую сообщения с помощью PreTranslateMessage(MSG* pMsg) в WTL. Вызываю ::DispatchMessage(pMsg).

J>>Но не зависимо от того, что возвращает handle_key(), ::DispatchMessage(pMsg) возвращает 0.
J>>Как получить мне нужное значение?

CS>Я не понял вопрос если честно.


CS>Про WM_KEYDOWN читаем:

CS>

CS>An application should return zero if it processes this message.

CS>Про DispatchMessage читаем:
CS>

CS>LRESULT
CS>The return value specifies the value returned by the window procedure.

CS>т.е. как бы всё by design...

CS>Ты лучше опиши задачу которую пытаешься решить — может быть другое решение.



Мне надо ловить горячие клавиши. Например, по F1 вывести окно с помощью. Но в редактируемом поле, например, редактируемый combobox, этого делать не надо.
В handle_key() могу определить, где была нажата кнопка.
Мне надо, чтобы the window procedure возвращала, то, что возвращает handle_key(). А она всегда возвращает 0.
У меня:
PreTranslateMessage(MSG* pMsg)
{
::TranslateMessage(pMsg);
::DispatchMessage(pMsg);
}
Заходит в handle_key() в процессе DispatchMessage, я возвращаю значение в handle_key() (TRUE или FALSE), а DispatchMessage всегда 0.
Спасибо.
Re[3]: ::DispatchMessage(pMsg)
От: c-smile Канада http://terrainformatica.com
Дата: 07.09.10 06:49
Оценка:
J>Мне надо, чтобы the window procedure возвращала, то, что возвращает handle_key(). А она всегда возвращает 0.

Проверяю так: нажимаю F1 и проверяю что возвращает HTMLayoutProcND()
на VK_F1/WM_KEYDOWN имеем bHandled == FALSE, LRESULT == 1. Как бы все честно, нет?

А HTMLayoutProc вызывает HTMLayoutProcND и если не bHandled то return DefWindowProc(...).
Re[4]: ::DispatchMessage(pMsg)
От: Jukier  
Дата: 07.09.10 12:22
Оценка:
Здравствуйте, c-smile, Вы писали:

J>>Мне надо, чтобы the window procedure возвращала, то, что возвращает handle_key(). А она всегда возвращает 0.


CS>Проверяю так: нажимаю F1 и проверяю что возвращает HTMLayoutProcND()

CS>на VK_F1/WM_KEYDOWN имеем bHandled == FALSE, LRESULT == 1. Как бы все честно, нет?

CS>А HTMLayoutProc вызывает HTMLayoutProcND и если не bHandled то return DefWindowProc(...).


Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.