|
|
一运行就说会出错~~~~~~
郁闷到了
directx.h
///////////////////////////////////////////////////////////////////////////
const int SCREEN_WIDTH =640 ;
const int SCREEN_HEIGHT =480 ;
///////////////////////////////////////////////////////////////////////////
LPDIRECTDRAW7 lpdd = NULL;
LPDIRECTDRAWSURFACE7 lpddsprimary = NULL;
LPDIRECTDRAWPALETTE lpddpal = NULL;
DDSURFACEDESC2 ddsd;
PALETTEENTRY palette[256];
///////////////////////////////////////////////////////////////////////////
class DirectX
{
public:
// DirectX(void);
bool game_start();
bool game_main();
};
bool DirectX::game_start()
{
//设置dx接口
if (FAILED(DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)))
{
return(1);
}
//设置windows的协作模式
lpdd->SetCooperativeLevel(NULL, DDSCL_NORMAL);
//设置显示模式
lpdd->SetDisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,8,0,0);
return(0);
//创建一个显示主表面
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize =sizeof(ddsd);
ddsd.dwFlags =DDSD_CAPS;
ddsd.ddsCaps.dwCaps =DDSCAPS_PRIMARYSURFACE;
if (FAILED(lpdd->CreateSurface(&ddsd,&lpddsprimary,NULL)))
{
return(1);
}
//设置绘图板
for(int color =1;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(1);
}
if (FAILED(lpddsprimary->SetPalette(lpddpal)))
{
return(1);
}
}
bool DirectX::game_main()
{
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
if (FAILED(lpddsprimary->Lock(NULL, &ddsd,DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL)))
{
return(1);
}
if (FAILED(lpddsprimary->Unlock(NULL)))
{
return(1);
}
return(1);
}
win32.cpp
#define WIN32_LEAN_ANP_MEAN //不使用mfc编译
#pragma comment(lib,"dxguid.lib")
#pragma comment(lib,"ddraw.lib")
#pragma comment(lib,"dxerr8.lib")
#pragma comment(lib,"winmm.lib")
#define INITGUID // make sure directX guids are included
#include <windows.h> // include important windows stuff
#include <windowsx.h>
#include <mmsystem.h>
#include <iostream.h> // include important C/C++ stuff
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#include <io.h>
#include <fcntl.h>
#include <ddraw.h>
#include"resource.h"
#include"directx.h"
////////////////////////////////////////////////////////////////////////////////////
//定义常量
#define windows_name "exp"
//消息循环
LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
PAINTSTRUCT ps;
HDC hdc;
switch(msg)
{
case WM_CREATE:
{
return 0;
}
break;
case WM_PAINT:
{
hdc =BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return 0;
}
break;
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
break;
case WM_KEYDOWN:
switch( wparam )
{
case VK_ESCAPE:
PostMessage(hwnd, WM_CLOSE, 0, 0);
break;
}
break;
default:break;
}
return (DefWindowProc(hwnd,msg,wparam,lparam));
}
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG msg;
DirectX DX;
wc.cbSize =sizeof(WNDCLASSEX);
wc.style =CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc =WindowProc;
wc.cbClsExtra =0;
wc.cbWndExtra =0;
wc.hInstance =hinstance;
wc.hIcon =LoadIcon(hinstance,MAKEINTRESOURCE(IDI_ICON1));
wc.hCursor =LoadCursor(hinstance,IDC_ARROW);
wc.hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName =NULL;
wc.lpszClassName =windows_name;
wc.hIconSm =LoadIcon(hinstance,MAKEINTRESOURCE(IDI_ICON2));
if(!RegisterClassEx(&wc))
return 0;
if(!(hwnd = CreateWindowEx(
NULL,
windows_name,
"exp!",
WS_POPUP | WS_VISIBLE,
0,
0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),
NULL,
NULL,
hinstance,
NULL)))
return 0;
DX.game_start();
while(TRUE)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
DX.game_main();
}
return(msg.wParam);
}
|
|