WEB开发网
开发学院软件开发VC 用MFC构造DIRECTX应用框架 阅读

用MFC构造DIRECTX应用框架

 2010-07-01 20:42:58 来源:WEB开发网   
核心提示:三、测试框架现在,我们按下列步骤写一个测试程序来测试这个框架:1.把刚才创建的工程框架拷贝到一个新目录下,用MFC构造DIRECTX应用框架(2),并打开,用C1assView创建一个基于CWnd的类CTestWnd,3.为 CTestWnd类增加一个虚函数UpdateFrame(),这个函数覆盖了其基类CDirect

三、测试框架

现在,我们按下列步骤写一个测试程序来测试这个框架:

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();
否则编译可能出错。

Tags:MFC 构造 DIRECTX

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接