Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > Где находиться функция WindowProc? |
Автор: KaraKum 26.12.2007, 16:40 |
Где находится функция WindowProc в приложении, созданном на основе MFC? |
Автор: baldina 26.12.2007, 17:04 |
AfxWndProc() - для любого CWnd для переопределения функционала - virtual CWnd::WindowProc() и некоторые другие для обработки конкретных сообщений (например OnPaint()) |
Автор: KaraKum 26.12.2007, 17:15 |
Я имею в виду где её месторасположение в исполняемых файлах? Нужно найти её для редактирования и добавления обработки клавиш. |
Автор: baldina 26.12.2007, 17:45 | ||
Она внутри MFC. А тебе надо в классе окна добавить обработчик OnKeyDown и отредактировать MESSAGE_MAP
Добавлено через 1 минуту и 23 секунды Вообще студия это сама за тебя сделает, если поработаешь с окошком Properties |
Автор: KaraKum 26.12.2007, 21:02 | ||
А что вот со всем этим делать?
Скучаю по привычному switch (messsage) оператору... |
Автор: baldina 26.12.2007, 21:44 | ||||||
Курить доки по MFC ![]()
а чего по нему скучать? он здесь - фактически мы внутри case WM_KEYDOWN потомучто
следовательно nChar - wParam nRepCnt - LO(lParam) nFlags - HI(lParam) но имена nChar и nRepCnt как-то понятнее выглядят, не правда ли? |
Автор: KaraKum 27.12.2007, 09:05 | ||
О, теперь работает! ![]() Только вот не полностью... Я для проверки создал кнопку, которая отправляет сообщение о нажатии кнопки "F9" и функцию обработки сообщения нажатия этой кнопки - всё работает, но само нажатие клавиши "F9" не обрабатывается. Почему?. Вот код:
И ещё вопрос: как вызвать функцию PostMessage() с четырьма параметрами, первый которой (дополнительный) - указатель на окно, которому отправляется сообщение. А то по умолчанию вызывается функция с тремя параметрами (без указателя). |
Автор: Andrey44 27.12.2007, 09:20 |
::PostMessage(..............) ![]() |
Автор: baldina 27.12.2007, 10:18 | ||
должно работать. для точного ответа надо знать базовый класс CWindow, еще лучше код глянуть. пока могу только предположить, что у тебя от CDialog наследуется. Туда нажатия клавиш не шлются (и дело тут не в MFC, а апишной функции CreateDialog). В диалоге нажатия клавиш получает не сам диалог, а контролы, размещенные в нем. Добавлено через 1 минуту и 33 секунды кстати, а почему VK_F9 не используешь? Оно конечно 0х78, но все-таки... |
Автор: KaraKum 27.12.2007, 10:50 | ||||||||
Вот-вот. А как вызвать нужную функцию?? ![]()
А как сделать так, чтобы сообщения отсылались окну?
Учту, спасибо ![]() Ещё проблема ![]()
Координаты расчитаны так, что указатель должен указывать на кнопку, но сообщение не работает. Это, вероятно, потому что сообщения отправляются не окну? И если да, то подскажите как отправить их окну? |
Автор: baldina 27.12.2007, 10:57 | ||
1. Не использовать CreateDialog. Т.е. наследовать от CWnd а не CDialog 2. Разместить в диалоге custom control размером в диалог, в нем и ловить. А что вообще изобретается? Добавлено через 4 минуты и 54 секунды OnBnClickedButtonDo - аналогично. ты бы почитал http://msdn2.microsoft.com/en-us/library/ms645469(VS.85).aspx, http://msdn2.microsoft.com/en-us/library/132s802t(VS.80).aspx и вокруг. |
Автор: Andrey44 27.12.2007, 11:14 | ||
KaraKum, именно ::PostMessage(HWND, UINT, param, param). ::<-область разрешения видимости. Это значит ты используешь глобальную функцию API , а не из класса MFC |
Автор: KaraKum 27.12.2007, 11:29 | ||||||
Про контрол размером с диалог - смешно ![]() Нужно как-то отправить к уже созданной запущеной программе сообщение о клике мыши с определёнными координатами. Знаю с помощью какой функции это сделать, но вместо неё вызывается другая (PostMessage() с тремя параметрами, а надо с четырьмя). Подскажите как вызвать нужную? Добавлено @ 11:32
А как использовать из MFC? |
Автор: baldina 27.12.2007, 12:05 |
Earnest как всегда права, а я туплю ![]() |
Автор: KaraKum 27.12.2007, 17:01 |
Как вызвать MFC PostMessage() функцию я узнал. Всем спасибо! |