请问如下代码为什么无法创建ShockwaveFlash控件?◆如下代码在BCB中试过,但没有成功,请问为什么?
//**********************************
HWND hWnd = ::CreateWindow("AtlAxWin", "ShockwaveFlash.ShockwaveFlash",
         WS_CHILD|WS_VISIBLE, 0, 0, 500, 400,Form1->Handle, NULL,
         ::GetModuleHandle(NULL), NULL);
//**********************************如果问题解决,那么到如下帖子随便回复一下,分就是你的了!http://expert.csdn.net/Expert/TopicView1.asp?id=1832449

解决方案 »

  1.   

    关键原因是ATL::CAxWindow()构造函数中,注册了一个"AtlAxWin"的Class,然而其他的C++编译器并没有。
    看来你最好打开一个简单的SDK GUI Project好好思考一下。
      

  2.   

    see BOOL AtlAxWinInit();
    in
    #include <ATLHost.h>
      

  3.   

    其实偶对ATL实在是一巧不通,让各位大侠见笑了。想问一下:如果不用ATL是否无法在纯API创建的窗体上创建ShockwaveFlash控件?
      

  4.   

    ActiveX控件!=窗口,它只是按照一定的标准,能够放在实现了IOleClientSite, IOleInPlaceSiteWindowless, IOleControlSite,IOleContainer,IObjectWithSite等接口的容器上的组件而已。只要你能实现这些接口,你喜欢怎么样都可以。反过来,如果你的组件实现了IOleControl,IOleObject,IOleInPlaceActiveObject,IViewObjectEx,IOleInPlaceObjectWindowless等接口,就是一个ActiveX控件,不管是否窗口。
    简单地说,ActiveX是跟窗口完全不同概念的术语,它们遵守的是不同的协议,ActiveX通过接口通信,而窗口是用消息来通信的。
      

  5.   

    听arxing大侠一席话,小弟觉悟不少,从今天开始小弟一定努力学习COM&ATL。可是,说实话小弟其实是只菜鸟,等小弟会用接口,看来要颇费些时日,那这问题解决的日子可就遥遥无期了~~~ 如果arxing大侠及各位英雄愿意针对这个问题给小弟详细说说,那小弟真是不胜感激了~
      

  6.   

    其实所有的编程大同小异,如果仅仅限于类库的使用,MFC可能简单的多,但是ATL更接近SDK,可以编写出更加灵巧以及效率高的代码,也许ATL入门很简单,但是如果真要运用自如,需要良好的基础,包括C++基础以及对Windows Base Service有很深的理解。没有任何捷径,据我所知市面上任何书籍讲解都不够。
      

  7.   

    any implement for ActiveX container.
      

  8.   

    就事论事吧,在一个纯API创建的窗体上建立ShockwaveFlash控件,各位大侠会怎么作?
      

  9.   

    我说的还不够明白吗?既然ActiveX是以接口来通讯的,一方面,你要按规范调用控件的接口,另一方面,你要构造一个容器,这个容易要实现相关的接口。所有的接口加起来十来二十个,主要几个我之前提过了,但是针对具体的某个控件,也许你只需要实现两三个,你可以通过观察容器对象的QueryInterface,观察具体需要实现什么样的接口。
    我想详细的也没有必要说了,只要你有耐心好好阅读一下MSDN关于这些接口的,并不难。但是细节工作还是挺繁琐的。