在 SDK 程序中引用 ActiveX 控件
来源:互联网 发布:淘宝房屋装修靠谱吗 编辑:程序博客网 时间:2024/04/28 01:08
很多时候真的很羡慕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
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
替换成:
static CComPtr
3. 将下面的语句
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.cppblog.com/azhisoft/");
hr = pWebBrowser->Navigate2(&url,&v,&v,&v,&v);
4. 最后一点
pFlash.Release();
WinContainer.DestroyWindow();
PostQuitMessage(0);
替换成:
pWebBrowser.Release();
WinContainer.DestroyWindow();
PostQuitMessage(0);
此为抛砖引玉,希望能给大家带来借鉴效果,呵呵!!!
以后不用羡慕VB/DELPHI程序员了,因为我们同样可以,哈哈,高兴。
- 在 SDK 程序中引用 ActiveX 控件
- 在 SDK 程序中引用 ActiveX 控件
- 在.Net中引用ActiveX控件及引用的位置
- 在程序中注册ActiveX控件
- 在C#程序中使用ActiveX控件
- 在VC++中利用ActiveX控件开发串行通信程序
- 在程序中注册ActiveX控件(.OCX)的函数
- 在程序中注册ActiveX控件(.OCX)的函数
- 在ActiveX控件中使用Mscom控件
- vc2010 引用ActiveX控件
- 在BCB中轻松使用ActiveX控件
- 在ActiveX控件中引入窗体技术
- 在ActiveX控件中引入窗体技术
- 在ActiveX控件中引入窗体技术
- 在ActiveX控件中引入窗体技术
- 在ActiveX控件中引入窗体技术
- 在ActiveX控件中引入窗体技术
- 在bcb2006中如何安装ActiveX控件
- 在java编程思想中对synchronized的一点解释:
- 关于list-(5) 单向list反转
- 根据绑定的值的不同改变gridview里某一单元格的字体或背景颜色
- 费波那其数列
- vc6.0选择的汇编
- 在 SDK 程序中引用 ActiveX 控件
- 转 VS2005程序运行时出现MSVCP80D.dll not found错误解决方法(VS 2005的一个“Bug”)
- [转].net企业级架构实战之1——框架综述
- 新手 Oracle导入数据
- 比特烘烤 Moblin:能不能另辟蹊径用bitbake来构建Moblin的映象呢?
- JSP面试题——include指令与include动作的区别
- 勿在浮沙筑高台--一步一步写Linux(一)
- 图书馆管理系统
- iPhone对OpenGL ES的支持程度!