浏览器CEFSharp+X86+win7 之 浏览器右键菜单(六)
代码
using CefSharp.WinForms;
using CefSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CyberWin.NET.ApplicationVOS109.CyberWinPHP.Cyber_Dialog;namespace CyberWin.NET.ApplicationVOS109.CyberWinPHP.BrowserHandle
{internal class 未来之窗_MenuHandler : IContextMenuHandler{private const int ShowDevTools = 26501;private const int CloseDevTools = 26502;private const int cyberwin_menu_id_关于我们 = 96501;private const int cyberwin_menu_id_支持中心 = 96502;private const int cyberwin_menu_id_复制 = 96503;private const int cyberwin_menu_id_粘贴 = 96504;private const int cyberwin_menu_id_查找 = 96505;private const int cyberwin_menu_id_剪切 = 96506;private const int cyberwin_menu_id_删除 = 96507;private const int cyberwin_menu_id_新窗口打开 = 96508;private const int cyberwin_menu_id_复制图片链接 = 96509;private const int cyberwin_menu_id_图片_浏览图片 = 96510;private const int cyberwin_menu_id_开发 = 99510;private const int cyberwin_menu_id_打印 = 99510;private const int cyberwin_menu_id_隐藏模块栏 = 96511;private const int cyberwin_menu_id_显示模块栏 = 96512;private const int cyberwin_menu_id_放大 = 1000;private const int cyberwin_menu_id_缩小 = 1001;private const int cyberwin_menu_id_人人可开发 = 1002;private const int cyberwin_menu_id_东方仙盟 = 1003;public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model){//parameters.LinkUrl// CyberWin.CSHARP.YNWLZC.WebFrame.CyberPHP.CyberWinPC.Helper.Logger.Log_Engine.write_log("系统", "菜单", "链接" + parameters.LinkUrl);// CyberWin.CSHARP.YNWLZC.WebFrame.CyberPHP.CyberWinPC.Helper.Logger.Log_Engine.write_log("系统", "菜单", "媒体类型" + parameters.MediaType.ToString());// CyberWin.CSHARP.YNWLZC.WebFrame.CyberPHP.CyberWinPC.Helper.Logger.Log_Engine.write_log("系统", "菜单", "可编辑" + parameters.IsEditable.ToString());// CyberWin.CSHARP.YNWLZC.WebFrame.CyberPHP.CyberWinPC.Helper.Logger.Log_Engine.write_log("系统", "菜单", "SourceUrl" + parameters.SourceUrl.ToString());//parameters.//throw new NotImplementedException();// return false;/*Console.WriteLine("Context menu opened");Console.WriteLine(parameters.MisspelledWord);if (model.Count > 0){model.AddSeparator();}CefMenuCommand c = new CefMenuCommand(){};model.AddItem((CefMenuCommand)26501, "Show DevTools");model.AddItem((CefMenuCommand)26502, "Close DevTools");model.AddItem((CefMenuCommand)26501, "Show DevTools");*///To disable context mode then clear// model.Clear();// CyberWin.CSHARP.YNWLZC.WebFrame.CyberPHP.model.Clear();model.AddItem((CefMenuCommand)cyberwin_menu_id_剪切, "剪切(&T)");model.AddItem((CefMenuCommand)cyberwin_menu_id_复制, "复制(&C)");model.AddItem((CefMenuCommand)cyberwin_menu_id_粘贴, "粘贴(&P)");model.AddSeparator();model.AddItem((CefMenuCommand)cyberwin_menu_id_删除, "删除(&D)");//2018-2-36model.AddSeparator();/** private const int cyberwin_menu_id_新窗口打开 = 96508;private const int cyberwin_menu_id_复制图片链接 = 96509;private const int cyberwin_menu_id_图片_浏览图片 = 96510;*/string url = parameters.LinkUrl;if (url.Length > 2){model.AddItem((CefMenuCommand)cyberwin_menu_id_新窗口打开, "在新标签页打开(&N)");}string cyber_媒体类型 = parameters.MediaType.ToString();if (cyber_媒体类型 == "Image"){model.AddItem((CefMenuCommand)cyberwin_menu_id_复制图片链接, "复制图片链接(&O)");model.AddItem((CefMenuCommand)cyberwin_menu_id_图片_浏览图片, "打开图片(&I)");}//设置复制string cyber_选择文本 = parameters.SelectionText;if (cyber_选择文本.Length < 1){model.SetEnabled((CefMenuCommand)cyberwin_menu_id_剪切, false);model.SetEnabled((CefMenuCommand)cyberwin_menu_id_复制, false);model.SetEnabled((CefMenuCommand)cyberwin_menu_id_删除, false);}if (parameters.IsEditable == false){model.SetEnabled((CefMenuCommand)cyberwin_menu_id_粘贴, false);}}else{model.Clear();}//if(browserControl.)// model.AddItem((CefMenuCommand)CefMenuCommand.Find, "-");// model.AddItem((CefMenuCommand)cyberwin_menu_id_查找, "关于我们");// model.AddSeparator();// model.AddItem((CefMenuCommand)cyberwin_menu_id_隐藏模块栏, "隐藏模块栏");// model.AddItem((CefMenuCommand)cyberwin_menu_id_显示模块栏, "显示模块栏");model.AddSeparator();model.AddItem((CefMenuCommand) cyberwin_menu_id_放大, "放大");model.AddItem((CefMenuCommand) cyberwin_menu_id_缩小, "缩小");model.AddSeparator();model.AddItem((CefMenuCommand) cyberwin_menu_id_人人可开发, "开发工具");model.AddItem((CefMenuCommand)cyberwin_menu_id_东方仙盟, "东方仙盟");model.AddItem((CefMenuCommand)cyberwin_menu_id_关于我们, "关于我们");model.AddItem((CefMenuCommand)cyberwin_menu_id_支持中心, "支持中心");//取消开发model.AddItem((CefMenuCommand)cyberwin_menu_id_开发, "开发");}public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags){//throw new NotImplementedException();/*if ((int)commandId == ShowDevTools){browser.ShowDevTools();}if ((int)commandId == CloseDevTools){browser.CloseDevTools();}*/if ((int)commandId == cyberwin_menu_id_关于我们){// browser.ShowDevTools();AboutBox1 a = new AboutBox1();a.ShowDialog();}if ((int)commandId == cyberwin_menu_id_支持中心){// browser.ShowDevTools();browserControl.Load("http://support.ynwlzc.cn/");}if ((int)commandId == cyberwin_menu_id_隐藏模块栏){// browser.ShowDevTools();//form3}switch ((int)commandId){case cyberwin_menu_id_剪切:{// control.ShowFind();// control.Browser.Cut();browserControl.Cut();}break;case cyberwin_menu_id_复制:{// control.ShowFind();browserControl.Copy();}break;case cyberwin_menu_id_粘贴:{// control.ShowFind();browserControl.Paste();}break;case cyberwin_menu_id_删除:{// control.ShowFind();browserControl.Delete();}break;case cyberwin_menu_id_查找:{//browserControl.sh();}break;case cyberwin_menu_id_开发:{//browserControl.sh();frm_inputBox 输入框 = new frm_inputBox("请输入超级密码","");if (输入框.ShowDialog() == DialogResult.OK){string 密码 = 输入框.valueI;MessageBox.Show(密码);if (密码.Equals("1")){// browserControl.ShowDevTools();}else{}}}break;//2018-2-26case cyberwin_menu_id_新窗口打开:{//browserControl.sh();// browserControl.Load(parameters.LinkUrl);var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;chromiumWebBrowser.Invoke(new Action(() =>{var owner = chromiumWebBrowser.FindForm();// as Cyber_Form_BrowserMu;if (owner != null){var control = new Control();control.Dock = DockStyle.Fill;control.CreateControl();//owner.AddTab(control, targetUrl);// owner.AddTab(parameters.LinkUrl);// var rect = control.ClientRectangle;// windowInfo.SetAsChild(control.Handle, rect.Left, rect.Top, rect.Right, rect.Bottom);return;}}));browserControl.Load(parameters.LinkUrl);}break;case cyberwin_menu_id_复制图片链接:{//browserControl.sh();Clipboard.SetDataObject(parameters.SourceUrl, true);}break;case cyberwin_menu_id_图片_浏览图片:{//browserControl.sh();browserControl.Load(parameters.SourceUrl);}break;case cyberwin_menu_id_放大:{var zoom = browserControl.GetZoomLevelAsync().ConfigureAwait(false).GetAwaiter().GetResult();browserControl.SetZoomLevel(zoom + 0.5);}break;case cyberwin_menu_id_缩小:{var zoom = browserControl.GetZoomLevelAsync().ConfigureAwait(false).GetAwaiter().GetResult();browserControl.SetZoomLevel(zoom - 0.5);}break;case cyberwin_menu_id_东方仙盟:{browserControl.Load("http://app.ynwlzc.net/");}break;case cyberwin_menu_id_人人可开发:{browserControl.Load("http://51.onelink.ynwlzc.net/o2o/index.php/appwork/aOg");}break;}return false;}public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame){//throw new NotImplementedException();// return false;}public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback){// throw new NotImplementedException();return false;}}
}
用途
1. 提供便捷操作
- 页面交互:用户在浏览网页时,通过右键菜单可快速执行常见操作。例如,在链接上右键,能选择 “在新标签页中打开”,无需手动复制粘贴链接到新标签栏,极大节省时间。对于图片,右键菜单提供 “另存为” 选项,方便用户保存感兴趣的图片,满足资料收集或个人喜好需求。
- 文本处理:当选中一段文本后,右键菜单展示 “复制”“全选” 等功能。在需要引用网页内容时,“复制” 功能一键获取文本,提高信息提取效率。“全选” 则在处理较长篇幅文本时极为实用,方便后续整体操作。
2. 辅助功能操作
- 打印与分享:右键菜单中的 “打印” 选项,允许用户直接将当前页面输出到打印机,满足文档打印需求。“分享” 功能可将页面链接分享至社交平台或即时通讯工具,方便用户与他人交流感兴趣的内容,扩大信息传播范围。
- 查看页面信息:“查看页面源代码” 选项让开发人员或技术爱好者能够深入了解网页架构和代码实现,有助于学习和调试。“检查元素” 功能更是前端开发人员的得力助手,可实时查看和修改页面元素的样式、属性及脚本,加速开发与调试进程。
3. 针对特定应用定制
- 应用内操作:基于 CefSharp 开发的应用程序,可根据自身业务需求定制右键菜单。如在线文档编辑应用,右键菜单可添加 “插入表格”“设置字体格式” 等功能,使操作更贴近用户在专业软件中的习惯,提升用户体验。
- 数据交互:对于需要与数据库或后端服务交互的应用,右键菜单可触发数据相关操作。在商品展示应用中,右键商品图片可弹出 “添加到购物车”“查看商品详情” 等选项,直接实现数据的增删查改等操作,增强应用的交互性与功能性。
好处
1. 提升用户体验
- 操作便捷性:右键菜单将常用功能集中展示,用户无需在复杂界面中寻找特定按钮,降低操作难度,提升操作流畅度。对于新手用户,这种直观的操作方式更容易上手,减少学习成本。
- 个性化操作:用户可根据自身需求和习惯,利用右键菜单进行个性化操作。如自定义页面缩放比例、选择不同的文本编码等,满足不同用户的多样化需求,增强用户对浏览器的掌控感。
2. 增强应用功能
- 功能扩展:通过定制右键菜单,开发人员能为应用添加独特功能,使其区别于其他同类产品。在地图应用中,右键点击地图可弹出 “标记地点”“测量距离” 等功能,丰富应用功能,提升应用的竞争力。
- 无缝集成:右键菜单与浏览器界面自然融合,用户在使用时感觉功能是浏览器的固有部分,不会破坏应用整体的视觉和操作体验。这种无缝集成使用户在操作过程中不会因功能突兀而产生困扰,提高应用的易用性。
3. 提高开发效率
- 复用性:CefSharp 提供了相对成熟的右键菜单框架,开发人员无需从头开发右键菜单功能,节省开发时间和精力。可基于已有框架进行定制开发,将更多时间投入到核心业务功能的实现上。
- 灵活性:开发人员可根据应用的不同场景和需求,灵活定制右键菜单的内容和行为。无论是简单的文本处理应用还是复杂的多媒体应用,都能通过定制右键菜单满足特定功能需求,提升开发的灵活性和适应性。
阿雪技术观
在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者。无论是分享代码、撰写技术博客,还是参与开源项目维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基生命,为科技进步添砖加瓦。
Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets, hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology.