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

在弹出窗口中管理CEF客户端区域的窗口消息 我正在使用原始WiAPI开发C++上的应用程序,使用CEF 3来显示UI。问题是该UI嵌套在弹出窗口中(没有标题栏和关闭/最小化按钮)。所以我想让一些客户端区域像一个标题,用户可以拖动和移动窗口,c++,multithreading,winapi,chromium-embedded,C++,Multithreading,Winapi,Chromium Embedded,最简单的解决方案是对CEF窗口进行子类化并“预处理”WM_NCHITTEST消息,将其传递给父窗口(返回HTTRANSPARENT),并在父窗口中管理窗口移动消息(在WM_NCHITTEST上返回HTCAPTION,在WM_MOVE、WM_PAINT和其他消息上执行一些操作)。如果我手动执行CEF消息循环调用CefDoMessageLoopWork,这是可行的,但这会占用所有CPU资源 使用多线程CEF消息循环将是一个解决方案,但这种技术不起作用 因此,问题是:如何使用多线程CEF消息循环使cl

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

使用多线程CEF消息循环将是一个解决方案,但这种技术不起作用


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

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

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的使用是正常的