//****************************************************************************
//说明:
//开发环境:Visual C++.NET 7.1.3091 DirectX 9.0C
//操作系统:WindowsXP SP2
//硬件:AMD Athlon XP 2500+,DDR400 256MB,Geforce4 MX440 AGP 8X 64MB
//****************************************************************************
//包含文件
#include<d3d9.h>
#include<d3dx9.h>
#include<windows.h>
//资源文件
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
//变量说明
HWND hWnd;
LPDIRECT3D9 D3d9;
LPDIRECT3DDEVICE9 D3ddevice9;
//函数申明
BOOL InitWindow(HINSTANCE hInstance,int nCmdShow);
LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
//*******************************************************************
//函数:InitWindow()
//功能:创建窗口
//编写人:梁志斌
//*******************************************************************
static BOOL InitWindow(HINSTANCE hInstance,int nCmdShow)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0; //分配给窗口类结构之后的额外字节数
wndcls.cbWndExtra=0; //分配给窗口实例之后的额外的字节数
wndcls.hbrBackground=CreateSolidBrush(RGB(58,110,165)); //桌面背景色
wndcls.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口中的鼠标形状
wndcls.hIcon=LoadIcon(NULL,"CounterStrike.ico"); //窗口图标
wndcls.hInstance=hInstance; //窗口所对应的应用程序的句柄
wndcls.lpfnWndProc=(WNDPROC)WinProc; //窗口消息处理函数的指针
wndcls.lpszClassName="CounterStrike"; //窗口的类名称
wndcls.lpszMenuName=NULL; //窗口的菜单资源名称
wndcls.style= NULL; //窗口的风格
if(!RegisterClass(wndcls)) //注册窗口
{
::MessageBox(0, "RegisterClass() - FAILED", 0, 0);
return FALSE;
}
hWnd=CreateWindow("CounterStrike","CounterStrike",WS_POPUP|WS_MAXIMIZE|WS_MINIMIZE,0,0,
GetSystemMetrics(SM_CXSCREEN), //此函数返回屏幕宽度
GetSystemMetrics(SM_CYSCREEN), //此函数返回屏幕高度
GetDesktopWindow(),NULL,hInstance,NULL);
if(!hWnd)
{
::MessageBox(0, "CreateWindow() - FAILED", 0, 0);
return FALSE;
}
ShowWindow(hWnd,SW_SHOWNORMAL);
UpdateWindow(hWnd);
return TRUE;
}
//**********************************************************************
//函数:InitD3D()
//功能:初始化D3D
//编写人:梁志斌
//**********************************************************************
bool InitD3D()
{
if(NULL==(D3d9=Direct3DCreate9(D3D_SDK_VERSION)))
{
::MessageBox(0, "Direct3DCreate9() - FAILED", 0, 0);
return FALSE;
}
//取得当前显示设备的显示模式
D3DDISPLAYMODE d3ddm;
if(D3D_OK!=(D3d9->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,d3ddm)))
{
::MessageBox(0,"GetAdapterDisplayMode() - FAILED",0,0);
return FALSE;
}
//设置D3D设备的属性
D3DPRESENT_PARAMETERS D3dpp;
ZeroMemory(D3dpp, sizeof(D3dpp));
D3dpp.Windowed=false; //全屏
D3dpp.hDeviceWindow=hWnd; //窗口设备的句柄
D3dpp.SwapEffect=D3DSWAPEFFECT_FLIP; //设置交换模式
D3dpp.BackBufferCount=1; //有一个后台缓存
D3dpp.BackBufferWidth=d3ddm.Width; //屏幕宽度
D3dpp.BackBufferHeight=d3ddm.Height; //屏幕长度
D3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE; //立即显示刷新后的图像
D3dpp.BackBufferFormat=D3DFMT_A8R 8G8B8; //色彩深度
D3dpp.EnableAutoDepthStencil=true; //开启自动深度缓冲
D3dpp.AutoDepthStencilFormat=D3DFMT_D24S8; //24位深度缓冲并保留8位模版缓冲(stencil buffer)
//创建D3D设备
if(D3D_OK!=(D3d9->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,D3dpp,D3ddevice9)))
{
::MessageBox(0, "CreateDevice() - FAILED", 0, 0);
return FALSE;
}
return true;
}
VOID Cleanup()
{
if(D3ddevice9!=NULL)
D3ddevice9->Release();
if(D3d9!=NULL)
D3d9->Release();
}
//**********************************************************************
//函数:WinMain()
//功能:Windows 程序入口函数。创建主窗口,处理消息循环
//编写人:梁志斌
//**********************************************************************
int WINAPI WinMain( HINSTANCE hInstance, //hInstance:表示该应用程序的句柄
HINSTANCE hPrevInstance,; //hPrevInstance:为了保持与16位windows应用程序的兼容性
LPSTR lpCmdLine, //lpCmdLine:指向命令行参数字符串的指针
int nCmdShow) //nCmdShow:指定应用程序窗口显示方式的整数
{
InitWindow(hInstance,nCmdShow);
InitD3D();
MSG msg;
ZeroMemory(msg, sizeof(msg) );
while(GetMessage(msg,NULL,0,0))
{
TranslateMessage( msg );
DispatchMessage( msg );
}
return (int)msg.wParam;
}
//*******************************************************************
//函数:WinProc()
//功能:处理窗口消息
//编写人:梁志斌
//*******************************************************************
LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
case WM_KEYDOWN: //击键消息
switch(wParam)
{
case VK_ESCAPE:
::MessageBox(hWnd,"ESC键按下了,确定退出!","Keyboard",MB_OK);
DestroyWindow(hWnd); //释放窗口
Cleanup();
PostQuitMessage(0); //给窗口发送WM_QUIT消息
return 0; //处理完一个消息后返回0
}
case WM_RBUTTONDOWN:
::MessageBox(hWnd,"鼠标右键按下了!","Mouse",MB_OK);
return 0;
return DefWindowProc(hWnd,msg,wParam,lParam); //调用缺省消息处理过程
}