如何处理事件消息,同时使用chrome嵌入式框架(CEF)



我正在使用Chromium嵌入式框架(CEF)开发windows桌面应用程序(使用c++/Win32, No MFC)。我已经使用了样本"cefsimple"项目,并对其进行了扩展,直到现在。我为键盘事件等添加了"处理程序"。一切都很好,直到现在,我可以得到浏览器窗口的处理和发挥它。

现在我找不到一种方法来处理从外部收到的事件消息。示例:第三方应用程序向我的应用程序发送一些数据,我需要接收它。或者我需要处理鼠标事件。

  CefRefPtr<SimpleApp> app(new SimpleApp);
  int exit_code = CefExecuteProcess(main_args, app.get(), sandbox_info);
  if (exit_code >= 0) {
    return exit_code;
  }
  // Specify CEF global settings here.
  CefSettings settings;
#if !defined(CEF_USE_SANDBOX)
  settings.no_sandbox = true;
#endif
  settings.single_process = true;
  settings.windowless_rendering_enabled = true;

  // Initialize CEF.
  CefInitialize(main_args, settings, app.get(), sandbox_info);
  // Run the CEF message loop. This will block until CefQuitMessageLoop() is
  // called.
  CefRunMessageLoop();
  // Shut down CEF.
  CefShutdown();

这是我当前的主要函数。我遗漏了什么吗?CefRunMessageLoop()运行自定义CEF消息传递循环,我没有办法接收这些消息。

在过去的2天里,我一直在试图找到一个解决方案:(

参见CefDoMessageLoopWork(),这意味着从您自己的消息循环中调用。所以你可以实现你的windows消息循环,并在空闲时调用它。

这是从cef_do_message_loop_work()的注释,这是CefDoMessageLoopWork()调用并提供更多信息:

// Perform a single iteration of CEF message loop processing. This function is
// used to integrate the CEF message loop into an existing application message
// loop. Care must be taken to balance performance against excessive CPU usage.
// This function should only be called on the main application thread and only
// if cef_initialize() is called with a CefSettings.multi_threaded_message_loop
// value of false (0). This function will not block.

所以你必须实现你自己的Windows事件循环,但你必须处理你自己的鼠标事件等。

相关内容

  • 没有找到相关文章

最新更新