我在cef 3.3239
提供的CefSimple
中想加一个 Show DevTools
的右键菜单选项,但是调试发现一直没进来OnBeforeContextMenu
这个函数。代码如下:
// 1. SimpleHandler添加CefContextMenuHandler继承
class SimpleHandler : public ...
public public CefContextMenuHandler { /**/ }
// 2. 重写CefContextMenuHandler和OnContextMenuCommand事件回调
// Cef源码注释:"Called before a context menu is displayed..."
void SimpleHandler::OnBeforeContextMenu(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
CefRefPtr<CefContextMenuParams> params,
CefRefPtr<CefMenuModel> model) {
CEF_REQUIRE_UI_THREAD();
if ((params->GetTypeFlags() & (CM_TYPEFLAG_PAGE | CM_TYPEFLAG_FRAME)) != 0) {
if (model->GetCount() > 0)
model->AddSeparator();
model->AddItem(DEV_TOOLS_ID, "&Show DevTools"); // 添加一个右键菜单项
}
}
// Cef源码注释:Called to execute a command selected from the context menu
bool SimpleHandler::OnContextMenuCommand(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
CefRefPtr<CefContextMenuParams> params,
int command_id,
EventFlags event_flags) {
CEF_REQUIRE_UI_THREAD();
switch (command_id)
{
case DEV_TOOLS_ID:
ShowDevTools(browser); // 显示DevTools
break;
default:
break;
}
return true;
}
void SimpleHandler::ShowDevTools(CefRefPtr<CefBrowser> browser)
{
CefWindowInfo win_info;
CefRefPtr<CefClient> client;
CefBrowserSettings settings;
browser->GetHost()->ShowDevTools(win_info, client, settings, CefPoint());
}
但是我运行程序之后,发现右键菜单没有添加上我要的DevToos
,断点设置在OnBeforeContextMenu
和OnContextMenuCommand
发现都没进来。
请问是我实现的方式缺少调用某些操作了吗?
找到原因了,还需要重写
GetContextMenuHandler
接口。