Вопрос № 74445: Здравствуйте.
Использую диалог, как основное окно программы. Как нажатый ТАБ в расположенном на диалоге rich rdit'е передать ему? В справке написано, что сообщение WM_GETDLGCODE посылается контролу, и есть возможность, возвратив соответствующее з...
Вопрос № 74.445
Здравствуйте.
Использую диалог, как основное окно программы. Как нажатый ТАБ в расположенном на диалоге rich rdit'е передать ему? В справке написано, что сообщение WM_GETDLGCODE посылается контролу, и есть возможность, возвратив соответствующее значение (DLGC_WANTTAB), препятствовать изменению фокуса на следующий элемент диалога. Но как и где обрабатываются сообщения контролам? Ни разу не приходилось этого делать, работал только с оконными процедурами. Думаю, можно воспользоваться хуком на сообщения, но это не желательно.
Или же есть другие способы "нарисовать" ТАБ в edit'e по нажатию ТАБа? К слову хук на клавиатуру в программе предусмотрен, можно там перехватить, но что послать rich edit'у?
Спасибо.
Отправлен: 06.02.2007, 18:02
Вопрос задал: Vanes (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Tek
Здравствуйте, Vanes!
На мой взгляд в случае необходимости обрабатывать сообщения контролу наилучшим выходом будет подмена оконной процедуры контрола (ведь контрол это тоже окно).
Осуществляется следующим образом:
1. Описываем новую оконную процедуру:
LONG WINAPI NewWndProc(HWND, UINT, WPARAM, LPARAM)
2. Подмена процедуры, запоминание указателя на стандартную
WNDPROC lpfnWndProc = (WNDPROC)SetWindowLong(hwnd, GWL_WNDPROC, (LONG)NewWndProc)
3. В собственной оконной процедуре, вместо DefWindowProc используем CallWindowProc(lpfnWndProc , hwnd, msg, wparam, lparam)
Тогда вы в этой подменной процедуре сможете обрабатывать нужные сообщения, а не нужные отсылать в стандартную.
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 9-ый класс)
Ответ отправлен: 07.02.2007, 09:41 Оценка за ответ: 5 Комментарий оценки: Благодарю. Работает. Использовал первый вариант решения.