`

基于ActiveX控件的DirectX游戏开发

 
阅读更多

http://www.cppblog.com/gogoplayer/archive/2006/03/09/3943.html

 

平常开发 DirectX 游戏基本是用 SDK 或者 MFC ,关于两者的开发想必大家都有了很多的了解,但是基于 ActiveX 控件的 DirectX 游戏开发网上并不多见,近日有兴趣研究了一下,小有成果,不敢独享,小附文章,希望能起到抛砖引玉的功效。

       我选用 WIN2K VC6 DirectX8 作为开发平台,首先创建 MFC ActiveX ControlWizard ,假设工程名为 DIG (因为在做一个名为 Digger 的游戏,故取此名)。编写 ActiveX 控件要求资源必须释放完全,要不他会给你各种各样的麻烦,错误提示框叮叮咚咚响,会让你感到这个世界都暗了,因此一定要注意资源的管理,实际上 C ++要求程序员对资源的管理本省就是很高的,算我多言了。

完成了这些步骤后,在初始化 DirectX 时我遇到了一个困难,无法取得 HWND ,没有这个怎么初始化 D3D 设备呢,在各个类中搜索了半天,终于在隐秘的地方发现了这个句柄,在 OnDraw 函数中的 CDC* pdc 可以间接得到这个句柄, pdc->GetWindow()->m_hWnd

得到句柄后初始化 DirectX 设备,这里我选择了 ID3DXSprite 作为图形显示接口,它功能强大,操作简单,支持缩放、半透明、旋转等。因为 MFC Windows 消息进行了封装,不能简单使用 SDK 那套消息处理程序(就是有消息处理消息,没消息渲染图形)。如果直接在 OnDraw 函数中执行渲染函数,编译后在 ActiveX Control Text Container 测试是可以发现,整个程序处于运行状态,但不能对 ActiveX 进行大小调节,并且对于 ActiveX Control Text Container 的所有操作都是极端滞后的,这样开发出来的 ActiveX 控件是没有意义的,所以对执行渲染的那个函数单独开一个线程是个不错的选择,用 CreateThread 函数创建线程,事实证明这种做法所得到的 FPS 还是很客观的,完全能满足在网页上直接插入 ActiveX 控件进行游戏,测试网页上的效果也是很容易的,打开 FrontPage 插入 ActiveX 控件,不需要一句代码就完全兼容,想象一下,这是不是很令人兴奋,从理论上说绝大部分基于 DirectX 的小游戏都可以做成 ActiveX 控件,其他的我没有试验,各位可以各自试验一下,有新的发现不要忘了告诉我 gogoplayer@163.com ,以下是相关的源代码,仅供参考。

 

HINSTANCE g_hInst;       // 实例

HWND g_hWnd;               // 句柄

CSSInput g_threadInput;  // 输入设备

 

HANDLE g_hThread;

DWORD g_dwThreadID;

bool g_bIsRunning;

bool g_bIsInitialise;

 

CDIGCtrl :: CDIGCtrl ()

{

         InitializeIIDs(&IID_DDIG, &IID_DDIGEvents);

 

         g_bIsInitialise = false ;

 

         // TODO: Initialize your control's instance data here.

}

 

/////////////////////////////////////////////////////////////////////////////

// CDIGCtrl::~CDIGCtrl - Destructor

 

CDIGCtrl ::~ CDIGCtrl ()

{

         // TODO: Cleanup your control's instance data here.

         // 释放

         GameRelease ();

}

 

 

/////////////////////////////////////////////////////////////////////////////

// CDIGCtrl::OnDraw - Drawing function

 

// 渲染用线程

void WINAPI ListenThread ( void )

{

         g_bIsRunning = true ;

         while (g_bIsRunning == true )

         {

                   g_threadInput. Capture ();

                   if (g_threadInput. IsUp (DIK_ESCAPE))

                            g_bIsRunning = false ;

                   Render ();

         }

         return ;      

}

 

void CDIGCtrl :: OnDraw (

                            CDC * pdc, const CRect & rcBounds, const CRect & rcInvalid)

{

         if (g_bIsInitialise == false )

         {

                   g_hInst = AfxGetInstanceHandle ();

                   g_hWnd = pdc-> GetWindow ()->m_hWnd;

                   InitGame ();

                   g_threadInput. Create (g_hInst, g_hWnd);

                   g_bIsInitialise = true ;

                   g_hThread = CreateThread (NULL, 0, ( LPTHREAD_START_ROUTINE )ListenThread, ( void *) this , 0, &g_dwThreadID);

         }

}

 

在文章的最后,我还用 VB 测试了这个 ActiveX 控件,效果很好,轻轻一划,一个窗体,一个控件, 0 行代码实现游戏,这感觉,爽。

分享到:
评论

相关推荐

    vb控件开发 开发ocx

    利用VB5开发ActiveX控件 45 , 45.txt 利用VB三维面板控件设计流动条 46 , 46.txt 浅谈用VB6.0编写BO程序 47 , 47.txt 巧用Visual Basic的TIMER控件 48 , 48.txt 取得控件绝对Top值 49 , 49.txt 如 何 解 决VB 中 的...

    tuxiangchuli.rar.rar_DirectX 线_activex_mci _opengl_socket

    使用媒体控制接口(MCI) 使用MCIWnd窗口类 使用OpenGL DirectX编程 DLL的概念 动态链接库的创建 动态链接库的访问 创建ActiveX控件 测试和使用ActiveX控件 进程和线程 线程的管理和操作 线 程 通 信 线程同步 概 述...

    VC与Labview、Matlab编程论文资料

    基于VC_开发虚拟数字键盘ActiveX控件.pdf 基于VC_的1553B总线接口仿真软件设计.pdf 基于VC_的3G无线上网卡主功能设计与实现.pdf 基于VC_的DXF数据文件接口的研究.pdf 基于VC_的GoogleEarthKML地标文件的自动生成及...

    VB编程资源大全(控件2)

    big2gb.zip 一个BIG5码<=>GB码互换的完全免费的ActiveX控件(81KB) 20,capscreen.zip 这是一个屏幕拷贝的控件,可以实现全屏的拷贝并支持另存为位图类型的文件 (28KB) 21,digital.zip 能够以液晶...

    组件技术编程(word)

    组件技术的应用现在已经十分广泛,从Windows编程中使用的各种控件和公用对话框,到ActiveX控件和DirectX的应用;从微软公司的COM,到Sun公司的JavaBean。其中最流行的组件技术的应用是——客户端的VBX(微软/VB)和...

    极光软件 Voice Over Net 语音聊天组件 P2P 1.0版 Crack

    极光软件 Voice Over Net 语音聊天组件 P2P 1.0版简介VON(Voice Over Net)语音聊天控件是为了简化网上语音聊天室开发过程而定制的,基于Microsoft ActiveX技术的ActiveX控件,语音清晰,支持各种网络带宽。...

    VC与Labview、Matlab编程论文资料[2].rar

    基于VC_开发虚拟数字键盘ActiveX控件.pdf 基于VC_的1553B总线接口仿真软件设计.pdf 基于VC_的3G无线上网卡主功能设计与实现.pdf 基于VC_的DXF数据文件接口的研究.pdf 基于VC_的GoogleEarthKML地标文件的自动生成及...

    VC与Labview、Matlab编程论文资料[4].rar

    基于VC_开发虚拟数字键盘ActiveX控件.pdf 基于VC_的1553B总线接口仿真软件设计.pdf 基于VC_的3G无线上网卡主功能设计与实现.pdf 基于VC_的DXF数据文件接口的研究.pdf 基于VC_的GoogleEarthKML地标文件的自动生成及...

    DXVU Meter控件

    DXVU Meter 2.0是一款ActiveX控件,可以监视任何音频设备,比如麦克,CD ROM等,并显示被监视的音频的波形,可作为标准的VU Meter或作为示波器。VU显示模式计算被监视音频的RMS值,并显示峰值。示波器模式则...

    组件(component)编程技术

    组件技术的应用现在已经十分广泛,从Windows编程中使用的各种控件和公用对话框,到ActiveX控件和DirectX的应用;从微软公司的COM,到Sun公司的JavaBean。其中最流行的组件技术的应用是——客户端的VBX(微软/VB)和...

    组件编程技术.doc

    组件技术的应用现在已经十分广泛,从Windows编程中使用的各种控件和公用对话框,到ActiveX控件和DirectX的应用;从微软公司的COM,到Sun公司的JavaBean。其中最流行的组件技术的应用是——客户端的VBX(微软/VB)和...

    AVCapture(音/视频捕捉)

    AVCapture是一个基于Microsoft的DirectShow技术开发的音视频讯号捕捉ActiveX控件,支持模拟视频捕捉卡和1394/USB数字视频设备,它可以帮助那些准备开发音/视频捕捉相关软件的程序员快速获取和处理音/视频数据。...

    AVCapture音/视频捕捉

    AVCapture是一个基于Microsoft的DirectShow技术开发的音视频讯号捕捉ActiveX控件,支持模拟视频捕捉卡和1394/USB数字视频设备,它可以帮助那些准备开发音/视频捕捉相关软件的程序员快速获取和处理音/视频数据。...

    基于VB的液位控制系统开发 (2008年)

    使用DirectX8.1描绘控制的实时曲线,同时将实时数据显示在界面上,采用ActiveX技术封装用VB语言实现的控制算法,使得控制算法的添加变得简单易行。另外,还设计开发了一个网络接口,以便实现和wEB端通讯。所开发的...

    vc++ 开发实例源码包

    // ActiveX Control Events Sink // IDispatch class CDHtmlElementEventSink; // IHTMLElement Events Sink // IDispatch class CExternalDispatchBase; template<class T> class CExternalDispatchImpl; // ...

    信念技术论坛封装专用母盘 V8 (第四版)

    10.集成了 Flash10 ActiveX 控件,带控制面板卸载。 11.未额外集成VB5/VB6/VC2005/VC2008运行库。 12.未额外集成DirectX运行库。为方便控制GHO体积,推荐在部署时静默安装DirectX。 13.未额外集成双核补丁,未...

    vc++ 应用源码包_1

    DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM...

    vc++ 应用源码包_2

    DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM...

    vc++ 应用源码包_3

    DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM...

    vc++ 应用源码包_6

    DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM...

Global site tag (gtag.js) - Google Analytics