cef3嵌入win32无标题栏窗口,怎么来移动这个cef窗口?

发布于 2021-11-28 14:08:45 字数 613 浏览 877 评论 4

有个一个win32的窗口,以WS_POPUPWINDOW形式呈现,然后在这个窗口里面嵌入了一个cef3的子窗口,现在不知道怎么来移动这个无标题栏的窗口了。

RECT rect;
GetClientRect(hWnd, &rect);
CefWindowInfo windowInfo;
windowInfo.SetAsChild(hWnd,rect);
g_handler = new CefClientHandler();
g_handler->SetMainHwnd(hWnd);
CefBrowserSettings settings;
CefBrowserHost::CreateBrowserSync(windowInfo,g_handler.get(), url, settings, NULL);


如下图,我怎么将红框里面的这个无标题栏窗口移动呢?我是新手,很多不懂,但工作又要用到,所以希望能给出代码和demo。谢谢。


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

想挽留 2021-11-30 05:36:09

CEF无法返回WM_LBUTTONUP。。

飘然心甜 2021-11-30 04:26:30

你好,我在CEF中的OnPreKeyEvent中可以捕获键盘消息,但嵌入MFC窗口后按ESC键MFC窗口无法响应关闭操作,请问怎么将CEF中的键盘消息传递至其所在的MFC窗口呢?我尝试使用PostMessage等都想不通。

如此安好 2021-11-30 01:31:32

还有一种传统的办法,就是自己去处理ON_WM_LBUTTONDOWN、ON_WM_LBUTTONUP、ON_WM_MOUSEMOVE消息,这这些消息中判断鼠标拖拽逻辑:当按住鼠标左键不放并移动鼠标的时候去MoveWindow。

但是这样一来必须要在CefClientHandler中去截获这些鼠标消息,有一种方法是设置鼠标钩子:

HHOOK g_hHook = NULL;
CefClientHandler *g_pHandler = NULL;
void CefClientHandler::OnAfterCreated(CefRefPtr<CefBrowser> browser)
{
	REQUIRE_UI_THREAD();

	AutoLock lock_scope(this);
	if (!m_Browser.get())
	{
		g_pHandler = this;
		g_hHook=SetWindowsHookEx(WH_MOUSE,MouseProc,0,GetCurrentThreadId());
	}
}

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	MOUSEHOOKSTRUCT *pMs = (MOUSEHOOKSTRUCT *)lParam;
	HWND hWnd = ::GetParent(pMs->hwnd);
	if(g_pHandler && hWnd == g_pHandler->GetBrowser()->GetHost()->GetWindowHandle())
	{
		switch(wParam)
		{
		case WM_LBUTTONDOWN:
		case WM_LBUTTONUP:
		case WM_MOUSEMOVE:
			::SendMessage(g_pHandler->GetMainHwnd(),wParam,0,(LPARAM)(&pMs->pt);
			break;
		default:
			break;
		}

		break;
	}
	return CallNextHookEx(g_hHook,nCode,wParam,lParam);
}

爱的故事 2021-11-28 20:37:51

不是那么容易,因为捕捉不到WM_NCHITTEST。
你需要给CEF打patch让BrowserWindow返回HTTRANSPARENT,然后才能在最外层窗口捕捉到WM_NCHITTEST(参考https://github.com/netease-youdao/hex)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文