很多時(shí)候真的很羨慕VB/DELPHI程序員,他們可以方便的用各種控件來(lái)搭建一個(gè)應(yīng)用程序。
而我們呢,要使用ActiveX控件都要找大半天資料,而且還要手工做大量工作,真是不公平(呵呵,想想人家寫(xiě)硬件驅(qū)動(dòng)的程序員,我們還是輕松多了嘛)。
下面我就簡(jiǎn)單的來(lái)講一下如何引用一個(gè)ActiveX控件,我以Flash控件為例:
這里我就不一步一步講了,有興趣的話就下載源代碼吧:)

點(diǎn)擊這里下載工程源代碼

// 首先要包含幾個(gè)COM頭文件
// 因?yàn)橐玫紸TL容器窗口,所以需要初始化一個(gè)CComModule以及包含atlwin.h頭文件
#include
CComModule _Module;
#include
#include
#pragma comment(lib,"atl")

// 引入FLASH控件,這里的路徑為自己計(jì)算機(jī)上的FLASH控件的實(shí)際路徑
#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;
}

// 開(kāi)始創(chuàng)建ATL容器窗口,并通過(guò)QueryControl()方法獲得FLASH控件對(duì)象
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動(dòng)畫(huà)了,高興啊:)
下面再示范一下如何在程序中創(chuàng)建WebBrower控件:

1. 將下面語(yǔ)句
#import "C:\WINNT\system32\Macromed\Flash\Flash.ocx"
using namespace ShockwaveFlashObjects;
替換成:
#include "exdisp.h"

2. 將對(duì)象變量
 static CComPtr pFlash;
替換成:
 static CComPtr pWebBrowser;

3. 將下面的語(yǔ)句
  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();

替換成:
  RECT rc;
  GetClientRect(hWnd,&rc);
  WinContainer.Create(hWnd,&rc,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.shnenglu.com/azhisoft/");
  hr = pWebBrowser->Navigate2(&url,&v,&v,&v,&v);


4. 最后一點(diǎn)
  pFlash.Release();
  WinContainer.DestroyWindow();
  PostQuitMessage(0);

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


此為拋磚引玉,希望能給大家?guī)?lái)借鑒效果,呵呵!!!
以后不用羨慕VB/DELPHI程序員了,因?yàn)槲覀兺瑯涌梢裕吲d。