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控件是Visual Basic编程环境中使用的一类组件,它们允许开发者通过ActiveX技术在应用程序中嵌入各种功能,如图形、媒体播放、数据库交互等。这些控件极大地扩展了VB应用程序的功能,使开发者能够创建更加...
在C#中利用ActiveX控件进行视频采集是一种常见的实现方式,尤其是在早期的.NET框架版本中,由于微软并未提供内置的视频捕获和回放类库。...然而,使用ActiveX控件通常意味着更好的兼容性和更少的开发工作量。
2. **ActiveX控件开发**:可能包含多个示例,演示如何使用ATL(Active Template Library)或MFC ActiveX控件向导来创建ActiveX控件,以及如何处理控件的属性、方法和事件。 3. **多线程编程**:由于C++支持多线程,...
1. **ActiveX控件开发**:使用Visual Studio 2005,开发者可以创建ActiveX控件。这是一个COM(组件对象模型)对象,可以通过脚本语言(如JavaScript或VBScript)在网页中调用。VS2005提供了集成的开发环境和工具,...
DXDemo可能是展示如何在C#中使用DirectX的一个实例,涵盖了ActiveX控件与DirectX结合使用的可能性,如在Web页面上展示3D图形。 总结,C#虽然不是原生支持ActiveX,但通过.NET Framework的COM互操作性,可以方便地...
利用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 中 的...
在这个例子中,"ANIBTN32.OCX"很可能是一个包含了DirectX功能的ActiveX控件,用于创建动态动画按钮。通常,我们需要先注册这个控件,通过命令行使用`regsvr32 ANIBTN32.OCX`命令,然后在VB中就可以使用该控件。 在...
然而,需要注意的是,随着技术的发展,一些旧的控件如AVI和Sound控件可能在新的操作系统上不再支持,因此,对于现代的VB开发,更推荐使用Windows Media Player控件或集成第三方库如DirectX来实现多媒体功能。...
**ocx控件合集** 是一个集合了多个ActiveX控件的压缩包,这些控件主要用于Windows应用程序开发,特别是基于Visual Basic、VBScript、VBA(Visual Basic for Applications)和其他支持ActiveX技术的编程环境。...
使用媒体控制接口(MCI) 使用MCIWnd窗口类 使用OpenGL DirectX编程 DLL的概念 动态链接库的创建 动态链接库的访问 创建ActiveX控件 测试和使用ActiveX控件 进程和线程 线程的管理和操作 线 程 通 信 线程同步 概 述...
Delphi 2000 是 Borland 公司在2000年发布的一款 IDE,它支持 Visual Component Library (VCL) 和 ActiveX 控件。这个版本可能包含了对 DirectX 7 或 8 的支持,因为 DirectX 9 在之后的几年才发布。 这个压缩包很...
标题“ezVidCa.ocx视频控件+微软帮助文档(翻译)”涉及的是一个用于摄像头捕获的软件开发组件,ezVidCap.ocx,它是一个ActiveX控件,适用于Visual Basic(VB)编程环境。ActiveX是Microsoft开发的一种技术,允许...
2. **OCX(ActiveX Control)技术**:OCX是微软提出的一种控件技术,它是基于COM(Component Object Model)的,主要用于Windows平台。通过生成OCX文件,开发者可以创建可嵌入到其他应用程序中的自定义控件,QQ音乐...
在这个案例中,"CapScreen.ocx"是一个ActiveX控件,用于屏幕拷贝。ActiveX是Microsoft推出的一种技术,允许开发者创建可重用的代码组件,这些组件可以在不同的应用程序中嵌入和交互。 "Demo.frm"文件是Visual Basic...
总的来说,通过VC++结合ACTIVEX控件制作虚拟示波器,不仅能够提高开发效率,还能实现高度定制化和灵活的应用。这个过程涉及到的知识点包括但不限于:MFC编程、ACTIVEX控件设计、图形绘制、数据采集以及硬件接口通信...
4. **OCX控件**: 压缩包中的“colligationprint_ocx2”可能是一个OCX(ActiveX Control)文件,这是微软的一种控件技术,允许开发人员创建可以在不同应用程序之间共享的组件。OCX控件通常包含在DLL(动态链接库)...
总的来说,基于VC的多媒体播放器设计与开发是一个涉及多方面技术知识的综合项目,需要熟练掌握MFC、ActiveX控件以及多媒体处理的相关原理和技术。通过这样的实践,开发者不仅可以提升自己的编程技能,还能深入了解...
4. **Capu.CAB**:这是一个包含ActiveX控件的 CAB( Cabinet)文件,它是微软开发的压缩格式,常用于分发软件组件。用户在访问网站时,浏览器会自动下载这个CAB文件,并在用户许可后安装其中的ActiveX控件。 5. **...
在VC6.0中开发Flash播放器,开发者需要利用ActiveX控件或者DirectX技术。ActiveX是Microsoft开发的一种组件对象模型(COM),允许开发者创建可以在不同应用程序之间共享的小型可执行程序,称为控件。在这种情况下,...