返回

实在令人费解,望能帮我一下,非常感激!

编译通过,但是无法显示图片,不知道什么地方出错,能占用你几分钟帮我看一下吗?#define WIN32_LEAN_AND_MEAN

#include <windows.h>#include <ddraw.h>#include "ddutil.h"

const num = 3;const spr = 0;const Buf = 1;const Back = 2;/*const mouse = 3;const ani0 = 4;const ani1 = 5;const ani2 = 6;const ani3 = 7;const ani4 = 8;const ani5 = 9;const ani6 = 10;const ani7 = 11;*/

const DWORD srckey = DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT;const DWORD nokey = DDBLTFAST_NOCOLORKEY|DDBLTFAST_WAIT;

LPDIRECTDRAW7 lpdd ;LPDIRECTDRAWSURFACE7 dds[num];//LPDIRECTDRAWGAMMACONTROL lpgammacontrol;

bool key;

#define KEYDOWN(vk_code) (GetAsyncKeyState(vk_code)&0x8000?1:0)#define KEYUP(vk_code) (GetAsyncKeyState(vk_code)&0x8000?0:1)

HINSTANCE hinstance_app = NULL;HWND main_win_handle = NULL;HWND hwnd;RECT rect;

int sw[num] ;int sh[num] ;

void Blt(int,int,int,int,int);int Game_Init();int Game_Main();int Game_Shutdown();

int Game_Init(){ DDSURFACEDESC2 ddsd;

if(FAILED(DirectDrawCreateEx(NULL,(void **)&lpdd,IID_IDirectDraw7,NULL))) return (0); if(FAILED(lpdd->SetCooperativeLevel(main_win_handle,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN))) return (0);

if(FAILED(lpdd->SetDisplayMode(640,480,32,0,DDSDM_STANDARDVGAMODE))) if(FAILED(lpdd->SetDisplayMode(640,480,24,0,DDSDM_STANDARDVGAMODE))) return (0); memset(&ddsd, 0, sizeof(DDSURFACEDESC2));

ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT;

ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_COMPLEX|DDSCAPS_FLIP;

ddsd.dwBackBufferCount = 1;

lpdd->CreateSurface(&ddsd,&dds[spr],NULL);

ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; dds[spr]->GetAttachedSurface(&ddsd.ddsCaps,&dds[Buf]); ddsd.dwFlags = DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;

sw[spr] = sw[Buf] = 640; sh[spr] = sh[Buf] = 480; // sw[mouse] = 32; sh[mouse] = 26; sw[Back] = 1000; sh[Back] = 800;/* sw[ani0] = 285; sh[ani0] = 146; sw[ani1] = 285; sh[ani1] = 146; sw[ani2] = 285; sh[ani2] = 146; sw[ani3] = 285; sh[ani3] = 146; sw[ani4] = 285; sh[ani4] = 146; sw[ani5] = 285; sh[ani5] = 146; sw[ani6] = 285; sh[ani6] = 146; sw[ani7] = 285; sh[ani7] = 146;*/ for(int i=2; i<3; i++) { ddsd.dwWidth = sw[i]; ddsd.dwHeight = sh[i]; lpdd->CreateSurface(&ddsd,&dds[i],NULL); }

DDBLTFX ddblt; ddblt.dwSize = sizeof(DDBLTFX); ddblt.dwFillPixel = 0; dds[spr]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt); dds[Buf]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt); dds[Back]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt);/* dds[mouse]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt); dds[ani0]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt); dds[ani1]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt); dds[ani2]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt); dds[ani3]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt); dds[ani4]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt); dds[ani5]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt); dds[ani6]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt); dds[ani7]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt);*/

DDReLoadBitmap(dds[Back],"34.bmp");/* DDReLoadBitmap(dds[mouse],"Tile.bmp"); DDReLoadBitmap(dds[ani0],"s0_24.bmp"); DDReLoadBitmap(dds[ani1],"s1_24.bmp"); DDReLoadBitmap(dds[ani2],"s2_24.bmp"); DDReLoadBitmap(dds[ani3],"s3_24.bmp"); DDReLoadBitmap(dds[ani4],"s4_24.bmp"); DDReLoadBitmap(dds[ani5],"s5_24.bmp"); DDReLoadBitmap(dds[ani6],"s6_24.bmp"); DDReLoadBitmap(dds[ani7],"s7_24.bmp");

//DDSetColorKey(dds[ani0],RGB(0,0,0));*/

return (1);}

int Game_Main(){

if( key ) { PostQuitMessage(0); return 0; }

if( KEYDOWN(VK_ESCAPE) ) { key = TRUE; }

DDBLTFX ddblt; ddblt.dwSize = sizeof(DDBLTFX); ddblt.dwFillColor = 0; dds[Buf]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddblt); RECT rect={0,0,640,480}; //dds[Buf]->BltFast(0,0,dds[Back],&rect,nokey); Blt(0,0,Back,Buf,nokey); dds[spr]->Flip(NULL,DDFLIP_WAIT);

Sleep (30) ;

return (1);}

int Game_Shut(){ for(int index=0; index<num ;index++) { if(dds[index]) { dds[index]->Release(); } } if(lpdd) lpdd->Release(); return (1);}

LRESULT CALLBACK WinProc(HWND hwnd,UINT msg, WPARAM wparam,LPARAM lparam){ switch(msg) { case WM_CREATE: { return (0); }break; case WM_SETCURSOR: { SetCursor(NULL); return 0; }break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc; hdc=BeginPaint(hwnd,&ps); EndPaint(hwnd,&ps); return (0); }break; case WM_DESTROY: { PostQuitMessage(0); return (0); }break; default:break; } return (DefWindowProc(hwnd,msg,wparam,lparam));

}

int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance, LPSTR lpcmdline,int ncmdshow){

WNDCLASSEX wndclass; MSG msg;

wndclass.cbSize =sizeof(wndclass); wndclass.style =CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc = (WNDPROC)WinProc; wndclass.cbWndExtra = 0; wndclass.cbClsExtra = 0; wndclass.hInstance = hinstance; wndclass.hIcon = NULL; wndclass.hCursor = NULL; wndclass.hbrBackground = NULL; wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "DoIt"; wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION);

if(!RegisterClassEx(&wndclass)) return (0);

hinstance_app = hinstance;

if(!(hwnd = CreateWindowEx(NULL,"DoIt","YouCanDoIt", WS_POPUP|WS_MAXIMIZE, 0,0, 640, 480, NULL,NULL,hinstance,NULL))) return (0);

main_win_handle = hwnd; ShowWindow(hwnd,ncmdshow);

UpdateWindow(hwnd); Game_Init();

while(1) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if(msg.message == WM_QUIT) break; TranslateMessage(&msg);

DispatchMessage(&msg); } Game_Main(); } Game_Shut(); return (msg.wParam);}

void Blt(int x,int y,int src,int dest,int method){ int rl,rt,tx1,tx2,ty1,ty2,tl,tt; RECT rect2=rect;

rl=rect.left; rt=rect.top;

if (rect.left>=sw[src]) goto noblt; if (rect.top>=sh[src]) goto noblt; if (rect.right<=0) goto noblt; if (rect.bottom<=0) goto noblt;

if (rect.left<0) rect.left=0; if (rect.top<0) rect.top=0; if (rect.right>sw[src]) rect.right=sw[src]; if (rect.bottom>sh[src]) rect.bottom=sh[src];

tx1=x+rect.left-rl; ty1=y+rect.top-rt; tx2=x+rect.right-rl; ty2=y+rect.bottom-rt;

if (tx2<=0) goto noblt; if (ty2<=0) goto noblt; if (tx1>=sw[dest]) goto noblt; if (ty1>=sh[dest]) goto noblt;

tl=tx1; tt=ty1;

if (tx1<0) tx1=0; if (ty1<0) ty1=0; if (tx2>sw[dest]) tx2=sw[dest]; if (ty2>sh[dest]) ty2=sh[dest]; rl=rect.left; rt=rect.top;

rect.left=tx1-tl+rl; rect.top=ty1-tt+rt; rect.right=tx2-tl+rl; rect.bottom=ty2-tt+rt;

dds[dest]->BltFast(tx1,ty1,dds[src],&rect,method);noblt: rect=rect2;}

名字: 自动排版 密码:

回复 | (424) | Raypang | 2004-07-19 08:52:55