生成WM_NCHITTEST消息

时间:2018-02-27 23:25:04

标签: c++ winapi chromium-embedded hittest borderless

我试图允许用户移动/调整CEF无边界窗口(使用WS_POPUP标志创建)。

鼠标位置在CEF浏览器中捕获(使用Javascript)并调用C ++回调。然后,我通过IPC从C ++回调向CEF浏览器进程发送消息(例如,该消息可以包含HTRIGHT)。 最后一步是移动或调整浏览器的大小。 我想生成WM_NCHITTEST消息,以便允许窗口移动/调整大小。

我试着这样做:

PostMessage(getBrowserHwnd(), WM_NCHITTEST, 0, MAKELPARAM(cursorPos.x, cursorPos.y));

但当然,它不起作用。

所以我的问题是:有没有办法生成WM_NCHITTEST消息? CEF不允许我访问窗口的客户区域,因此我的窗口过程不会收到任何鼠标事件。

非常感谢任何帮助。

winapiwrapper

1 个答案:

答案 0 :(得分:1)

您正在生成WM_NCHITTEST,但点击测试无法启动任何操作,因为hit-testing can happen for reasons other than the mouse being over your window

我认为开始移动/大小操作的文档化方法是使用WM_SYSCOMMAND,但我猜测这不是你所追求的,因为这与系统菜单中的操作相同你必须在移动/选择尺寸之前选择侧面。

如果您可以处理消息,那么您可以返回HTCLIENT以回复WM_NCHITTEST,或者作为黑客可以执行此操作:

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