代码如下求大家解答
在下感激不尽
头文件
#ifndef DIRECTH_H
#define DIRECTH_H
#include <windows.h>
#include <windowsx.h>
#include <memory.h>  //用于格式化
#include <ddraw.h>#define _RGB16BIT555(r, g, b) (( b&31 ) + (( g&31 )<<5) + (( r&31 )<<10))
#define _RGB16BIT565(r, g, b) (( b&31 ) + (( g&63 )<<5) + (( r&31 )<<11))
#define _RGB24BIT(r,g,b) (( b ) + (( g )<<8) + (( r )<<16))
#define _RGB32BIT(a,r,g,b) (( b ) + (( g )<<8) + (( r )<<16) + (( a )<<24))
extern HWND hwnd;const int ScreenWidth = 1280;
const int ScreenHeight = 800;
const int ColorDepth = 8;namespace RGB8{
void _RGB8BIT(void);
void  Release_RGB8BIT();
}extern LPDIRECTDRAW7 lpdd;                                       //directdraw对象指针
extern LPDIRECTDRAWSURFACE7 lpddsprimary;                       //directdraw表面指针
typedef unsigned short USHORT;
typedef unsigned char  BYTE;
typedef unsigned int   UINT;
typedef unsigned char  UCHAR;int Game_Init(void);
int Game_Main(void);
int Game_Shutdown(void);#endif源文件A程序入口
#include "DirectH.h"HWND hwnd;
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static HICON hIcon ;
     HDC          hdc ;
     PAINTSTRUCT  ps ;
     switch (message)
     {
     case WM_CREATE :
          return 0 ;      
     case WM_PAINT :
          hdc = BeginPaint (hWnd, &ps) ;
          EndPaint (hWnd, &ps) ;
          return 0 ;             
     case WM_DESTROY :
          PostQuitMessage (0) ;
          return 0 ;
     }
 return DefWindowProc (hWnd, message, wParam, lParam) ;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR szCmdLine, int iCmdShow)
{
     TCHAR    szAppName[] = TEXT ("IconDemo") ;
     MSG      msg ;
     WNDCLASS wndclass ;     wndclass.style         =  CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
     wndclass.hCursor       = LoadCursor (NULL,IDC_ARROW ) ;
     wndclass.hbrBackground = (HBRUSH)GetStockObject (BLACK_BRUSH);
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     
     hwnd = CreateWindowEx (NULL,
  szAppName, TEXT ("Icon Demo"),
                          //WS_OVERLAPPEDWINDOW,
  WS_POPUP | WS_VISIBLE,
                          0, 0,
 ScreenWidth, ScreenHeight, 
                          NULL, NULL, hInstance, NULL) ;
     
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;
     Game_Init();
     while (true)
     {
 if(PeekMessage(&msg,0,0,0,PM_REMOVE))
 {
 if(msg.message == WM_QUIT)
 {
 break;
 }
 
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
 }
 Game_Main();
     }
 Game_Shutdown();
     return msg.wParam ;
}
源文件B图形显示
#include "DirectH.h"LPDIRECTDRAW7 lpdd = NULL;                                       //directdraw对象指针
LPDIRECTDRAWSURFACE7 lpddsprimary = NULL;                       //directdraw表面指针
LPDIRECTDRAWSURFACE7 lpddsback = NULL;                          //directdraw从表面指针
DDSURFACEDESC2 ddsd;                                   //描述创建表面的数据结构
///************************************************************************//初始化工作
int Game_Init(void)
{
//创建Directdraw对象
if( FAILED(DirectDrawCreateEx(NULL,(void**)&lpdd,IID_IDirectDraw7,NULL)))
{
return 0;
} //窗口全屏化和窗口化DDSCL_NORMAL
if(FAILED(lpdd->SetCooperativeLevel(hwnd,DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT)))
{
return 0;
} //窗口高度宽度色彩深度
if(FAILED(lpdd->SetDisplayMode(ScreenHeight,ScreenWidth,ColorDepth,0,0)))
{
return 0;
} memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize  = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.dwBackBufferCount = 1;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP; if(FAILED(lpdd->CreateSurface(&ddsd,&lpddsprimary,NULL)))
{
return 0;
}
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; if(FAILED(lpddsprimary->GetAttachedSurface(&ddsd.ddsCaps,&lpddsback)))
{
return 0;
} RGB8::_RGB8BIT();
return 1;
}///***************************************************************************//图像显示运行
int Game_Main(void)
{ memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd); lpddsback->Lock(NULL,&ddsd,DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL); UCHAR *back_buffer = (UCHAR*)ddsd.lpSurface;

if(ddsd.lPitch == ScreenWidth)
{
memset(back_buffer,0,ScreenWidth*ScreenHeight);
}
else
{
UCHAR *dest_ptr = back_buffer;
for(int y=0;y<ScreenHeight;y++)
{
memset(dest_ptr,0,ScreenWidth); dest_ptr +=ddsd.lPitch;
}
}

for(int index=0;index<5000;index++)
{
int x = rand()%256;
int y = rand()%256;
UCHAR col = rand()%256;
back_buffer[x+y*ddsd.lPitch] = col;
}

while(FAILED(lpddsprimary->Flip(NULL,DDFLIP_WAIT)));

Sleep(500);
if(FAILED(lpddsback->Unlock(NULL)))
{
return 0;
}
return 1;
}///**************************************************************************//清理对象
int Game_Shutdown(void)
{
RGB8::Release_RGB8BIT(); if(lpddsback)
{
lpddsback->Release();
lpddsback = NULL;
}
if(lpddsprimary)
{
lpddsprimary->Release();
lpddsprimary = NULL;
}
if(lpdd)
{
lpdd->Release();
lpdd = NULL;
}
return 1;
}
源文件C颜色
#include "DirectH.h"LPDIRECTDRAWPALETTE lpddpal;                                     //DirectDraw调色板对象指针
PALETTEENTRY palette[255];                                      //DirectDraw调色板数组
///************************************************************************
///8位颜色深度
namespace RGB8{
void _RGB8BIT(void)
{
for(int color=0;color<255;color++)
{
palette[color].peRed = rand()%256;
palette[color].peGreen = rand()%256;
palette[color].peBlue = rand()%256; palette[color].peFlags = PC_NOCOLLAPSE;
}
palette[0].peRed = 0;
palette[0].peGreen = 0;
palette[0].peBlue = 0; palette[0].peFlags = PC_NOCOLLAPSE; palette[255].peRed = 255;
palette[255].peGreen = 255;
palette[255].peBlue = 255; palette[255].peFlags = PC_NOCOLLAPSE; if (FAILED(lpdd->CreatePalette(DDPCAPS_8BIT | DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE, palette,&lpddpal, NULL)))
{
return;
} if(FAILED(lpddsprimary->SetPalette(lpddpal)))
{
return;
}
}void  Release_RGB8BIT()
{
lpddpal->Release();
lpddpal = NULL;
}
}///******************************************************************************
/*namespace RGB162432{
///16(555)位颜色深度
void plot_pixel_165(int x,int y, int red, int green, int blue, UINT *Video_buffer, int lpitch16)
{
UINT pixel = _RGB16BIT555(red,green,blue);
Video_buffer[x+y*lpitch16] = pixel;
}
///******************************************************************************///16 (565)位颜色深度
void plot_pixel_166(int x,int y, int red, int green, int blue, UINT *Video_buffer, int lpitch16)
{
UINT pixel = _RGB16BIT565(red,green,blue);
UINT *Video_buffer[x+y*lpitch16] = pixel;
}
///********************************************************************************///24位颜色深度
void plot_pixel_24(int x,int y,int red,int green,int blue, UINT *Video_buffer, int lpitch24)
{
UINT pixel = _RGB24BIT(red,green,blue);
UINT *Video_buffer[x+y*lpitch24] = pixel;
}
///********************************************************************************///32位颜色深度
void plot_pixel_32(int x,int y,int alpha,int red,int green ,int blue,UINT *Video_buffer,int lpitch32)
{
UINT pixel = _RGB32BIT(alpha,red,green,blue);
UINT *Video_buffer[x+y*lpitch32] = pixel;
}
}*/