CEF3 怎样禁止右键菜单 (2013-07-30 11:56:34)转载▼
标签: cef3 右键菜单 分类: CEF3
问题描述:
CEF3 嵌入成功后,在网页点鼠标右键,出现英文菜单,应该怎样禁止掉呢?
解决方法:
对void ClientHandler::OnBeforeContextMenu 按如下改动即可:
void ClientHandler::OnBeforeContextMenu(
CefRefPtr browser,
CefRefPtr frame,
CefRefPtr params,
CefRefPtr model) {
if ((params->GetTypeFlags() & (CM_TYPEFLAG_PAGE | CM_TYPEFLAG_FRAME)) != 0) {
// Add a separator if the menu already has items.
if (model->GetCount() > 0)
{
model->Clear();
//model->AddSeparator();
}
}
}
CEF3 的右键菜单过程 (2013-07-30 17:08:21)转载▼
标签: cef3 右键菜单 分类: CEF3
前提:
使用 cef_binary_3.1453.1255_windows.7z (http://www.magpcss.net/cef_downloads/) 在VS2008 环境建立 MFC 应用程序,调试通过。将加载主页换成百度。
菜单创建过程:
当在网页点击鼠标右键时,下面的方法会执行:
void ClientHandler::OnBeforeContextMenu(
CefRefPtr browser,
CefRefPtr frame,
CefRefPtr params,
CefRefPtr model) {
if ((params->GetTypeFlags() & (CM_TYPEFLAG_PAGE | CM_TYPEFLAG_FRAME)) != 0) {
// Add a separator if the menu already has items.
if (model->GetCount() > 0)
model->AddSeparator();
// Add a "Show DevTools" item to all context menus.
model->AddItem(CLIENT_ID_SHOW_DEVTOOLS, "&Show DevTools");
CefString devtools_url = browser->GetHost()->GetDevToolsURL(true);
if (devtools_url.empty() ||
m_OpenDevToolsURLs.find(devtools_url) != m_OpenDevToolsURLs.end()) {
// Disable the menu option if DevTools isn't enabled or if a window is
// already open for the current URL.
model->SetEnabled(CLIENT_ID_SHOW_DEVTOOLS, false);
}
// Test context menu features.
BuildTestMenu(model);
}
}
在此方法里,你可以用model->Clear();清除所有菜单项,也可以用model->AddSeparator();加分隔线,可以用 model->AddItem(CLIENT_ID_SHOW_DEVTOOLS, "&Show DevTools");增加菜单项。用model->SetEnabled(CLIENT_ID_SHOW_DEVTOOLS, false);灰化菜单项。
菜单的响应:
以 CLIENT_ID_SHOW_DEVTOOLS为例,在如下方法进行响应。
bool ClientHandler::OnContextMenuCommand(
CefRefPtr browser,
CefRefPtr frame,
CefRefPtr params,
int command_id,
EventFlags event_flags) {
switch (command_id) {
case CLIENT_ID_SHOW_DEVTOOLS:
ShowDevTools(browser);
return true;
default: // Allow default handling, if any.
return ExecuteTestMenu(command_id);
}
return false;
}