用MFC VC做的ActiveX 控件,作成.ocx后,在Delphi中用,放在Delphi的Form中,发现该控件只要程序是当前激活的窗口就工作正常,如果该程序不是当前窗口就异常报错,比如程序运行后,打开资源管理器,资源管理器为当前窗口,控件就不工作了。为什么?怎么办?
我在ActiveX里面用了:
static const DWORD BASED_CODE _dwPRTOleMisc =
OLEMISC_INVISIBLEATRUNTIME |
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST |
OLEMISC_INSIDEOUT |
OLEMISC_CANTLINKINSIDE |
OLEMISC_RECOMPOSEONRESIZE;

解决方案 »

  1.   

    以前碰到过这种问题!你的空间肯定是在OnCreate中对他进行初始化,在vb、delphi等语言中使用ocx时,如果当前的form为激活状态时其实已经创建了这个ocx的实例并且调用了OnCreate和OnDraw函数,在你运行这个程序时就一切正常!哈哈!如果form不是当前激活的那就说明你的OnCreate中的初始化就没有调用,以至于在运行时会出现各种异常!解决的办法是:在Create中的初始化的东西别的地方用到的时候判断一下是否初始化过如果没有重新初始化一次就好了!哈哈!去试试吧!要有问题找我!哈哈!
      

  2.   

    我写的控件比较简单,用MFC ActiveX ControlWizard生成的,选择了Activates when visible和Invisible at runtime两项,然后选择“Finish”创建项目。
    仅仅用Classwizard来添加了一个方法,然后在Delphi中调用这个方法,其他什么也没做啊。
    而且控件没有在生成的时候提供OnCreate()函数,我也没有添加。
    怎么办?
      

  3.   

    我也遇到过这个问题,最后在 OnCreate函数中加了SetFocus();就好了。
    我的控件是可视的,不知道这种方法对你的有没有用
      

  4.   

    OnCreate()
    可以重载消息处理~