|
|
|
KaraKum |
|
|||
Опытный Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Где находится функция WindowProc в приложении, созданном на основе MFC?
|
|||
|
||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
AfxWndProc() - для любого CWnd
для переопределения функционала - virtual CWnd::WindowProc() и некоторые другие для обработки конкретных сообщений (например OnPaint()) |
|||
|
||||
KaraKum |
|
|||
Опытный Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Я имею в виду где её месторасположение в исполняемых файлах? Нужно найти её для редактирования и добавления обработки клавиш.
|
|||
|
||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
Она внутри MFC.
А тебе надо в классе окна добавить обработчик OnKeyDown и отредактировать MESSAGE_MAP
Добавлено через 1 минуту и 23 секунды Вообще студия это сама за тебя сделает, если поработаешь с окошком Properties |
|||
|
||||
KaraKum |
|
|||
Опытный Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
А что вот со всем этим делать?
Скучаю по привычному switch (messsage) оператору... |
|||
|
||||
baldina |
|
||||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
Курить доки по MFC
а чего по нему скучать? он здесь - фактически мы внутри case WM_KEYDOWN потомучто
следовательно nChar - wParam nRepCnt - LO(lParam) nFlags - HI(lParam) но имена nChar и nRepCnt как-то понятнее выглядят, не правда ли? |
||||||
|
|||||||
KaraKum |
|
|||
Опытный Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
О, теперь работает!
Только вот не полностью... Я для проверки создал кнопку, которая отправляет сообщение о нажатии кнопки "F9" и функцию обработки сообщения нажатия этой кнопки - всё работает, но само нажатие клавиши "F9" не обрабатывается. Почему?. Вот код:
И ещё вопрос: как вызвать функцию PostMessage() с четырьма параметрами, первый которой (дополнительный) - указатель на окно, которому отправляется сообщение. А то по умолчанию вызывается функция с тремя параметрами (без указателя). Это сообщение отредактировал(а) KaraKum - 27.12.2007, 09:06 |
|||
|
||||
Andrey44 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
::PostMessage(..............) вызывается апишная функция
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
должно работать. для точного ответа надо знать базовый класс CWindow, еще лучше код глянуть. пока могу только предположить, что у тебя от CDialog наследуется. Туда нажатия клавиш не шлются (и дело тут не в MFC, а апишной функции CreateDialog). В диалоге нажатия клавиш получает не сам диалог, а контролы, размещенные в нем. Добавлено через 1 минуту и 33 секунды кстати, а почему VK_F9 не используешь? Оно конечно 0х78, но все-таки... |
|||
|
||||
KaraKum |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Вот-вот. А как вызвать нужную функцию?? .
А как сделать так, чтобы сообщения отсылались окну?
Учту, спасибо . Ещё проблема :
Координаты расчитаны так, что указатель должен указывать на кнопку, но сообщение не работает. Это, вероятно, потому что сообщения отправляются не окну? И если да, то подскажите как отправить их окну? Это сообщение отредактировал(а) KaraKum - 27.12.2007, 10:51 |
||||||||
|
|||||||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
1. Не использовать CreateDialog. Т.е. наследовать от CWnd а не CDialog 2. Разместить в диалоге custom control размером в диалог, в нем и ловить. А что вообще изобретается? Добавлено через 4 минуты и 54 секунды OnBnClickedButtonDo - аналогично. ты бы почитал тут, тут и вокруг. |
|||
|
||||
Andrey44 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
KaraKum, именно ::PostMessage(HWND, UINT, param, param). ::<-область разрешения видимости. Это значит ты используешь глобальную функцию API , а не из класса MFC -------------------- ????? ??, ??????? ?????. |
|||
|
||||
KaraKum |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Про контрол размером с диалог - смешно . Нужно как-то отправить к уже созданной запущеной программе сообщение о клике мыши с определёнными координатами. Знаю с помощью какой функции это сделать, но вместо неё вызывается другая (PostMessage() с тремя параметрами, а надо с четырьмя). Подскажите как вызвать нужную? Добавлено @ 11:32
А как использовать из MFC? Это сообщение отредактировал(а) KaraKum - 27.12.2007, 19:19 |
||||||
|
|||||||
Earnest |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Диалог, конечно, имеет свою спец. обработку сообщений - в PreTranslateMessage его она, кстати - но суть не в этом. Важно, что ки-дауны всегда посылаются окну, которое имеет фокус, а это, обычно какая-то кнопка или другое поле. Не-дочернее окно может иметь фокус, только если в нем нет ни одного поля - и нафиг оно тогда нужно. Горячие клавиши нужно обрабатывать в PreTranslateMessage. -------------------- ... |
|||
|
||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
Earnest как всегда права, а я туплю
|
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |