研究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;
不過官方不建議這樣做,個人測試了下,這樣做沒有問題,但是很多事件在網頁上是不會相應的,比如在輸入框中輸入數據後,點擊回車是沒有反應的。