我用vc6做了一个ocx控件,在PreCreateWindow中获得该控件的宽高(cs.cx跟cs.cy)做某些事情,然后用vc6做了一个测试程序,一切都没有问题。当我的测试程序用vc2005时候,却发现程序有问题,用vc6下的ocx控件程序调试,发现不调用PreCreateWindow函数了create也不调用,另外ocx程序中Invalidate也是刷新全屏而不是只刷新本控件,大家知道什么问题吗?

解决方案 »

  1.   

    PreCreateWindow的时候,窗口都还没创建,你此时取窗口的尺寸不合适
    一般在OnCreate取窗口的尺寸比较合适
      

  2.   

    PreCreateWindow中,调用基类之前,连窗口类都还没有注册,窗口类是在其调用基类函数才注册的
      

  3.   

    我的Create也不执行 = =!
    可是vc6下面都是可以的。
      

  4.   


    我先是把我vc6测试程序的强制转换成vc2005,发现不行,后来用2005重新创建了一个测试程序,发现还是不触发create函数。
      

  5.   

    大哥你还在吗?
    我又测试了下,我vc6新建立一个MFC ActiveX控件,用vc2005做一个测试程序可以响应OnCreate,所以问题应该出现在我以前老的ActiveX上,可是不知道哪里出了问题,用2005的测试程序就是不触发老Ocx的OnCreate,Vc6的测试程序的就可以
      

  6.   

    怀疑你老版本的可能是个ATL的active控件,需要将m_bWndLess等设置为false
      

  7.   

    大哥你还在吗?
    我又测试了下,我vc6新建立一个MFC ActiveX控件,用vc2005做一个测试程序可以响应OnCreate,所以问题应该出现在我以前老的ActiveX上,可是不知道哪里出了问题,用2005的测试程序就是不触发老Ocx的OnCreate,Vc6的测试程序的就可以同ls的怀疑
      

  8.   

    大哥你还在吗?
    我又测试了下,我vc6新建立一个MFC ActiveX控件,用vc2005做一个测试程序可以响应OnCreate,所以问题应该出现在我以前老的ActiveX上,可是不知道哪里出了问题,用2005的测试程序就是不触发老Ocx的OnCreate,Vc6的测试程序的就可以同ls的怀疑
    问题已经解决了,原来是我老的OCX建立的时候,选择了WindowLess,现在已经可以了,非常感谢你的关注 = =1