如何禁用HTML页面的上下文菜单

提出问题: 

VC知识库《在线杂志》第六期有一篇文章“VC6中使用CHtmlView在对话框控制中显示HTML文件”,很多读者来信说很喜欢这种功能。但是美中不足的是在对话框的HTML页面上单击鼠标右键会弹出上下文菜单。从而可以象在IE中那样看到页面的源代码。为了防止用户查看HTML代码,有人尝试过在CHtmlCtrl派生的窗口中重载WM_CONTEXTMENU,或者在CHtmlView以及CHtmlCtrl类中禁用右键的上下文菜单和弹出式菜单,这两个方法都没有成功。那么如何禁用HTML的这个上下文菜单呢? 本文就针对这个问题用不同的方法来完善上次的程序。

解答:

CHtmlCtrl类可以将CHtmlView转换成在任何窗口中使用的控制。我用它写了一个程序叫AboutHtml,此程序实现了一个HTML对话框。但疏忽了鼠标右键的上下文菜单,所以在HTML对话框中单击鼠标右键,会弹出标准的浏览器上下文菜单(如图一),而这个菜单对于某些人来说可能是多余的。


图一 不想要的上下文菜单

其实,要解决这个问题有一个非常简单的办法,真是易如反掌,甚至不用写任何C++代码!只要在HTML页面中加一行指令即可:

//

//

这条指令告诉浏览器不要显示上下文菜单。也可以象下面这样写: 

//

oncontextmenu="ShowMyMenu(); return false"

//

ShowMyMenu是一个显示定制菜单的JavaScript过程。本文例子代码之一AboutHtml1使用的就是oncontextmenu。源代码可以从本文的开始处下载。

由于VC知识库是一个关于C++以及Visual C++的网站,与JavaScript之类的脚本语言没什么关系。所以我们要用另一种稍微复杂一点的方法来实现相同的事情,那就是用C++来做。为此,正规的C++方法是实现IDocHostUIHandler接口,而且要做的事情很多。至于为什么要实现它,请参见有关文档。用WM_CONTEXTMENU 或者 WM_RBUTTONDOWN来处理这个问题的思路的确是通常Windows做事情的方式。但是问题是CHtmlCtrl窗口不是真正的输入窗口。窗口有很多种,只要用Spy++工具看一下我们的例子程序就知道在你眼前会出现多少种窗口。如图二所示,在实际的输入窗口上,浏览器窗口有三级父/子窗口。 

时间: 2024-08-05 20:20:22

如何禁用HTML页面的上下文菜单的相关文章

上下文菜单 传值-Android上下文菜单页面跳转无法传值

问题描述 Android上下文菜单页面跳转无法传值 case 1: int keepAcc_id = Integer.valueOf(((TextView) menuInfo.targetView .findViewById(R.id.keepAcc_id)).getText().toString()); switch (item.getItemId()) { case 0: Intent intent1 = new Intent(); intent1.setClass(this, KeepAc

用XML数据岛创建上下文菜单

xml|菜单|创建|数据   上下文菜单就是用户在页面上单击右键时所显示的一组命令.微软的MSDN有一个简单的例子说明了怎样建立自定义菜单.这里,我们将通过XML的数据岛来快速创建自定义的上下文菜单.XML数据岛就是存在于HTML文档中的XML数据的一部分.通过XML文档对象模型[XML document object model (DOM)],我们可以轻松地参考和引用XML里的内容.我们这里利用XML数据岛来存储上下文菜单的多个定义,其中的每一个定义都可以和文档中的任一元素相联系.在没有定义的

safari如何关闭上下文菜单和选区菜单

开发single page app应用是长按页面出现的选区,如果滑动到另外一个界面会对操作造成影响.所以就需要处理为默认不显示.如果pc上可以用window.selection来处理选区,mobile safari可以用css处理,不出现选区. -webkit-user-select: none 手指长按连接的话会出现右键菜单,这个也是可以关闭的. 返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/ -webkit-touch

《Adobe InDesign CS6中文版经典教程》—第1课1.7节使用上下文菜单

1.7 使用上下文菜单 Adobe InDesign CS6中文版经典教程 除屏幕顶部的菜单外,用户还可使用下上文菜单列出与活动工具或选定对象相关联的命令.要显示上下文菜单,将鼠标指向文档窗口中的一个对象或任何位置,然后单击鼠标右键(Windows)或按住Control键并单击(Mac OS). 提示:在使用文字工具编辑文本时,也可显示上下文菜单,该菜单让用户能够插入特殊字符.检查拼写以及执行其他与文本相关的任务. 1. 使用选择工具(图像说明文字)单击页面中的任何对象,如包含文本"If you

《Adobe InDesign CC经典教程》—第1课1.6节使用上下文菜单

1.6 使用上下文菜单Adobe InDesign CC经典教程除了屏幕顶部的菜单,用户还可使用上下文菜单列出与活动工具或选定对象相关联的命令.为显示上下文菜单,用户可将光标移至已选对象的上方或是文档窗口的任意位置,然后单击鼠标右键(Windows)或是按住Control并单击鼠标(Mac OS). 使用选择工具(图像说明文字),单击页面上的任意对象,例如包含"If you don't know the words-"的文本框. 选中文本框,单击鼠标右键(Windows)或按住Cont

《Adobe InDesign CS5中文版经典教程》—第1课1.7节使用上下文菜单

1.7 使用上下文菜单Adobe InDesign CS5中文版经典教程除屏幕顶部的菜单外,用户还可使用上下文菜单列出与活动工具或选定对象相关联的命令.要显示上下文菜单,可将鼠标指针指向文档窗口中的一个对象或任何位置,然后单击鼠标右键(Windows)或按住Control键并单击(Mac OS). 提示:在使用文字工具编辑文本时,也可显示上下文菜单,该菜单让用户能够插入特殊字符.检查拼写以及执行其他与文本相关的任务.1.使用选择工具(SelectionTool.tiff)单击页面中的任何对象(如

【转】Windows Shell扩展编程傻瓜手册大全:上下文菜单扩展

引用自:http://blog.163.com/yesaidu@126/blog/static/51819307200861853827582/ Part I: A step-by-step tutorial on writing shell extensions 第一节:Windows shell扩展初步:上下文菜单扩展   作者:Michael Dunn 译者:yesaidu   源代码下载:1       2   目录 ● README ● 系列绪言 ● 第一部分绪言 ● 从AppWiza

动态网页实用技术:禁用html页面的缓存

动态|缓存|禁用|网页|页面 1.在Asp页面首部<head>加入     Response.Buffer   =   True     Response.ExpiresAbsolute   =   Now()   -   1     Response.Expires   =   0     Response.CacheControl   =   "no-cache"     Response.AddHeader   "Pragma",   "

为金山虚拟光驱扩展浏览器上下文菜单功能

一.简介 虚拟光驱,对我们大家来说,都不会太陌生.因为种种原因,如,有些游戏,需要在光驱才能运行,我们为了保护光驱,或者为了加快游戏读取光盘的速度,或者因为有些电脑本来就没有安装光驱(网吧,学校的电脑往往就是这样的).我们可以通过虚拟光驱来在达到我们的目的.金山虚拟光驱是应用的比较广泛的一种虚拟光驱软件.它安装操作简单,用来制作虚拟光盘也很方便. 但在使用它的过程中,我发现每次为了将虚拟光盘插入光驱中或者从虚拟光驱中弹出光盘,我们需要先运行金山虚拟光驱管理工具才能进行.虽然并不是很复杂,但是每次