|
|
| |
Пост N: 43
Зарегистрирован: 27.08.23
|
|
Отправлено: 01.03.26 13:29. Заголовок: Проблем в HWGUi - WM_LBUTTONDOWN и WM_LBUTTONUP
Операционная система Windows 10 Pro 22H2 Harbour 3.4.0dev (669f310ff4) (2018-04-28 17:24) HWGui 2.23 b7 Я разрабатываю одну программу и столкнулся с проблемой, которую постараюсь описать. Речь идет о программе для поиска кратчайших путей от начального узла до всех остальных (известный алгоритм Дейкстры). Создаётся главное окно: INIT WINDOW oWnd MAIN TITLE "Дијкстра алгоритам - мрежа" AT 0, 0 SIZE 1300, 780 FONT oFont ; STYLE WS_OVERLAPPEDWINDOW + WS_CLIPCHILDREN + WS_CLIPSIBLINGS ; ON INIT {|| Main_OnSize( oWnd, 0, 0, oPanelLeft, oBoard ) } ; ON OTHER MESSAGES {|o, msg, wParam, lParam| Main_OnOther_Wheel( o, msg, wParam, lParam, oBoard ) } Окно разделено на две части, левая часть — это: // левая панель @ 10, 10 PANEL oPanelLeft OF oWnd ID 4001 SIZE 520, 710 oWnd:bSize := {|o, w, h| Main_OnSize( o, w, h, oPanelLeft, oBoard ) } Затем следуют несколько контролов (BUTTON, CHECKBOX, LISTBOX и SAY, все они «OF oPanelLeft»), а правая часть — это: // справа: область рисования (HBoard) @ 540, 10 BOARD oBoard OF oWnd ID 3001 SIZE 740, 670 ; BACKCOLOR CLR_WHITE ; ON PAINT {|o, hDC| Board_Paint( o, hDC ) } oWnd:bSize := {|o, w, h| Main_OnSize( o, w, h, oPanelLeft, oBoard ) } // перехватываю mouse для pan/zoom/hit-test через bOther oBoard:bOther := {|o, msg, wParam, lParam| Board_OnOther( o, msg, wParam, lParam ) } В правой части (HBoard) я планировал графически отобразить сеть с узлами и участками. Сеть должна масштабироваться и перемещаться по BOARD. Проблема заключается в том, что функция Board_OnOther( o, msg, wParam, lParam ) «перехватывает» только msg == WM_MOUSEWHEEL, а сообщения WM_MOUSEMOVE, WM_LBUTTONDOWN и WM_LBUTTONUP не замечает, игнорирует. Также функция Main_OnOther_Wheel( o, msg, wParam, lParam, oBoard ) «перехватывает» msg == WM_MOUSEWHEEL и msg == WM_MOUSEMOVE, а WM_LBUTTONDOWN и WM_LBUTTONUP не замечает, игнорирует. Я не понимаю, почему так происходит, ведь в одном примере для HWGui я нашёл похожую ситуацию, только там главное окно без добавленных контролов, и функция ON OTHER MESSAGES { | a, b, c, d | OnOtherMessages( a, b, c, d ) } «видит» все сообщения WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE и WM_MOUSEWHEEL (я проверил, протестировал — и это работает корректно). Поскольку мне необходимо, чтобы мои функции, указанные выше, «перехватывали» все сообщения типа WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE и WM_MOUSEWHEEL, существует ли способ реализовать это? Может ли кто-нибудь помочь мне в решении данной проблемы?
|