CCRUN 上的DDRAW的问题。
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h "
#include "ddraw.h "
#include "windows.h "
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm "
LPDIRECTDRAW pMyDD; //初始化
LPDIRECTDRAWSURFACE pMyDDSFront,pMyDDSBack; //前页
LPDIRECTDRAWCLIPPER pMyClipper; //
LPDIRECTDRAWPALETTE pMyDDPal; //
HWND myWnd;
int scr_width,scr_height;;
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
pMyDD = NULL;
pMyDDSFront = NULL;
pMyDDSBack = NULL;
pMyClipper= NULL;
pMyDDPal = NULL;
DirectDrawCreate(NULL,&pMyDD,NULL);
//步骤二: 设置屏幕的显示方式.
//pMyDD-> SetCooperativeLevel(AfxGetMainWnd()-> GetSafeHwnd(),DDSCL_NORMAL);
pMyDD-> SetCooperativeLevel(myWnd ,DDSCL_FULLSCREEN );
pMyDD-> SetDisplayMode(800,600,8);
//步骤三: 建立前后页(两块画板).
DDSURFACEDESC ddsd;
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; //指定我们用的是前页
ddsd.dwSize = sizeof(ddsd);//尺寸
// 做前页:
HRESULT result;
result = pMyDD-> CreateSurface(&ddsd,&pMyDDSFront,NULL);
//当发生错误时, 要记得 Release对象.
if(result!=DD_OK)
{
pMyDD-> Release();
pMyDD=NULL;
ddsd.dwWidth = scr_width;//设定后页的大小
ddsd.dwHeight = scr_height;
//指定 我们要后页
ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT |DDSD_CAPS ;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
//做后页
result = pMyDD-> CreateSurface(&ddsd,&pMyDDSBack,NULL);
}
// 步骤四: 给显示区加一个画框(裁剪板)
result = pMyDD-> CreateClipper(0,&pMyClipper,NULL);
myWnd =((CMainDlg *)AfxGetMainWnd())-> GetSafeHwnd(myWnd)); //从系统中拿到窗口的 Handle
result = pMyClipper-> SetHWnd(0,myWnd);
result = pMyDDSFront-> SetClipper(pMyClipper);
//步骤五: 在后页画图, 前后页互换.
if(pMyDDSFront-> IsLost()==DDERR_SURFACELOST)
{
pMyDDSFront-> Restore();
result = pMyDDSFront-> Blt(&rcTo,pMyDDSBack,&rcFrom,DDBLT_WAIT,NULL);
result = pMyDDSFront-> BltFast(0,0,pMyDDSBack,&rcFrom,DDBLTFAST_SRCCOLORKEY);
//如果程式工作在 "全屏 "模式下
//result = pMyDDSFront-> Flip(NULL,0);
}
}
出现4个错误
AfxGetMainWnd 条用错误
rcTo,rcFrom 未定义
我想用DDraw 来前后页交换
[解决办法]
那篇文档大概是转载的吧。
AfxGetMainWnd是VC中的函数,在BCB中可以用主窗口的句柄来代码,比如Handle。
至于rcTo,rcFrom和,大概是两个RECT型的变量,自己定义一下。
[解决办法]
添加
#pragma CONMENT(LIB, "DDRAW.LIB ")
RECT rcTo,rcFrom;
直接用你的 在 "全屏 "模式下
result = pMyDDSFront-> Flip(NULL,0);
可以跳过AfxGetMainWnd