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

时间:2015-06-09 23:54:01

标签: c++ winapi visual-c++ chromium-embedded

我使用Chromium Embedded Framework(CEF)开发Windows桌面应用程序(使用C ++ / Win32,No MFC)。我使用了样本" cefsimple"项目并延伸到现在。我添加了#34;处理程序"对于键盘事件等。到目前为止一切正常,我可以获得浏览器窗口的句柄并使用它。

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

  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消息循环,我无法接收这些消息。

过去两天我一直试图找到解决方案:(

1 个答案:

答案 0 :(得分:1)

请参阅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事件循环,但无论如何您都必须处理自己的鼠标事件等。