找到的例子基本上都是VB的,而且很简单,我就希望能在VC6的SDK中实现它(添加了ATL支持的)
引用Microsoft   HTML   OBject   Library  Dim   WithEvents   M_Dom   As   MSHTML.HTMLDocument     
  Private   Function   M_Dom_oncontextmenu()   As   Boolean   
                  M_Dom_oncontextmenu   =   False   
  End   Function   
    
    Private   Sub   Webbrowser1_DownloadComplete()   
              Set   M_Dom   =   Webbrowser1.Document   
    End   Sub  
  看过了这篇文章是与HTMLElementEvents2接口有关的,http://topic.csdn.net/t/20051120/00/4405324.html也不太明白该怎么操作,而且创建事件连接时也出现了E_NOINTERFACE错误,确实想不到办法了......
或者有什么鼠标钩子,消息等方法让WebBrowser控件接收不到右键消息也行,提供一下代码好吗?谢谢大家了!!!!

解决方案 »

  1.   

    SDK你是如何加载WebBrowser的?
    获取DOCUMENT接口然后禁用其右键菜单(如上面的VB代码)
      

  2.   

    victorzou:直接做当原有右键菜单不存在,自动覆盖?不明白什么意思啊,也该怎么做?hailongxl:我就是参照了那段vb代码,知道要通过HTMLElementEvents2接口来实现oncontextmenu事件,就是照了http://topic.csdn.net/t/20051120/00/4405324.html这篇文章的8楼的做法来做的,我也一样不成功啊,jiangsheng这位牛人的回复我也不明白,所以就请教了......
      

  3.   

    提一种万能的方法,SetWindowsHookEx钩鼠标消息,查出是发给目标控件的右键消息就返回非0。
      

  4.   

    自己实现一个IDispatch,仅仅关注其中的Invoke方法,假设这个IDispatch对应的变量是m_disp,
    CComQIPtr<IHTMLDocument3> spDoc3 = pDoc2;
    CComVariant v = (IDispatch*)&m_disp;
    spDoc3->put_oncontextmenu(&v);在m_disp的Invoke实现里面:
    ...Invoke(...)
    {
      CComPtr<IHTMLWindow2> spWin2;
      pDoc2->get_parentWindow(&spWin2);
      CComPtr<IHTMLEventObj> spEvent;
      spWin2->get_event(&spEvent);
      CComVariant vRet = false;
      spEvent->put_returnValue(&vRet);
      spEvent->put_cancelBubble(VARIANT_TRUE);
      return S_OK;
    }