梁志斌的专栏

游戏开发 DirectX技术

 
首页>>
关于作者

作  者:梁  志  斌

QQ   :3055720

QQ群:14739153

友情链接
搜索日志
访问计数
最新评论

初始化一个全屏幕的D3D窗口 [2005-8-7]
happy201 发表在 DirectX开发
//****************************************************************************
//说明:
//开发环境: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_A8R8G8B8;            //色彩深度
  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); //调用缺省消息处理过程
}
≡≡≡≡≡ 评论(共 条)我要评论
 

 Copyright  @  好想~~~~好想 2005.03