代码如下求大家解答
在下感激不尽
头文件
#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;
}
}*/
在下感激不尽
头文件
#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;
}
}*/
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货