很多时候真的很羡慕VB/DELPHI程序员,他们可以方便的用各种控件来搭建一个应用程序。
而我们呢,要使用ActiveX控件都要找大 半天资料,而且还要手工做大量工作,真是不公平(呵呵,想想人家写硬件驱动的程序员,我们还是轻松多了嘛)。
下面我就简单的来讲一下如何引用一个 ActiveX控件,我以Flash控件为例:
这里我就不一步一步讲了,有兴趣的话就下载源代码吧:)

点击这里下 载工程源代码

// 首先要包含几个COM头文件
// 因为要用到ATL容器窗口,所以需要初始化一个CComModule以及包含atlwin.h头文件
#include
CComModule _Module;
#include
#include
#pragma comment(lib,"atl")

// 引入FLASH控件,这里的路径为自己计算机上的FLASH控件的实际路径
#import "C:/WINNT/system32/Macromed/Flash/Flash.ocx"
using namespace ShockwaveFlashObjects;

// 在WinMain中做初始化
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
?CoInitialize(NULL);
?AtlAxWinInit();
?.
?.
?.
?CoUninitialize();
?return msg.wParam;
}

// 开始创建ATL容器窗口,并通过QueryControl()方法获得FLASH控件对象
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
?static CAxWindow??? WinContainer;
?static CComPtr?pFlash;

?switch (message)
?{
?case WM_CREATE:
??RECT?rc;
??GetClientRect(hWnd,&rc);
??WinContainer.Create(hWnd,&rc,LPCTSTR("ShockwaveFlash.ShockwaveFlash"),WS_CHILD | WS_VISIBLE);
??HRESULT?hr;
??hr = WinContainer.QueryControl(__uuidof (IShockwaveFlash),(void **)&pFlash);
??if (FAILED(hr))return -1L;
??hr = pFlash->put_Movie(CComBSTR(L".//sample.swf"));
??if (SUCCEEDED(hr))pFlash->Play();
??break;
?.
?.
?.
?case WM_DESTROY:
??pFlash.Release();
??WinContainer.DestroyWindow();
??PostQuitMessage(0);
??break;

?default:
??return DefWindowProc(hWnd,message,wParam,lParam);
?}

?return 0L;
}

好了,终于我也可以在我的程序中播放FLASH动画了, 高兴啊:)
下面再示范一下如何在程序中创建WebBrower控件:

1. 将下面语句
#import "C:/WINNT/system32/Macromed/Flash/Flash.ocx"
using namespace ShockwaveFlashObjects;
替换成:
#include "exdisp.h"

2. 将对象变量
?static CComPtr?pFlash;
替换成:
?static CComPtr pWebBrowser;

3. 将下面的语句
??RECT?rc;
??GetClientRect(hWnd,(void **)&pFlash);
??if (FAILED(hr))return -1L;
??hr = pFlash->put_Movie(CComBSTR(L".//sample.swf"));
??if (SUCCEEDED(hr))pFlash->Play();

替换 成:
??RECT?rc;
??GetClientRect(hWnd,LPCTSTR("Microsoft.IExplorer.4"),WS_CHILD | WS_VISIBLE);
??HRESULT?hr;
??hr = WinContainer.QueryControl(__uuidof (IWebBrowser2),(void **)&pWebBrowser);
??if (FAILED(hr))return -1L;
??VARIANT?url;
??VARIANT?v;
??url.vt = VT_BSTR;
??url.bstrVal = SysAllocString(L"
http://www.cppblog.com/azhisoft/ ");
??hr = pWebBrowser->Navigate2(&url,&v,&v);


4. 最后一点
??pFlash.Release();
??WinContainer.DestroyWindow();
??PostQuitMessage(0);

替 换成:
??pWebBrowser.Release();
??WinContainer.DestroyWindow();
??PostQuitMessage(0);


此 为抛砖引玉,希望能给大家带来借鉴效果,呵呵!!!
以后不用羡慕VB/DELPHI程序员了,因为我们同样可以,哈哈,高兴。

原文链接 http://www.cppblog.com/azhisoft/articles/426.html