研究cef3的simple代码都知道,整个工程是基于win32实现的,在主文件中有一句
CefRunMessageLoop(); //启动CEF消息循环
这其实就是一个死循环,直到收到退出命令才退出循环,而退出命令是在
CefQuitMessageLoop(); //关闭CEF消息循环
中实现的。
然而MFC自带消息循环,所以CEF3嵌入到MFC中根本就不需要使用自带的消息循环,但是如果一定要使用怎么办?也就是
settings.multi_threaded_message_loop=false; //不使用外部的消息循环
如果直接在mfc代码中加入CefRunMessageLoop(),会导致程序执行到此函数就卡住,不再往下执行。
解决办法是在MFC对话框程序中的CXXApp.cpp文件中,重写PumpMessage函数,在函数体中实现调用CEF3的消息处理函数,代码如下
auto ret = CWinApp::PumpMessage();
CefDoMessageLoopWork();
return ret;
不过官方不建议这样做,个人测试了下,这样做没有问题,但是很多事件在网页上是不会相应的,比如在输入框中输入数据后,点击回车是没有反应的。