У меня есть диалоговое окно, которое создается с помощью CreateDialog()
.
В этом диалоговом окне находится элемент управления для редактирования текста, который создается автоматически при вызове CreateDialog()
, однако я не могу поймать OnMouseMove
сообщений для него - только его родительское окно (элементов управления, а не диалоговое окно). CreateDialog()
позволяет вам только установить функцию процедуры для основного диалога (не для подобъектов, как элементы управления редактирования), и если я ловлю там сообщения OnMouseMove
, они запускаются только для движения мыши в самом главном диалоге (где угодно здесь нет элемента управления, например кнопки, поля для редактирования текста и т. д. c).
Если не создавать окно вручную с помощью CreateWindowEx()
(и всех подчиненных объектов), есть ли способ перехватить сообщения OnMouseMove
, связанные с указанным c элементом управления редактированием текста, по его идентификатору или чему-то еще? ? У меня есть дескриптор, извлеченный с помощью GetDlgItem()
.
. В конечном итоге я пытаюсь выполнить sh, чтобы прочитать текст под курсором мыши и отобразить соответствующую подсказку, если слово распознано / сопоставлено, и Я определенно открыт для других альтернатив, если у вас есть какие-либо идеи!
Вот базовый c код:
Создание диалога с использованием шаблона DBG_DLG
для определения элементов управления
hDbg = CreateDialog(hCurInst, TEXT("DBG_DLG"), 0, DbgDlgProc);
Шаблон DBG_DLG
определен в файле .rc
проекта. Я не смог найти простой способ вставить этот код здесь, но у него есть определенный элемент управления для редактирования текста, который я пытаюсь поймать с идентификатором ID_OP_ED
.
Соответствующий код из DbgDlgProc()
, который делает НЕ работает, а только перехватывает сообщения, связанные с основным диалогом, а не сами элементы управления. При наведении курсора на элементы управления эта процедура не перехватывает сообщения.
BOOL CALLBACK DbgDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
switch(message)
{
case WM_INITDIALOG:
return TRUE;
case WM_MOUSEMOVE:
OnMouseMove(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), (DWORD)wParam);
return FALSE;