`

基于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_ActiveX控件

    VB_ActiveX控件是Visual Basic编程环境中使用的一类组件,它们允许开发者通过ActiveX技术在应用程序中嵌入各种功能,如图形、媒体播放、数据库交互等。这些控件极大地扩展了VB应用程序的功能,使开发者能够创建更加...

    在C#中利用ActiveX控件进行视频采集

    在C#中利用ActiveX控件进行视频采集是一种常见的实现方式,尤其是在早期的.NET框架版本中,由于微软并未提供内置的视频捕获和回放类库。...然而,使用ActiveX控件通常意味着更好的兼容性和更少的开发工作量。

    Visual+C++实践与提高+ActiveX篇(源代码).rar

    2. **ActiveX控件开发**:可能包含多个示例,演示如何使用ATL(Active Template Library)或MFC ActiveX控件向导来创建ActiveX控件,以及如何处理控件的属性、方法和事件。 3. **多线程编程**:由于C++支持多线程,...

    Activex 截屏插件

    1. **ActiveX控件开发**:使用Visual Studio 2005,开发者可以创建ActiveX控件。这是一个COM(组件对象模型)对象,可以通过脚本语言(如JavaScript或VBScript)在网页中调用。VS2005提供了集成的开发环境和工具,...

    C# activex 学习

    DXDemo可能是展示如何在C#中使用DirectX的一个实例,涵盖了ActiveX控件与DirectX结合使用的可能性,如在Web页面上展示3D图形。 总结,C#虽然不是原生支持ActiveX,但通过.NET Framework的COM互操作性,可以方便地...

    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 中 的...

    VB中使用DirectX的控件附例子和源代码

    在这个例子中,"ANIBTN32.OCX"很可能是一个包含了DirectX功能的ActiveX控件,用于创建动态动画按钮。通常,我们需要先注册这个控件,通过命令行使用`regsvr32 ANIBTN32.OCX`命令,然后在VB中就可以使用该控件。 在...

    vb控件多媒体控件

    然而,需要注意的是,随着技术的发展,一些旧的控件如AVI和Sound控件可能在新的操作系统上不再支持,因此,对于现代的VB开发,更推荐使用Windows Media Player控件或集成第三方库如DirectX来实现多媒体功能。...

    ocx控件合集 下载

    **ocx控件合集** 是一个集合了多个ActiveX控件的压缩包,这些控件主要用于Windows应用程序开发,特别是基于Visual Basic、VBScript、VBA(Visual Basic for Applications)和其他支持ActiveX技术的编程环境。...

    tuxiangchuli.rar.rar_DirectX 线_activex_mci _opengl_socket

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

    directx_for_delphi

    Delphi 2000 是 Borland 公司在2000年发布的一款 IDE,它支持 Visual Component Library (VCL) 和 ActiveX 控件。这个版本可能包含了对 DirectX 7 或 8 的支持,因为 DirectX 9 在之后的几年才发布。 这个压缩包很...

    ezVidCa.ocx视频控件+微软帮助文档(翻译)

    标题“ezVidCa.ocx视频控件+微软帮助文档(翻译)”涉及的是一个用于摄像头捕获的软件开发组件,ezVidCap.ocx,它是一个ActiveX控件,适用于Visual Basic(VB)编程环境。ActiveX是Microsoft开发的一种技术,允许...

    QQ音乐播放列表控件

    2. **OCX(ActiveX Control)技术**:OCX是微软提出的一种控件技术,它是基于COM(Component Object Model)的,主要用于Windows平台。通过生成OCX文件,开发者可以创建可嵌入到其他应用程序中的自定义控件,QQ音乐...

    这是一个屏幕拷贝的控件,可以实现全屏的拷贝并支持另存为位图类

    在这个案例中,"CapScreen.ocx"是一个ActiveX控件,用于屏幕拷贝。ActiveX是Microsoft推出的一种技术,允许开发者创建可重用的代码组件,这些组件可以在不同的应用程序中嵌入和交互。 "Demo.frm"文件是Visual Basic...

    VC++做的示波器,很好的演示了虚拟示波器的制作方法

    总的来说,通过VC++结合ACTIVEX控件制作虚拟示波器,不仅能够提高开发效率,还能实现高度定制化和灵活的应用。这个过程涉及到的知识点包括但不限于:MFC编程、ACTIVEX控件设计、图形绘制、数据采集以及硬件接口通信...

    全部VC打印控件原码封装即能使用

    4. **OCX控件**: 压缩包中的“colligationprint_ocx2”可能是一个OCX(ActiveX Control)文件,这是微软的一种控件技术,允许开发人员创建可以在不同应用程序之间共享的组件。OCX控件通常包含在DLL(动态链接库)...

    于VC的多媒体播放器的设计与开发

    总的来说,基于VC的多媒体播放器设计与开发是一个涉及多方面技术知识的综合项目,需要熟练掌握MFC、ActiveX控件以及多媒体处理的相关原理和技术。通过这样的实践,开发者不仅可以提升自己的编程技能,还能深入了解...

    截屏并上传

    4. **Capu.CAB**:这是一个包含ActiveX控件的 CAB( Cabinet)文件,它是微软开发的压缩格式,常用于分发软件组件。用户在访问网站时,浏览器会自动下载这个CAB文件,并在用户许可后安装其中的ActiveX控件。 5. **...

    VC6.0写的Flash播放器

    在VC6.0中开发Flash播放器,开发者需要利用ActiveX控件或者DirectX技术。ActiveX是Microsoft开发的一种组件对象模型(COM),允许开发者创建可以在不同应用程序之间共享的小型可执行程序,称为控件。在这种情况下,...

Global site tag (gtag.js) - Google Analytics