我用WebBrowser作网页编辑器时
想要做到这种效果:
当鼠标在点击某个块元素内部的一个元素时,不产生内部元素的鼠标事件,而产生父元素的鼠标事件,相当于把这个块元素的内部元素给禁用掉我实现IHTMLEditDesigner::PreHandleEvent来拦截事件
除了拦截,能不能在这个函数中将当前Element的鼠标事件交给上层Element处理?
或者有什么其它的方法做到我想要的?  
谢谢

解决方案 »

  1.   

    你可以修改window.event,然后调用父元素的click方法
      

  2.   

    我要处理的事件是MouseDown/MouseUp
    如何修改event?
      

  3.   

    是这样的 在IHTMLEditDesigner::PreHandleEvent里只可能收到MouseDown/MouseUp事件
    我希望能够在块的内部元素上屏蔽这些鼠标事件 但是这也造成了无法产生DoubleClick及Click事件
    所以我出于想当然的考虑,如果在PreHandleEvent或者别的什么地方可以让这些事件直接作用在父元素上,这样就可以在父元素上产生Click等事件,这样就可以满足我的要求了这种想法可不可行?应该如何做?
    或者有什么可以实现的办法能满足我的要求?
      

  4.   

    CMSHTMLDisableDragHTMLEditDesigner::PreHandleEvent(DISPID inEvtDispId, 
                                             IHTMLEventObj *pIEventObj)
    {
        //fire another event here
        //the window object and source element can be obtained from pIEventObj
    //    if (inEvetDispId == DISPID_EVMETH_ONMOUSEDOWN)
    //        pIEventObj->Cancel();
    }
    see also
    http://www.codeproject.com/internet/disabledrag.asp
      

  5.   

    谢谢提供解答但是我要的并不是屏蔽鼠标事件,这我已经做到了
    我是说把这个事件让浏览器自动把它放到父元素上去处理,相当于屏蔽对这些元素的编辑另外,IHTMLEventObj->Cancel()方法并不存在
      

  6.   

    如何去触发一个元素的MouseDown/MouseUp事件?
      

  7.   

    我可以Fire一个MouseDown 可以Fire一个MouseUp
    然而因为PreHandleEvent里Cancel了这两个事件
    浏览器应该无法再产生click,dblclick,dragstart,contextmenu,....一切我需要的事件,
    这样的话,情况反而更糟糕了 :(
    会不会有更容易的别径?
      

  8.   

    这条路是走不通的,不过之后我发现了一个办法能够解决我的问题
    就是替这个元素附加一个Binary Behavior,并让这个Behavior实现IHTMLPainter,在它的HitTest方法里设定hit=true.
    有一个副作用——光标总是会停留在初进入控件前的那个形状,我只好手工去把它变回去
    还有一个不足……就是内部的Select元素却没办法屏蔽它展开菜单这么个行为