在项目开发过程中,有时候需要进行调试测试,然后我们可以在cef上下文菜单中添加自定义开发者工具菜单项,这样会比较方便,最后效果:

实现过程:

让自己的MyClientHandler来继承 CefContextMenuHandler这个抽象类,然对其下面的纯虚函数进行重写

1.获得事件处理器

  1. virtual CefRefPtr<CefContextMenuHandler> GetContextMenuHandler()
  2. {
  3. return this;
  4. }

2. 重写CefContextMenuHandler 的方法

  1. virtual void OnBeforeContextMenu(CefRefPtr<CefBrowser> browser,
  2. CefRefPtr<CefFrame> frame,
  3. CefRefPtr<CefContextMenuParams> params,
  4. CefRefPtr<CefMenuModel> model);
  5.  
  6. virtual bool OnContextMenuCommand(CefRefPtr<CefBrowser> browser,
  7. CefRefPtr<CefFrame> frame,
  8. CefRefPtr<CefContextMenuParams> params,
  9. int command_id,
  10. EventFlags event_flags);

在MyClientHandler 类中添加 创建开发者工具窗口函数

  1. void ShowDevelopTools(CefRefPtr<CefBrowser> browser);

实现:

  1. enum MyEnum
  2. {
  3. MENU_ID_USER_OPENLINK = MENU_ID_USER_FIRST + ,
  4. MENU_ID_USER_SHOWDEVTOOLS,
  5. };
  6.  
  7. void CCefBrowserEventHandler::OnBeforeContextMenu(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<CefContextMenuParams> params, CefRefPtr<CefMenuModel> model)
  8. {
  9. model->Remove(MENU_ID_PRINT);
  10. model->Remove(MENU_ID_VIEW_SOURCE);
  11.  
  12. if ((params->GetTypeFlags() & (CM_TYPEFLAG_PAGE | CM_TYPEFLAG_FRAME)) != ) {
  13. // Add a separator if the menu already has items.
  14. if (model->GetCount() > )
  15. {
  16. model->RemoveAt();
  17. model->Remove(MENU_ID_BACK);
  18. model->Remove(MENU_ID_FORWARD);
  19. //model->Clear();
  20. //model->AddSeparator();
  21. #ifdef _DEBUG
  22. model->AddItem(MENU_ID_USER_SHOWDEVTOOLS, L"开发者工具"); //"&Show DevTools");
  23. #else
  24.  
  25. #endif
  26. }
  27. }
  28. }
  29.  
  30. bool CCefBrowserEventHandler::OnContextMenuCommand(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<CefContextMenuParams> params, int command_id, EventFlags event_flags)
  31. {
  32. switch (command_id)
  33. {
  34. case MENU_ID_USER_SHOWDEVTOOLS:
  35. {
  36. ShowDevelopTools(browser);
  37. return true;
  38. }
  39. default:
  40. break;
  41. }
  42.  
  43. return false;
  44. }
  45.  
  46. void CCefBrowserEventHandler::ShowDevelopTools(CefRefPtr<CefBrowser> browser)
  47. {
  48. CefWindowInfo windowInfo;
  49. CefBrowserSettings settings;
  50.  
  51. #if defined(OS_WIN)
  52. //windowInfo.SetAsPopup(browser->GetHost()->GetWindowHandle(), "DevTools");
  53. windowInfo.SetAsPopup(NULL, "DevTools");
  54.  
  55. //RECT rc = { 0, 0, 800, 600 };
  56. //windowInfo.SetAsChild(*theApp.m_pMainWnd, rc);
  57. #endif
  58.  
  59. browser->GetHost()->ShowDevTools(windowInfo, this, settings, CefPoint());
    }

参考:https://segmentfault.com/q/1010000013209473/a-1020000013211845

参考:https://github.com/cztomczak/cef2go/issues/22

参考:https://blog.csdn.net/markbruce/article/details/78846985

CEF 右键添加开发者选项菜单项的更多相关文章

  1. VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel)

    原文:VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel) private void AddRightMenu()         {            Microsoft ...

  2. JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)

    需求: 在界面的右键事件中添加一个打开开发者选项的菜单(Show Dev Tools) 所以我们可以看到的是在界面上右键,会有默认的一些菜单项(前进,后退,打印,查看源码),而这些功能并不一定是我们需 ...

  3. centos 给鼠标右击添加 “打开终端” 菜单项

    1.以root身份在终端执行如下命令 yum -y install nautilus-open-terminal   2.重启操作系统 shutdown -r now

  4. SVN安装后,右键不显示SVN菜单项

    打开svn->setting对话框,找到Icon Overlays, show overlays and context menu only explorer当中显示, 重启电脑.配置如下所示:

  5. 为Windows资源管理器右键菜单添加菜单项

    为Windows资源管理器右键菜单添加菜单项 在Windows下命令行用的比较多,经常在资源管理器里翻到某个目录,若想要在此目录下跑命令,只能是打开cmd.exe,然后一路cd才能到达此目录. 每次都 ...

  6. [Firefox附加组件]0002.添加菜单项

    Add-onSDK 还不能为火狐浏览器提供一个API添加新的菜单项.但它是可扩展的设计,所以任何人都可以建立和发布模块,使用插件开发者.大牛埃里克沃尔德写的MenuItems模块,能够使我们很方便的添 ...

  7. Unity 3D编辑器扩展介绍、教程(一) —— 创建菜单项

    Unity编辑器扩展教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 Brief Introduct ...

  8. win7&win10 右键添加 cmd

    修改注册表,位置有 3 个,重复即可: 桌面右键: HKEY_CLASSES_ROOT\Directory\Background\shell 文件夹右键:HKEY_CLASSES_ROOT\Direc ...

  9. Windows下给鼠标右键菜单添加获得完全控制权限的菜单项

    这段时间计算机C分区里多了很多无用的文件,而且不在同一个目录下,搜索出来删除的时候提示没有管理员权限,需要在右键属性里面修改,非常麻烦,于是查询了一下发现可以在文件右键菜单添加一个获取权限的菜单项,这 ...

随机推荐

  1. Nestjs 链接mysql

    文档 下插件 λ yarn add @nestjs/typeorm typeorm mysql 创建 cats模块, 控制器,service λ nest g mo cats λ nest g co ...

  2. PHP中通过bypass disable functions执行系统命令的几种方式

    原文:http://www.freebuf.com/articles/web/169156.html 一.为什么要bypass disable functions 为了安全起见,很多运维人员会禁用PH ...

  3. string find_last_of 用法

    int find_first_of(char c, int start = 0):              查找字符串中第1个出现的c,由位置start开始.              如果有匹配, ...

  4. what is spring-cloud

    什么是Spring-cloud ? Spring Cloud是一系列框架的集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均 ...

  5. Presto实战

    一.Presto简介 1.PRESTO是什么? Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节. Presto的设计和编写完全是为了解决像Facebook ...

  6. 关于springMVC的日志管理

    主要是基于在spring aop特性. 1. 创建一个系统日志的操作类,类里面提供一个方法,可以向数据库或者表中写入:访问用户名,访问IP,操作时间,访问包名,具体函数名. /** * @Name S ...

  7. python摸爬滚打之day26----网络编程之socket

    1.网络通信原理 互联网的本质就是一系列的网络协议, 统称为互联网协议. 互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准. 互联网协议按照功能不同分为 ...

  8. SQLAlchemy(包含有Flask-Migrate知识点)

    what's the SQLAlchemy SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQ ...

  9. Java-idea-常用插件

    一.插件安装 settings→plugins→直接搜索框搜索,没有选择Browse Respositories→找到需要安装的插件,install即可 二.常用插件 插件名称 简介 地址 备注   ...

  10. SybaseIQ上SQL基本使用

    锁定: sp_iqlocks 踢人: 存储过程查找: sybase central里面查询的命令(查找过滤器例如:%table%),Sybase Central/Sybase IQ 15/服务器/xx ...