屏蔽CHtmlView/WebBrower控件右键菜单技巧合集

射频工程师笔记---射频通信基础 回顾一下移动通信技术的发展,其实是互联网和通信技术的融合过程。在这个过程中,很多应用都在不断加入其中。比如计算机跟通信的融合产生了互联网、互联网跟手机的融合带来了移动互联网。手机可以看杂志、看视频、听音乐,于是又出现了内容服务产业;再后来,电视音箱等设备也能联网,于是网络跟家电又产生了融合。所以应用的出现总是在融合其他产业。在1995年,比尔·盖茨在《未来之路》一书中首次提出:在未来... 阅读详情
?

0.本文代码下载(http://skinart.y365.com/csdn/htmlcontextmenu.zip)(代码只是做演示用,没有做什么错误检查,请注意)

1.常被人鄙视的方法(PreTranslateMessage)

经常见到有人问怎么屏蔽html的右键菜单,有人答用PreTranslateMessage函数拦截wm_rbuttondown消息,于是总会有人说这种方法怎么烂,@_@,我真不知道为什么,不过我想这也是一种方法呀,而且非常简单,所以还是列出来吧:)

BOOL CPreTranslateMsgView::PreTranslateMessage(MSG* pMsg)
{
?if ((pMsg->message == WM_RBUTTONDOWN)||(pMsg->message == WM_RBUTTONDBLCLK)){
??CPoint point(pMsg->pt);
??ScreenToClient(&point);

??IHTMLDocument2* pdoc2=NULL;
??IHTMLElement* pElement=NULL;
??IDispatch* pDisp=NULL;
??pDisp=GetHtmlDocument();
??pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pdoc2);
??pDisp->Release();

??pdoc2->elementFromPoint(point.x,point.y,&pElement);
??pdoc2->Release();
??if(pElement){
???BSTR ID;
???pElement->get_id(&ID);
???pElement->Release();
???CString str=(LPCTSTR)(_bstr_t)ID;
???if(str=="Layer1"){
????CMenu menu;
????menu.LoadMenu(IDR_MENU1?);
????CMenu* pmenu=menu.GetSubMenu(0);
????pmenu->TrackPopupMenu(0,pMsg->pt.x,pMsg->pt.y,this);
???}
??}
??return TRUE;//如果想完全屏蔽掉,不显示任何菜单,直接返回TRUE就行,上面这些代码演示了怎么对html中特定ID的元素弹出自己想要显示的菜单?
?}else
??return CHtmlView::PreTranslateMessage(pMsg);
}

2.通过子类化IE控件的窗口并处理WM_CONTEXTMENU消息

?这是MSDN上介绍的方法,111222翻译了那文章,大家自己去看:
?屏蔽CHtmlView/CWebBrower2右键菜单的非官方方法??? 111222(翻译)。
?http://www.youkuaiyun.com/develop/Read_Article.asp?Id=10427

3.利用IDocHostUIHandler接口(官方提供的方法)
?VC.net中的CDHtmlDialog就是这种方法了,想自己实现的可以参考这篇文章:
?在对话框中显示网页,并屏蔽掉IE的弹出式菜单??? wuya(原作)
? http://www.youkuaiyun.com/develop/Read_Article.asp?Id=8813

4.利用COM的连接点机制,直接处理html元素的事件

?我们先看看在VB中想屏蔽掉右键菜单是怎么做的:

?Dim WithEvents m_doc As HTMLDocument

?Private Function m_doc_oncontextmenu() As Boolean
??? ??m_doc_oncontextmenu = False
?End Function

?Private Sub WebBrowser1_DownloadComplete()
??? ??Set m_doc = WebBrowser1.Document
?End Sub
?
?呵呵,非常简单吧?处理HTMLDocument的oncontextmenu事件,视具体需要弹出自己的菜单,然后返回true或false就可以了。
?同理,我们在VC中如果能响应html页面元素对象的事件并做出处理的话也可以达到屏蔽右键菜单的目的了,在VB中响应COM的事件被封装起来,用一个WithEvents关键字就轻松搞定,在VC中怎么实现??
?我们知道COM是通过连接点机制来实现事件的,VC中你得在程序中实现一个特定的接口,并把这个接口的指针通过一定的途径传送给COM对象并通知它需要订阅该对象的消息。

?下面通过处理HTMLDocument2的oncontextmenu事件来演示具体怎么在MFC程序中实现屏蔽掉右键菜单,同理你可以处理其它的像DIV,Button等元素的事件来制定相应的右键菜单。
?通过查阅MSDN,可以知道要响应HTMLDocument2的事件必须在程序中实现HTMLDocumentEvents2接口,这个接口是Dispinterface类型的,而在MFC想实现一个IDispatch接口就简单的就是从CCmdTarget类派生一个新类并用DECLARE_DISPATCH_MAP,BEGIN_DISPATCH_MAP,DISP_FUNCTION_ID,END_DISPATCH_MAP等宏来添加接口函数,由于CHtmlView或是CDialog都是间接派生自CCmdTarget的,所以直接在这些类上实现这个接口就可以了,以对话框加IE控件为例(稍微改动可用于CHtmlView),实现如下:

?1.新建基于对话框工程命名为HtmlDemoDialog,在主对话框中加入Microsoft Web Browser控件并生成包装类等。
?2.在主对话框类头文件CHtmlDemoDialogDlg.h中加入
??#include //定义了IHTMLDocument2等接口
??#include //定义了HTMLDocumentEvents2接口的方法DISPID
?
??class CCHtmlDemoDialogDlg : public CDialog
??{
??...
???DECLARE_DISPATCH_MAP()//声明dispatch map表
???
??public:
???BOOL onHtmlContextMenu(IHTMLEventObj *pEvtObj);
???//事件处理函数,原型可以参考MSDN中关于HTMLDocumentEvents2的说明
???DWORD m_dwCookie;
???//用于标记一个连接点
???IHTMLDocument2* pDoc2;
???//想要处理事件的COM对象的指针
??...
??}
?2.在对话框类实现文件CHtmlDemoDialogDlg.cpp中加入
??#include //定义了AfxConnectionAdvise、AfxConnectionUnadvise等函数,等会连接到事件源时要用到
??...
??//填充dispatch map表,以供Invoke()调用
??BEGIN_DISPATCH_MAP(CCHtmlDemoDialogDlg, CDialog)
???DISP_FUNCTION_ID(CCHtmlDemoDialogDlg, "oncontextmenu", DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU, onHtmlContextMenu, VT_BOOL, VTS_DISPATCH)
??END_DISPATCH_MAP()
??...

??CWebbrowserDlg::CWebbrowserDlg(CWnd* pParent /*=NULL*/)
??: CDialog(CWebbrowserDlg::IDD, pParent)
??{
???EnableAutomation();//必须有,否则等会用GetIDispatch()时会失败.
???...
??}

??BOOL CCHtmlDemoDialogDlg::onHtmlContextMenu(IHTMLEventObj *pEvtObj)
??{?
???//在成功连接上事件源后,每次用户右击都会调用这个函数,你可以根据pEvtObj来判断当前光标位置等,然后决定是自己弹出菜单,让IE弹出菜单,还是什么都不做...
???return FALSE;
??}

??void CCHtmlDemoDialogDlg::OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT FAR* URL)
??{
???//处理WebBrowser控件的DocumentComplete事件,并初始化pDoc2指针和连接到事件源
???HRESULT hr=m_wb.GetDocument()->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc2);
???BOOL Ret = AfxConnectionAdvise(
????pDoc2,??//可连接对象的接口指针
????DIID_HTMLDocumentEvents2,?//连接接口ID
????GetIDispatch(FALSE),?//把内嵌的IDispatch实现类的一个对象实例m_xDispatch传了出去
????FALSE,???//donod addref
????&m_dwCookie );??//cookie to break connection later...
???if(Ret){
????AfxMessageBox("成功挂接上");
???}
??}
?3.到这里,基本步骤都以完成,运行后如果没有什么灾难发生的话可以看到"成功挂接上"的消息框,并且在IE控件中点击右键不会弹出菜单,断开事件连接的代码如下:
??AfxConnectionUnadvise(pDoc2,
????????? DIID_HTMLDocumentEvents2 ,
????????? GetIDispatch(FALSE),?
????????? FALSE,
????????? m_dwCookie );
其余的善后工作交给你去处理了.

Hypermesh二次开发实战:从Tcl/Tk脚本到Ext API的进阶之路 本文系统介绍了Hypermesh二次开发的进阶路径,从自动化重复操作的Tcl/Tk脚本入门,到利用HMASCII接口深度读写模型数据,最终深入Ext API进行高性能计算与功能定制。通过实战案例,帮助工程师掌握从脚本录制到C++插件开发的完整技能,显著提升CAE前处理效率与自动化水平。 阅读详情

相关推荐

如何使用MCP2518FD外部CAN FD控制器实现速速CAN通信

1、SPI时序MCP2518FD外部CAN FD控制器具有小尺寸和SPI接口,可实现轻松连接。可将CAN FD通道轻松添加到缺少CAN FD外设或没有所需CAN FD通道的微控制器上。MCP2518FD支持经典格式 (CAN 2.0B) 和CAN灵活数据速率 (CAN FD) 格式中的CAN帧格式,符合ISO11898-1:2015标准。框图:本文实验板MCU:CAN FD控制器:MCP2518FDCAN FD收发器:ATA6560开发环境:想了解开发板更详细信息,请点击。

qq_57798018的博客 1万+

MFC单文档项目如何禁止右键菜单

VS2015生成一个MFC单文档项目,想要禁止右键菜单。 直观想法就是,找到右键响应函数,然后禁止相关代码。也就是禁止OnRButtonUp中OnContextMenu()函数调用,但是结果却还是无法禁止右键菜单。但是如果禁止OnContextMenu()函数中的内容,就能正常禁止右键菜单,应该MFC框架内部有调用ON_WM_CONTEXTMENU()事件,从而调用OnContextMenu()函...

HHHUANG 1447

HIDL概述

HIDL背景 Treble 是 Google Android 团队的一项重大项目,意在 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。Android 7.x 及更早版本中没有正式的供应商接口,因此设备制造商必须更新大量 Android 代码才能将设备更新到新版 Android 系统: 图1 Treble ...

u013357557的专栏 2万+

C#中webbrowser 如何禁止右键?

webBrowser1.IsWebBrowserContextMenuEnabled = false;

zhaohongx的专栏 2338

告别C盘爆红!手把手教你将WSL2下的Ubuntu 22.04完整迁移到D盘(附清理指南)

本文详细指导如何将WSL2下的Ubuntu 22.04从C盘无损迁移到D盘,包括导出备份、注销原系统、导入新位置等关键步骤,并提供迁移后的优化配置、开发环境衔接及长期维护技巧,帮助用户彻底解决C盘空间不足问题。

weixin_28698059的博客 472

基于Zynq的便携式γ能谱仪设计与实现

数字多道分析器(DMCA)是核辐射能谱测量的核心设备,其本质是将探测器输出的模拟脉冲按幅度数字化分道,构建能量-计数分布曲线,从而支撑放射性核素识别与定量分析。其技术原理依赖高速采样、数字滤波成形、基线恢复与峰值提取等关键信号处理环节,具备高分辨率、优线性度与强抗干扰能力。在环境监测、核安全巡检与野外地质勘探等场景中,对低功耗、小型化、实时性提出严苛要求。本方案采用Xilinx Zynq-7020异构SoC架构,融合FPGA实时数字信号处理与ARM嵌入式控制,实现软硬协同优化,兼顾算法精度与工程落地性,为国

weixin_33173126的博客 190

VB Webbrowser控件如何屏蔽右键

'引用Microsoft HTML OBject Library '加入webbrowser控件 '在窗体上自定义一个菜单(设为MyMenu) '复制下面代码,运行即可禁止右键菜单了 '====窗体代码==== Dim WithEvents M_Dom As MSHTML.HTMLDocument Private Function M_Dom_oncontextmenu() As B

coffeesweet的博客 2072

KBS投稿全流程拆解:从模板准备到条件接收的实战指南

本文详细拆解了KBS期刊投稿的全流程,从模板准备、投稿系统操作到返修策略和条件接收。重点介绍了Cover Letter撰写技巧、Latex模板选择、审稿周期管理以及返修文件的系统准备方法,帮助研究者高效完成KBS投稿并提升接收概率。

weixin_26938645的博客 703

屏蔽CHtmlView\WebBrower控件右键菜单技巧合集

1.常被人鄙视的方法(PreTranslateMessage) 经常见到有人问怎么屏蔽html的右键菜单,有人答用PreTranslateMessage函数拦截wm_rbuttondown消息,于是总会有人说这种方法怎么烂,@_@,我真不知道为什么,不过我想这也是一种方法呀

把握自己。 2828

Mmdetection用自己的数据集训练Mask_RCNN

将自己数据的标签写入配置文件,在data前一行添加自己的标签列表,同时在train,val,test中添加classes = classes,如果不添加,模型就会默认读取coco原始数据集的80个标签,与自己的数据集对应不上就会报错。2.打开第二个文件coco_instance.py,将data_root路径改为你自己coco数据集的位置(注意一定要以/结尾),修改输出图片尺寸(根据自己的数据集决定)3.将标注完的数据转为Mask_rcnn训练所需的数据集格式。4.将数据集放到训练代码文件夹中。

m0_64298393的博客 3473

告别手册!S32K3XX的eMIOS实战:从GPT定时到PWM输出,一个通道搞定电机控制

本文深入探讨了NXP S32K3XX系列MCU的eMIOS模块在电机控制中的高效应用。通过单通道实现PWM生成、输入捕获和定时中断三大功能,展示了如何简化BLDC电机控制硬件设计。文章结合RTD库与寄存器级编程,提供动态模式切换和性能优化方案,显著降低CPU负载。

weixin_42522374的博客 147

WebBrowser或CHtmlView中屏蔽脚本错误

转自:http://blog.sina.com.cn/s/blog_7400c5b90100z6yp.html WebBrowser或CHtmlView中屏蔽脚本错误 ━━━━━━━━━━━━━━━━━━━━━━━━ 一、我现在的方法是在void CMyHtmlView::OnInitialUpdate()中添加SetSilent(true);

FoxBryant的专栏 3541

python3.12 百分百解决安装dlib失败问题【研究原理后Bug已解决】

python3.12 百分百解决安装dlib失败问题【研究原理后Bug已解决】 python3.12版本下安装dlib失败。截图如下。试了网上很多方法都失败,耗费了很多时间终于找到适用于python3.12版本安装dlib的方法,亲测百分百成功。几乎尝试了所有的方法都不太行。终于找到安装的方法了。 原因分析: 版本匹配问题。我们现在是python3.12 使用pip根本无法安装。下面我们一起手动安装,1分钟搞定。

一键难忘的博客 7129

CHtmlView中屏蔽脚本错误

首先从COleControlSite派生一个自己的类,重写Exec方法 STDMETHODIMP CMyBrowser::XOleCommandTarget::Exec( const GUID* pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG* pvaIn, VARIANTARG* pvaOut ) {  HRESULT

mail_cm的专栏 1837

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键

原文:WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键从 VS2005开始,VS自带的 WebBrowser控件,就已经相当友好了,可控性非常高了。Winform 结合 WebBrowser 做UI开发,也是一种非常流畅的模式了, 微软的VS IDE 系列的安装程序, 基本都是这个模式的 禁用错误脚...

weixin_33854644的博客 81

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WebBrowser控件的高级定制+mshtml

-->blog:WebBrowser控件的高级定制---以下为三篇重要的参考文献,第一篇可以禁用了js弹窗和声音第二篇的引用文献禁用了IE弹窗,但是原文的说明很好第3篇是一些文件合集,便于开阔思路第3篇是一些文件合集,便于开阔思路!!WebBrowser或CHtmlView中屏蔽脚本错误http://blog.youkuaiyun.com/jac...

weixin_30797027的博客 148

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

自定义浏览器控件

同自动化浏览器(http://blog.joycode.com/jiangsheng/archive/2005/10/20/65489.aspx)相比,自动化浏览器控件(WebBrowser Control) 在应用程序中更加常用。从Outlook的预览窗格到Maxthon这样的基于IE引擎的浏览器,从无界面的HTML分析器到Norton Antivirusd的主界面,浏览器控件在众多领域被用作各

乐吾天 1384
上一篇: VB的ShowInTaskbar功能分析以及用VC的实现
下一篇: MFC动态创建控件的消息处理
_foo
博客等级 码龄23年 1粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值