偶最近正在开发一个能在IE上显示特殊格式图像的ActiveX Control。结果控件的图像显示功能如愿完成,但对该控件刷新时,整个IE窗口都在“闪”...后来调试时,我发现当前控件类继承的m_hWnd属性为空,所以当我InvalidateRect并UpdateWindow时,相当于我在广播WM_PAINT消息!关于当容器为IE时,如何获取ActiveX Control自己正确的窗口句柄的问题,特向众高手请教,不知各位有何高见?

解决方案 »

  1.   

    这也是我关心的话题之一,如果能够得到嵌入网页中的窗口句柄,比如Flash动画播放窗口,那么我就可以操纵Flash了。遗憾的是,微软好像只希望用户通过DHTML文档解析操作网页中的元素。其网页元素的窗口句柄是隐藏的。在外面根本看不到。比如你采用SPY++,就很难得到浏览窗口中网页元素的窗口句柄。
      不过你既然具有控件代码,应该不是一件困难的事,你可以直接把句柄保存在内存共享区域。
      

  2.   

    RedrawWindow(rectClient, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
      

  3.   

    十分感谢各位的答复!现在我分别答复三位:microran2000:我说的是AtiveX自己获取自己的窗口句柄,所有不用
                  把句柄保存在内存共享区域。
    etre:你的函数我尝试过了,结果在IE上没能刷新。:=D
    newkey007:当ActiveX的容器为应用程序时,通过m_hWnd确实能获取
               当前控件的窗口句柄,但当容器为IE时,m_hWnd时刻为NULL。  不过我终于找到了绕过窗口句柄来刷新ActiveX的办法,与大家分享:
    在ActiveX控件类众多的父类中,有一个叫“CComControl”的东东,调用它的
    FireViewChange( )函数即可刷新ActiveX了!
      再次谢谢大家!