2

我试图允许用户移动/调整 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 不允许我访问窗口的客户区,因此我的窗口过程不会收到任何鼠标事件。

任何帮助将不胜感激。

winapi包装器

4

1 回答 1

1

您正在生成 aWM_NCHITTEST但命中测试不会启动任何操作,因为除了鼠标悬停在窗口上之外,可能会发生命中测试

我相信记录在案的开始移动/调整大小操作的方法是使用WM_SYSCOMMAND,但我猜这不是你想要的,因为这与系统菜单中的操作相同,你必须在移动/调整大小之前选择一侧.

如果您可以处理消息,那么您可以HTCLIENT响应WM_NCHITTEST或作为黑客返回,您可以这样做:

PostMessage(getBrowserHwnd(), WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(cursorPos.x, cursorPos.y)); // cursorPos should be screen coordinates
于 2018-02-28T00:06:55.640 回答