Создать сообщение WM_NCHITTEST

Я пытаюсь разрешить пользователю перемещать / изменять размер окна без полей 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

1

Решение

Вы генерируете WM_NCHITTEST но хит-тест не запускает никаких действий, потому что проверка нажатия может происходить по причинам, отличным от того, что мышь находится над окном.

Я считаю, что документированный способ начать операцию перемещения / размера заключается в использовании WM_SYSCOMMAND но я предполагаю, что это не то, что вам нужно, потому что это то же самое, что и действие из системного меню, где вы должны выбрать сторону перед перемещением / размером.

Если вы можете обрабатывать сообщения, то вы можете вернуться HTCLIENT в ответ на WM_NCHITTEST или как хак вы можете сделать это:

PostMessage(getBrowserHwnd(), WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(cursorPos.x, cursorPos.y)); // cursorPos should be screen coordinates
1

Другие решения

Других решений пока нет …