VC屏蔽WebBrower控件右键菜单
a。在头文件中添加变量,映射和事件处理函数
public:
CExplorer m_ocxHtmlShow;// 绑定web Brower控件变量
IHTMLDocument2 * m_pHTMLDoc;//想要处理事件的COM对象的指针
DWORD m_dwCookie;//用于标记一个连接点
protected:
DECLARE_DISPATCH_MAP()//声明dispatch map表
public:
BOOL onHtmlContextMenu(IHTMLEventObj *pEvtObj);//事件处理函数,原型可以参考MSDN中关于HTMLDocumentEvents2的说明
void DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL);
b。在实现文件中加入头文件,映射和事件处理函数的实现部分
#include <afxctl.h>
//填充dispatch map表,以供Invoke()调用
BEGIN_DISPATCH_MAP(CHtmlBaseInfoDlg, CDialog)
DISP_FUNCTION_ID(CHtmlBaseInfoDlg, "oncontextmenu", DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU, onHtmlContextMenu, VT_BOOL, VTS_DISPATCH)
END_DISPATCH_MAP()
BOOL CXXXXX::onHtmlContextMenu(IHTMLEventObj *pEvtObj)
{
//在成功连接上事件源后,每次用户右击都会调用这个函数,你可以根据pEvtObj来判断当前光标位置等,然后决定是自己弹出菜单,让IE弹出菜单,还是什么都不做...
return FALSE;
}
void CXXXX::DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL)
{
// TODO: 在此处添加消息处理程序代码
HRESULT hr=m_ocxHtmlShow.get_Document()->QueryInterface(IID_IHTMLDocument2,(void**)&m_pHTMLDoc);
BOOL Ret = AfxConnectionAdvise(
m_pHTMLDoc, //可连接对象的接口指针
DIID_HTMLDocumentEvents2, //连接接口ID
GetIDispatch(FALSE), //把内嵌的IDispatch实现类的一个对象实例m_xDispatch传了出去
FALSE, //donod addref
&m_dwCookie ); //cookie to break connection later...
if(!Ret){
return;
}
}
3.到这里,基本步骤都以完成,运行后如果没有什么灾难发生的话在IE控件中点击右键不会弹出菜单,断开事件连接的代码如下:
AfxConnectionUnadvise(pDoc2,
DIID_HTMLDocumentEvents2 ,
GetIDispatch(FALSE),
FALSE,
m_dwCookie );
其余的善后工作交给你去处理了.
a。在头文件中添加变量,映射和事件处理函数
public:
CExplorer m_ocxHtmlShow;// 绑定web Brower控件变量
IHTMLDocument2 * m_pHTMLDoc;//想要处理事件的COM对象的指针
DWORD m_dwCookie;//用于标记一个连接点
protected:
DECLARE_DISPATCH_MAP()//声明dispatch map表
public:
BOOL onHtmlContextMenu(IHTMLEventObj *pEvtObj);//事件处理函数,原型可以参考MSDN中关于HTMLDocumentEvents2的说明
void DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL);
b。在实现文件中加入头文件,映射和事件处理函数的实现部分
#include <afxctl.h>
//填充dispatch map表,以供Invoke()调用
BEGIN_DISPATCH_MAP(CHtmlBaseInfoDlg, CDialog)
DISP_FUNCTION_ID(CHtmlBaseInfoDlg, "oncontextmenu", DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU, onHtmlContextMenu, VT_BOOL, VTS_DISPATCH)
END_DISPATCH_MAP()
BOOL CXXXXX::onHtmlContextMenu(IHTMLEventObj *pEvtObj)
{
//在成功连接上事件源后,每次用户右击都会调用这个函数,你可以根据pEvtObj来判断当前光标位置等,然后决定是自己弹出菜单,让IE弹出菜单,还是什么都不做...
return FALSE;
}
void CXXXX::DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL)
{
// TODO: 在此处添加消息处理程序代码
HRESULT hr=m_ocxHtmlShow.get_Document()->QueryInterface(IID_IHTMLDocument2,(void**)&m_pHTMLDoc);
BOOL Ret = AfxConnectionAdvise(
m_pHTMLDoc, //可连接对象的接口指针
DIID_HTMLDocumentEvents2, //连接接口ID
GetIDispatch(FALSE), //把内嵌的IDispatch实现类的一个对象实例m_xDispatch传了出去
FALSE, //donod addref
&m_dwCookie ); //cookie to break connection later...
if(!Ret){
return;
}
}
3.到这里,基本步骤都以完成,运行后如果没有什么灾难发生的话在IE控件中点击右键不会弹出菜单,断开事件连接的代码如下:
AfxConnectionUnadvise(pDoc2,
DIID_HTMLDocumentEvents2 ,
GetIDispatch(FALSE),
FALSE,
m_dwCookie );
其余的善后工作交给你去处理了.