Direct3D编程第一个程序框架

来源:互联网 发布:医院网络部提成方案 编辑:程序博客网 时间:2024/05/27 20:49

             2014.04.21.


  这是第一篇~~ 纪念下,今天与一位学者聊了聊天,他让我把每天自己写的代码心得之类的传到网上,这样有蛮多好处的。于是就有了流水账之编程路上~~

下面的代码是在学习浅墨的《Windows游戏编程之从零开始》之后的一些代码。虽然代码没有改动,我希望能写点心得上去(后补)

喜欢浅墨老大的那句话,ForTheDreamOfGameDevelop!







//------程序说明

//-----2014.04.21
//-----头文件部分
//-----------------------
#include <d3d9.h>


//--------库文件包含部分
#pragma comment(lib,"winmm.lib")//调用palysound函数


//------宏定义部分
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
#define WINDOW_TITLE L"[指我们用不熄灭的游戏开发梦想]Direct3D程序的核心框架"
#define SAFE_RELEASE(p) { if(p)  { (p) ->Relase();(p)=NULL;}}//定义一个安全释放宏,便于后面COM借口指针的释放
//------------全局变量声明
//------------描述:全局变量的声明


//------------全局函数声明部分
//--------描述:全局函数声明,防止“未声明的标识”系列的错误


LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wPrama, LPARAM lParam);//窗口过程函数
HRESULT Direct3D_Init(HWND hwnd );//在这个函数中进行DIrect3D的初始化
HRESULT Objects_Init(HWND hwnd);//在这个函数中进行要绘制的物体的初始化
VOID Direct3D_Render(HWND hwnd);//在这个函数中进行DIrect3D渲染代码的书写
VOID Direct3D_CleanUp();//在这个函数中清理COM资源以及其他资源


//----------------------WinMain函数
//----------------------描述:Windows应用程序入口函数
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
//----------------设计一个完整窗口类
WNDCLASSEX wndClass ={0};//用WINDCLASSEX定义了一个类
wndClass.cbSize=sizeof(WNDCLASSEX ); //设置结构体的字节数大小
wndClass.style=CS_HREDRAW|CS_VREDRAW;//设置窗口样式
wndClass.lpfnWndProc =WndProc;
wndClass.cbClsExtra=0;
wndClass.cbWndExtra=0;
wndClass.hIcon=(HICON)::LoadImage(NULL,L"icon.ico",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);//本地加载自定义ico图标
wndClass.hCursor = LoadCursor (NULL,IDC_ARROW); //制定窗口类的光标句柄
wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);//制定白色画刷句柄
wndClass.lpszMenuName=NULL;
wndClass.lpszClassName=L"ForTheDreamOfDevelop";


//----------注册窗口类
if(!RegisterClassEx(&wndClass))
return -1;


//--正式创建窗口
HWND hwnd =CreateWindow(L"ForTheDreamOfDevelop",WINDOW_TITLE,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,WINDOW_WIDTH,WINDOW_HEIGHT,NULL,NULL,hInstance,NULL);


//Direct3D资源初始化
Direct3D_Init(hwnd);


//------------窗口的移动与更新
MoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);//调整窗口显示时的位置,窗口左上角位于(250,80)处
ShowWindow(hwnd,nShowCmd);
PlaySound(L"War3XMainScreen.wav",NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
MessageBox(hwnd,L"DirectX,等着瞧吧,我们来征服你了",L"我的消息窗口",0);


//---------消息循环过程
MSG msg={0};
while(msg.message!= WM_QUIT)
{
if(PeekMessage(&msg,0,0,0,PM_REMOVE))

{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{

Direct3D_Render(hwnd);
}
}


//窗口类的注销
UnregisterClass(L"ForTheDreamOfDevelop",wndClass.hInstance);//程序准备结束,注销窗口类
return 0;


}


//--------------WndProc函数
//-------------------------------------------------------








LRESULT CALLBACK WndProc(HWND hwnd,UINT message ,WPARAM wParam,LPARAM lParam )


{
switch (message)
{
case WM_PAINT:
Direct3D_Render(hwnd);
ValidateRect(hwnd,NULL);
break;


case WM_KEYDOWN:
if(wParam==VK_ESCAPE)
DestroyWindow(hwnd);
break;
case WM_DESTROY:
Direct3D_CleanUp();
PostQuitMessage(0);//向系统表明有个线程有终止请求。用来响应WM_DESTROY消息
break;


default:
return DefWindowProc(hwnd,message,wParam,lParam);//调用默认的窗口过程
}
return 0;// 正常退出


}


//--------------------------Direct3D_Init
HRESULT Direct3D_Init(HWND hwnd )
{
if (!S_OK==Objects_Init(hwnd))return E_FAIL;
return S_OK;
}
//----------------Object_Init
HRESULT Objects_Init(HWND hwnd)
{
return  S_OK;
}


//-------------------Direct3D_Render()函数
void Direct3D_Render(HWND hwnd )
{
//暂时为空
}
//--------------Direct3D_CheanUp函数
void Direct3D_CleanUp()
{


//暂时为空

}


0 0
原创粉丝点击