用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧C++ Builder

在CB中进行DirectX编程(4)

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 20:41:18

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_EXCLUSIVEDDSCL_FULLSCREENDDSCL_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_CAPSDDSD_HEIGHTDDSD_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_LOADFROMFILELR_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_LOADFROMFILELR_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);

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:14,859.38000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号