c语言窗口插件,C语言使用ActiveX控件

ActiveX使用的头文件,是只有C++才能用的,C语言要使用ActiveX控件,也是件很容易的事。

微软标准的ActiveX控件,根本上它还是一个窗口(Window),通俗地说就是关联了一个或多个COM对象窗口。这个窗口当然可以通过CreateWindowEx函数创建。

大家都知道,CreateWindowEx要指定一个类名和窗口名,类名是通过RegisterClassEx注册的窗口类的类名,而窗口名则视情况,对于APPWINDOW类型的窗口来讲,窗口名就是窗口标题。很幸运的事,运行ActiveX控件的窗口的窗口类(也可以说是ActiveX控件宿主窗口),微软已经帮我们实现,只要调用ATL库(atl.dll)里的初始化函数AtlAxWinInit,即可实现注册,类名为”AtlAxWin”。类名有了,在CreateWindowEx的时候还要指定窗口名为ActiveX控件的CLSID,即可成功创建ActiveX宿主窗口。

要获得窗口里的COM对象,通过ATL库里函数AtlAxGetControl即可获得。其它的工作就是操作COM对象的工作了。

建议在C语言里用LoadLibrary加载atl.dll,然后再使用里面的这两个函数。

写了一个实现的代码段:

typedef BOOL (*_AtlAxWinInit)();

typedef void (*_AtlAxGetControl)(HWND h,IUnknown** ppv);

typedef struct _ATLAXLIB{

HMODULE hMod;

_AtlAxWinInit AtlAxWinInit;

_AtlAxGetControl AtlAxGetControl;

}ATLAXLIB;

BOOL InitAtlaxLib(ATLAXLIB* lib){

lib->hMod=LoadLibrary("atl.dll");

if(lib->hMod==NULL) return 0;

lib->AtlAxWinInit=(_AtlAxWinInit)GetProcAddress(lib->hMod,"AtlAxWinInit");

lib->AtlAxGetControl=(_AtlAxGetControl)GetProcAddress(lib->hMod,"AtlAxGetControl");

return 1;

}

调用示例,这是个创建shockwave flash控件的示例:

ATLAXLIB lib;

InitAtlaxLib(&lib);

lib->AtlAxWinInit();

CreateWindowEx(0,"AtlAxWin","{D27CDB6E-AE6D-11cf-96B8-444553540000}",WS_CHILD | WS_VISIBLE

,0,0,400,400,hWnd,0,hInstance,0);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值