初始化Direct3D窗口

//****************************************************************************

//说明:

//开发环境: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:为了保持与16windows应用程序的兼容性

                    LPSTR lpCmdLine,&nbsp;      //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); //调用缺省消息处理过程

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值