gpt4 book ai didi

c++ - 在弹出窗口中管理 CEF 客户区的窗口消息

转载 作者:行者123 更新时间:2023-11-30 05:45:05 27 4
gpt4 key购买 nike

我正在使用原始 WinAPI 在 C++ 上开发一个应用程序,它使用 CEF 3 来显示 UI。问题在于此 UI 嵌套在弹出窗口中(没有标题栏和关闭/最小化按钮)。所以我想让一些客户区像标题一样,用户可以拖动和移动窗口。

最简单的解决方案是子类化 CEF 窗口并“预处理”WM_NCHITTEST 消息,将其传递给父窗口(返回 HTTRANSPARENT),并在父窗口中管理窗口移动消息(在 WM_NCHITTEST 上返回 HTCAPTION,在 WM_MOVE、WM_PAINT 和其他消息)。如果我手动执行调用 CefDoMessageLoopWork 的 CEF 消息循环,这会起作用,但这会占用所有 CPU 资源。

使用多线程 CEF 消息循环是一种解决方案,但这种技术行不通。

因此,问题是:如何使用多线程 CEF 消息循环使客户区像标题一样工作,因为它使用的资源少得多?

最佳答案

设法解决了我的问题。最初的消息循环是这样的

if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
GetMessage( &msg, NULL, 0, 0 );
TranlateMessage( &msg );
DispatchMessage( &msg );
}
else
{
CefDoMessageLoopWork();
}

但是在主消息处理之前调用 CefDoMessageLoopWork() 似乎没问题,像这样:

if(GetMessage(&msg, NULL, 0, 0) > 0)
{
CefDoMessageLoopWork();
TranslateMessage(&msg);
DispatchMessage(&msg);
}

在这种情况下,CPU 使用率还可以;

关于c++ - 在弹出窗口中管理 CEF 客户区的窗口消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509546/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com