用MFC构造DIRECTX应用框架
2010-07-01 20:42:58 来源:WEB开发网三、测试框架
现在,我们按下列步骤写一个测试程序来测试这个框架:
1.把刚才创建的工程框架拷贝到一个新目录下,并打开。用C1assView创建一个基于CWnd的类CTestWnd,然后把CTestWnd.h和CTestWnd.CPP文件中的所有"CWnd"字符串替换为"CDirectXWnd",并在CTestWnd.h文件头加入下列
字符串:#include"DirectXWnd.h"。
2.打开DirectX.CPP文件,在文件头加入#include"TestWnd.h",并把该文件中的所有"CDirectXWnd"字符串替换成"CTestWnd"并保存。
3.为 CTestWnd类增加一个虚函数UpdateFrame(),这个函数覆盖了其基类CDirectWnd的UpdateFrame():
void CTestWnd::UpdateFrame()
{
static int x=0,dx=5;
static int y=0,dy=5;
HDC hdc;
DDBLTFX ddbltfx;
HRESULT ddrval;
UpdateWindow();
ddbltfx.dwSize=sizeof(ddbltfx);
ddbltfx.dwFillColor=0;
ddrval=lpBackBuffer->Blt(
NULL,//dest rect
NULL,//src surface
NULL,//src rect
DDBLT_COLORFILL|DDBLT_WAIT,
&ddbltfx);
if(ddrval!=DD_OK)
{
Msg("Fill failed ddrval=0x%081x",ddrval);
return;
}
if(lpBackBuffer->GetDC(&hdc)==DD_OK)
{
if(x<0)dx=5;
if(x>590)dx=-5;
if(y<0)dy=5;
if(y>430)dy=-5;
x+=dx;y+=dy;
Ellipse(hdc,x,y,x+50,y+50);
lpBackBuffer->ReleaseDC(hdc);
}
while(1)
{
HRESULT ddrval;
ddrval=lpFrontBuffer->Flip(NULL,0);
if(ddrval==DD_OK)
{
break;
};
if(ddrval==DDERR_SURFACELOST)
{
if(!CDirectXWnd::RestoreSurfaces())
{
break;
}
}
if(ddrval!=DDERR_WASSTILLDRAWING)
{
break;
}
}
}
无心柳按:光是这么追加在测试中没有成功,可能要在CTestWnd.H中追加两行:
public:
void UpdateFrame();
否则编译可能出错。
更多精彩
赞助商链接