在CB中进行DirectX编程(4)

2.3.4.3 程序文件main.cpp

#include <vcl.h>
#pragma hdrstop
#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(!FAILED(DirectDrawCreate(NULL,&lpDD,NULL)))
{
if(!FAILED(lpDD->QueryInterface(IID_IDirectDraw2,(LPVOID *)&lpDD2)))
{
lpDD->Release();
if(!FAILED(lpDD2->SetCooperativeLevel(Handle,
DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN|DDSCL_NOWINDOWCHANGES)))
{
if(!FAILED(lpDD2->SetDisplayMode(800,600,16,0,0)))
{
Memo1->Lines->Text=Memo1->Lines->Text+"Create DirectDraw Object OK."+(String)CR;
Button1->Enabled=false;
Button2->Enabled=true;
return;
}
}
}
}
Memo1->Lines->Text=Memo1->Lines->Text+"Create DirectDraw Object Failed."+(String)CR;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
if(FAILED(lpDD2->CreateSurface(&ddsd,&lpDDPrimary,NULL)))
Memo1->Lines->Text=Memo1->Lines->Text+"Create Priamry Surface Failed."+(String)CR;
else
{
Memo1->Lines->Text=Memo1->Lines->Text+"Create Priamry Surface OK."+(String)CR;
Button2->Enabled=false;
Button3->Enabled=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
lpDD2->Release();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH;
ddsd.dwHeight=100;
ddsd.dwWidth=100;
ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN;
if(FAILED(lpDD2->CreateSurface(&ddsd,&lpDDOffScreen,NULL)))
Memo1->Lines->Text=Memo1->Lines->Text+"Create OffScreen Surface Failed."+(String)CR;
else
{
Memo1->Lines->Text=Memo1->Lines->Text+"Create OffScreen Surface OK."+(String)CR;
Button3->Enabled=false;
Button4->Enabled=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
HDC hdc,hdcImage;
HBITMAP hbm;
hbm=(HBITMAP)LoadImage(NULL,"view.bmp",IMAGE_BITMAP,100,100,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hdcImage=CreateCompatibleDC(NULL);
SelectObject(hdcImage,hbm);
if(FAILED(lpDDOffScreen->GetDC(&hdc)))
Memo1->Lines->Text=Memo1->Lines->Text+"Get DC of OffScreen Screen Surface Failed."+(String)CR;
else
{
Memo1->Lines->Text=Memo1->Lines->Text+"Get DC of OffScreen Screen Surface OK."+(String)CR;
if(BitBlt(hdc,0,0,100,100,hdcImage,0,0,SRCCOPY)==FALSE)
Memo1->Lines->Text=Memo1->Lines->Text+"OffScreen Screen BitBlt Failed."+(String)CR;
else
{
Memo1->Lines->Text=Memo1->Lines->Text+"OffScreen Screen BitBlt OK."+(String)CR;
Button4->Enabled=false;
Button5->Enabled=true;
}
lpDDOffScreen->ReleaseDC(hdc);
}
if(hdcImage) DeleteDC(hdcImage);
if(hbm) DeleteObject(hbm);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
HDC hdc,hdcImage;
HBITMAP hbm;
hbm=(HBITMAP)LoadImage(NULL,"view.bmp",IMAGE_BITMAP,200,100,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hdcImage=CreateCompatibleDC(NULL);
SelectObject(hdcImage,hbm);
if(FAILED(lpDDPrimary->GetDC(&hdc)))
Memo1->Lines->Text=Memo1->Lines->Text+"Get DC of Primary Screen Surface Failed."+(String)CR;
else
{
Memo1->Lines->Text=Memo1->Lines->Text+"Get DC of Primary Screen Surface OK."+(String)CR;
if(BitBlt(hdc,0,0,200,100,hdcImage,0,0,SRCCOPY)==FALSE)
Memo1->Lines->Text=
Memo1->Lines->Text+"Primary Screen BitBlt Failed."+(String)CR;
else
{
Memo1->Lines->Text=Memo1->Lines->Text+"Primary Screen BitBlt OK."+(String)CR;
Button5->Enabled=false;
Button6->Enabled=true;
}
lpDDPrimary->ReleaseDC(hdc);
}
if(hdcImage) DeleteDC(hdcImage);
if(hbm) DeleteObject(hbm);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
HDC hdcPrimary,hdcOffScreen;
lpDDPrimary->GetDC(&hdcPrimary);
lpDDOffScreen->GetDC(&hdcOffScreen);
BitBlt(hdcPrimary,200,0,100,100,hdcOffScreen,0,0,SRCCOPY);
lpDDPrimary->ReleaseDC(hdcPrimary);
lpDDOffScreen->ReleaseDC(hdcOffScreen);
Memo1->Lines->Text=Memo1->Lines->Text+"OffScreen To Primary OK."+(String)CR;
Button6->Enabled=false;
Button7->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
lpDD2->SetDisplayMode(640,480,16,0,0);
if(lpDDPrimary->IsLost()==DDERR_SURFACELOST&&lpDDOffScreen->IsLost()==DDERR_SURFACELOST)
Memo1->Lines->Text=Memo1->Lines->Text+"Surfaces are Lost."+(String)CR;
else
Memo1->Lines->Text=Memo1->Lines->Text+"Surfaces remain."+(String)CR;
Button7->Enabled=false;
Button8->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{
lpDD2->SetDisplayMode(800,600,16,0,0);
lpDDPrimary->Restore();
lpDDOffScreen->Restore();
Memo1->Lines->Text=Memo1->Lines->Text+"Restore lost Surfaces OK."+(String)CR;
Button8->Enabled=false;
Button9->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button9Click(TObject *Sender)
{
Button4Click(Sender);
Button5Click(Sender);
Button6Click(Sender);
}

时间: 2025-01-02 18:14:18

在CB中进行DirectX编程(4)的相关文章

在CB中进行DirectX编程(3)

2.3 装入并显示图形文件 为了简明地说明采用DirectDraw图形文件的显示技术,我们以示例程序dx2介绍图面.图形文件装入.图形缩放.图形在图面上显示等的初步概念和实现技术. 2.3.1 DirectDraw显示图形的技术 为了显示图象,DirectDraw必需首先拥有类似画布(canvas)的绘图空间,DirectDraw并不向在DOS下那样简单地将显示缓存作为绘画的对象,而是通过DirectDraw对象创建各种不同种类的"图面"(Suerface),图面上的内容可以被应用程序

在CB中进行DirectX编程(1)

C++ Builder是一个可视化的C++编程环境,它为编程人员提供了一种方便高效.简便的C++语言开发工具,因此已为广大C++程序员所青睐,DirectX开发工具包是微软公司提供的一套Windows9X下开发高性能图形.声音.输入输出和网络游戏的接口,其高效的直接硬件访问.程序与硬件设备之间的相对独立等特性,几乎使得DirectX成为唯一可以在Windows操作系统下开发游戏程序的基本工具软件. 虽然C++ Builder中直接包含了一套DirectX3的开发包,也提供了一些例程,但是这些例程

在CB中进行DirectX编程(2)

2.2.3 dx1源程序 2.2.3.1 dx1主要文件的组成为:工程文件(dx1.bpr).窗口文件(main.cpp).头文件(main.h). 2.2.3.2 头文件main.h #ifndef mainH #define mainH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp&g

C#中使用DirectX编程

编程   我感觉声音的播放比较简单.我们从播放声音开始.为什么我这么觉得?我也不知道.这里是展示最最最最最简单的DirectX播放声音的例子,我尽量省略了无关的代码.最后的代码只有19行,够简单了吧? 准备工作:1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll 和 Microsoft.Directx.DirectSound.dll2.一个WAV文件.(这样的文件比较好找,在QQ的目录里就不少啊.这里就不多说了.)名字叫SND.WAV,

DirectX编程:C#中利用Socket实现网络语音通信[初级版本]

 [声明:本篇来源:http://www.cnblogs.com/stg609/archive/2008/11/19/1334544.html 作者:stg609]       现在时下的VOIP软件很多,比较有名的就是Skype,还有其它诸如UUcall. 快门等等.它们提供的功能除了网络上的语音通话外,还可以与固定电话.手机等通话.在本篇中主要介绍利用C#实现语音通信的基本方法.但是目前只实现了网 络上语音传输的基本功能,而且比较粗糙,没有采用什么算法来优化,所以大家千万不要期望过高.我写这

一个用于 DirectX 编程的现代 C++ 库

我写过很多 DirectX 代码,也写过很多关于 DirectX 的文章.我甚至还编写过关于 DirectX 的在线培训课程.它其实并不像某些开发人员所说的那么难以理解.学习曲线一定会有,但一旦您过了这道坎,就不难理解 DirectX 的工作方式及其为何要如此工作的原因了.不过我也承认,DirectX 系列 API 的易用性应该更高些. 几天前,我决定着手修补一下这个缺陷.我熬了一整夜,编写了一个小头文件.随后几晚,我又将代码行扩展到了近 5,000 行.我的目标是提供一些可借助 Direct2

WorldWind系列十:RendableObject中的DirectX渲染分析:ImageLayer为例

学习WW有一段时间了,但是若想开发自己基于WW的插件,必然会遇到RendableObject中的DirectX渲染问题.所有需要渲染绘制的 WW三维插件,最终是通过继承RendableObject并实现自己的Initialize().Update().Render()方法的.想写自己的Render()方法不是简单的事情,你必然要学习DirectX编程,否则,你连看懂示例中的底层Render()方法都很难,谈何开发自己的插件. 为了突破DirectX编程对我学习WW插件的阻挠,我"快餐式"

slimdx-怎样用slimDX中的C#编程画三维的线和管?

问题描述 怎样用slimDX中的C#编程画三维的线和管? 第一次接触slimDX.要求在.net环境下用C#语言编程画出线和管来,不是编写高深的游戏.网上搜索找不到相关的内容,只发现了两个画出三角形和立方体的例子.想问一下有没有画线或者管的语言指令?要注意些什么?求详细指教.如果能提供一个简单例子就更好了. 解决方案 slimDX 网上的例子比较少,如果需要的话,建议你研究DirectX的技术,slimDx就是用.net把DirectX进行了封装,其实还是用的DirectX技术

Lua中的面向对象编程详解_Lua

简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 复制代码 代码如下: local tb1 = {a = 1, b = 2} local tb2 = {a = 1, b = 2} local tb3 = tb1   if tb1 == tb2 then      print("tb1 == tb2") else      print("tb1 ~= tb2") end   tb3.a = 3 print(tb1.a) 上述代码会输