Я пытаюсь разрешить пользователю перемещать / изменять размер окна без полей CEF (созданного с флагом WS_POPUP).
Положение мыши определяется в браузере CEF (с использованием Javascript) и вызывается обратный вызов C ++. Затем я отправляю сообщение из обратного вызова C ++ в процесс браузера CEF через IPC (например, сообщение может содержать HTRIGHT).
Последний шаг — перемещение или изменение размера браузера.
Я хотел бы генерировать сообщения WM_NCHITTEST, чтобы разрешить перемещение / изменение размера окна.
Я пытался сделать это так:
PostMessage(getBrowserHwnd(), WM_NCHITTEST, 0, MAKELPARAM(cursorPos.x, cursorPos.y));
Но, конечно, это не работает.
Итак, мой вопрос: есть ли способ генерировать сообщения WM_NCHITTEST?
CEF не позволяет мне получить доступ к клиентской области моего окна, поэтому моя оконная процедура не получает никаких событий мыши.
Любая помощь будет принята с благодарностью.
winapiwrapper
Вы генерируете WM_NCHITTEST
но хит-тест не запускает никаких действий, потому что проверка нажатия может происходить по причинам, отличным от того, что мышь находится над окном.
Я считаю, что документированный способ начать операцию перемещения / размера заключается в использовании WM_SYSCOMMAND
но я предполагаю, что это не то, что вам нужно, потому что это то же самое, что и действие из системного меню, где вы должны выбрать сторону перед перемещением / размером.
Если вы можете обрабатывать сообщения, то вы можете вернуться HTCLIENT
в ответ на WM_NCHITTEST
или как хак вы можете сделать это:
PostMessage(getBrowserHwnd(), WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(cursorPos.x, cursorPos.y)); // cursorPos should be screen coordinates
Других решений пока нет …