Cef全称Chromium Embedded Framework 是谷歌的chromium浏览器的嵌入式框架,可以给予其他应用嵌入谷歌chromium浏览器的能力。
CefSharp是Cef的.NET 封装版本,可以在.NET环境下运行Cef。
using CefSharp; //CefSharp库引用
ChromeAction chromeAction = new ChromeAction();//
CefSharp 自定义右键菜单 (Winform版)
引用:CefSharp 自定义右键菜单 (Winform版)
右键菜单功能由IContextMenuHandler接口定义:
具体代码:见(CefSharp 自定义右键菜单 (Winform版) )
调用很简单,如下:
//在初始化ChromiumWebBrowser后,指定其MenuHandler 即可.
browser1.MenuHandler = new MenuHandler();
这样就实现了自定义菜单项,及设定自定义菜单项的功能.
关于代码,再啰嗦几点:
1.CefSharp右键菜单功能由IContextMenuHandler接口定义.
2.有的人看了官方的例子,可能会卡在webBrowser.Dispatcher.Invoke上面. winfrom中是没有Dispatcher的,Dispatcher只是调度器,在winform中直接使用Invoke调用即可,跟平时写的跨线程的UI访问需要使用委托来访问以确保线程安全一样.
3.官方的Example也是显示实现接口,文章代码尽量与翻译官方Example所以写的显示实现接口,实际上隐式实现接口是一样可用的.
4.官方Example中在 RunContextMenu 方法中写了一大串的代码,实现了完整的WPF菜单栏绘制,是对winform版本的开发者的主要误导之一。(实际上Example中有注释申明了使用内置的ContextMenu只需要返回false即可,是由于WPF中需要集成到现有的消息循环中才需要重绘)
所以遇到问题还是要多看官方的文档,因为转载者基本上把这段注释改掉了,如果你尝试在winform中在这里模仿wpf代码进行重绘,测了下可以成功,但是弹出速度极慢,重绘代码不发了,因为弹出速度感人毫无参考意义,winform即便是要重绘也应该是在OnBeforeContextMenu里面设定才对.
关于需要彻底禁用右键菜单,只要理解了上面的代码,就应该知道有很多很多处地方都可以实现,随便任意一处即可.
5. 右键菜单中的点击后的功能是什么,这些都是可以自己设定的.
右键菜单的功能的设定和可以实现的功能,不一定局限于浏览器基础功能的范畴,
也可以实现其它浏览器之外的其它任务和工作也是可以的,灵活运用即可.