天邈汉化组技术
- UID
- 1638971
- 主题
- 0
- 阅读权限
- 100
- 帖子
- 606
- 精华
- 2
- 积分
- 983
- 金钱
- 4366
- 荣誉
- 28
- 人气
- 1
- 在线时间
- 133 小时
- 评议
- 0
- 帖子
- 606
- 精华
- 2
- 积分
- 983
- 金钱
- 4366
- 荣誉
- 28
- 人气
- 1
- 评议
- 0
|
这篇文章的内容是 DirectX 编程中最简单的,在这里拿出来是因为,在游戏汉化中有必要知道一些 DirectX 编程知识.
注释比较详尽,有不妥支持还望前辈们指正.- //DTXWindow.h
- /**
- * 程序名: DirectX9 空白实例
- * 版本: 1.0
- * 作者: Suwnayking
- * Blog: http://sunwayking.cnblogs.com/
- * QQ: 410109674
- * Email: sunwayking@163.com
- * 制作日期: 2009-03-12 18:32:03
- * 功能描述:
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1. 适合做为任何 DirectX9 游戏或程序的编写起点;
- 2. 附带了详尽的注释,适合Win32编程初学者和DirectX编程初学者自学.
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * 版权信息: 本代码开源,转载请注明作者及出处,谢谢!
- **/
- // define 定义
- #define CLASS_NAME "BlankDTX9Window"
- #define WINDOW_NAME "BlankDTX9Window"
- #define WINDOW_WIDTH 640
- #define WINDOW_HEIGHT 480
- // 引用头文件
- #include<d3d9.h>
- #include<d3dx9.h>
- // 引用库文件
- #pragma comment(lib, "d3d9.lib")
- #pragma comment(lib, "d3dx9.lib")
- // 应用程序句柄
- HINSTANCE hInstance=NULL;
- // 主窗口句柄
- HWND hWnd=NULL;
- // 定义Direct3D 对象
- LPDIRECT3D9 g_D3D = NULL;
- // 定义Direct3D 设备
- LPDIRECT3DDEVICE9 g_D3DDevice = NULL;
- // 定义D3DXFONT 对象(字体对象),和一个RECT对象(描述文本的绘制区域)
- LPD3DXFONT g_Font=NULL;
- RECT g_FontPosition={0,0,0,0};
- // 预声明各个函数
- LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);
- BOOL InitializeD3D(HWND,BOOL);
- void RenderScene();
- void DisposeD3D();
- BOOL InitializeObjects();
复制代码- //DTXWindow.cpp
- /**
- * 程序名: DirectX9 空白实例
- * 版本: 1.0
- * 作者: Suwnayking
- * Blog: http://sunwayking.cnblogs.com/
- * QQ: 410109674
- * Email: sunwayking@163.com
- * 制作日期: 2009-03-12 18:32:03
- * 功能描述:
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1. 适合做为任何 DirectX9 游戏或程序的编写起点;
- 2. 附带了详尽的注释,适合Win32编程初学者和DirectX编程初学者自学.
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * 版权信息: 本代码开源,转载请注明作者及出处,谢谢!
- **/
- #include "DTXWindow.h"
- // Win 程序主函数(程序入口函数)
- int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show)
- {
- hInstance=hInst;// 保存应用程序句柄
- WNDCLASSEX wc;// 声明窗体类并初始化
- wc.cbSize=sizeof(WNDCLASSEX);// 通常情况下,只要将此参数设置为sizeof(WNDCLASSEX)即可,如果程序中用到了GetClassInfoEx函数,那么在使用前请一定先设置cbSize的值,
- wc.style=CS_CLASSDC;// 指定一个样式,它的值可以是窗口样式的任意组合
- wc.lpfnWndProc=WndProc;// 此参数为指定一个窗口过程的回调函数
- wc.cbClsExtra=0;// 指定一个数值,记录窗口类额外的信息,默认为0
- wc.cbWndExtra=0;// 指定一个数值,记录窗口实例的额外信息,默认为0;如果程序使用WNDCLASSEX注册一个从资源文件里创建的对话框,则此参数必须设置为DLGWINDOWEXTRA,这里我也将其设置为0
- wc.hInstance=hInst;// 应用程序句柄
- wc.hIcon=NULL;// 窗口类的图标,此参数ICON资源句柄,如果设置为NULL,操作系统将提供一个默认的图标,这里可以自己指定一个ICON,如LoadIcon(NULL,MAKEINTRESOURCE(IDI_QUESTION));
- wc.hCursor=NULL;// 窗口类的鼠标样式,同样,该参数为指向CURSOR资源的句柄,如果为NULL,则当任何时候鼠标进入窗口区域时必须明确指定鼠标形状
- wc.hbrBackground=NULL;// 背景刷的句柄,即可以指向物理笔刷又可以为一个颜色值,该值必须为标准系统颜色;当使用UnregisterClass函数注销一个窗口类的时候,系统会自动删除该类的笔刷,程序运行中不可删除.如果此成员值为NULL,那么在必要的时候客户端必须自己执行渲染.确认什么时候渲染背景,你可通过BeginPaint函数提取WM_E流氓软件王EBKGND 消息或测试PAINTSTRUCT结构中fE流氓软件王e的值
- wc.lpszMenuName=NULL;// 指向一个以NULL结尾的字符串,同资源中的名字一样,作为窗口菜单的名字.如果要使用整型ID标识菜单,可以使用MAKEINTRESOURCE定义一个宏.如果它的值为NULL,那么该类创建的窗口将都没有默认的菜单
- wc.lpszClassName=CLASS_NAME;// 窗口类的名字,我们可以随便取,值类型为一个字符串
- wc.hIconSm=NULL;// 在任务栏时的图标,值设置同hIcon
- // 注册窗体类
- RegisterClassEx(
- &wc
- );
- // 创建窗体
- hWnd=CreateWindow(
- CLASS_NAME,
- WINDOW_NAME,
- WS_OVERLAPPEDWINDOW,
- 100,
- 100,
- WINDOW_WIDTH,
- WINDOW_HEIGHT,
- NULL,
- NULL,
- hInst,
- NULL
- );// 保存主窗口句柄
- // 初始化D3D
- if(FAILED(InitializeD3D(hWnd,FALSE)))
- return 0;
- // 显示窗体
- ShowWindow(
- hWnd,
- SW_SHOWDEFAULT
- );
- // 刷新窗体
- UpdateWindow(
- hWnd
- );
- MSG msg;
- ZeroMemory(
- &msg,
- sizeof(MSG)
- );
- while(msg.message!=WM_QUIT)
- {
- if (PeekMessage(// 从消息队列中获取下一条消息
- &msg,
- NULL,
- 0,
- 0,
- PM_REMOVE
- ))
- {
- TranslateMessage(// 转换消息
- &msg
- );
- DispatchMessage(// 将消息发送到消息过程函数
- &msg
- );
- }
- else
- {
- // 绘制并显示D3D场景
- RenderScene();
- }
- }
- // 释放所有D3D对象
- void DisposeD3D();
- UnregisterClass(
- CLASS_NAME,
- wc.hInstance
- );
- }
- // 窗体过程函数
- LRESULT WINAPI WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
- {
- switch(msg)
- {
- case WM_DESTROY:
- PostQuitMessage(
- 0
- );
- return 0;
- break;
- }
- return DefWindowProc(
- hWnd,
- msg,
- wParam,
- lParam
- );
- }
- // 初始化D3D设备
- BOOL InitializeD3D(HWND hWnd,BOOL bFullscreen)
- {
- D3DDISPLAYMODE displaymode;
- // 创建D3D对象
- g_D3D=Direct3DCreate9(
- D3D_SDK_VERSION
- );
- if (g_D3D==NULL)
- {
- return FALSE;
- }
- // 获取桌面显示模式
- if (FAILED(g_D3D->GetAdapterDisplayMode(
- D3DADAPTER_DEFAULT,
- &displaymode
- )))
- {
- return FALSE;
- }
- // 设置用来创建D3D设备的结构体
- D3DPRESENT_PARAMETERS d3dpp;
- ZeroMemory(
- &d3dpp,
- sizeof(D3DPRESENT_PARAMETERS
- ));
- if (bFullscreen)
- {
- d3dpp.Windowed=FALSE;
- d3dpp.BackBufferWidth=WINDOW_WIDTH;
- d3dpp.BackBufferHeight=WINDOW_HEIGHT;
- }
- else
- {
- d3dpp.Windowed=TRUE;
- }
- d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
- d3dpp.BackBufferFormat=displaymode.Format;
- // 创建D3D设备
- if(FAILED(g_D3D->CreateDevice(
- D3DADAPTER_DEFAULT,
- D3DDEVTYPE_HAL,
- hWnd,
- D3DCREATE_HARDWARE_VERTEXPROCESSING,
- &d3dpp,
- &g_D3DDevice
- )))
- {
- return FALSE;
- }
- if(FAILED(InitializeObjects()))
- {
- return FALSE;
- }
- return TRUE;
- }
- // 绘制并显示场景
- void RenderScene()
- {
- // 清除后台缓冲
- g_D3DDevice->Clear(
- 0,
- NULL,
- D3DCLEAR_TARGET,
- D3DCOLOR_XRGB(255,255,255),
- 1.0f,
- 0
- );
- // 初始化场景,开始绘制
- g_D3DDevice->BeginScene();
- // TODO: 写入自己的场景绘制代码
- // 设置文本绘制位置,并绘制文本
- g_FontPosition.top = 150;
- g_Font->DrawText(
- NULL,
- "~DirectX 9.0c~",
- -1,
- &g_FontPosition,
- DT_CENTER,
- D3DCOLOR_XRGB(0,0,0)
- );
- // 结束场景,停止绘制
- g_D3DDevice->EndScene();
- // 显示场景
- g_D3DDevice->Present(
- NULL,
- NULL,
- NULL,
- NULL
- );
- }
- // 释放D3D对象
- void DisposeD3D()
- {
- if (g_D3DDevice!=NULL)
- {
- g_D3DDevice->Release();
- }
- if (g_D3D!=NULL)
- {
- g_D3D->Release();
- }
- if (g_Font!=NULL)
- {
- g_Font->Release();
- }
- g_D3DDevice=NULL;
- g_D3D=NULL;
- g_Font=NULL;
- }
- // 初始化D3D对象
- BOOL InitializeObjects()
- {
- // 创建D3D字体对象
- if (FAILED(D3DXCreateFont(g_D3DDevice,
- 36,
- 0,
- 0,
- 1,
- FALSE,
- DEFAULT_CHARSET,
- OUT_TT_ONLY_PRECIS,
- DEFAULT_QUALITY,
- DEFAULT_PITCH | FF_DONTCARE,
- "微软雅黑",
- &g_Font
- )))
- {
- return FALSE;
- }
- // 设置文本绘制的区域
- GetClientRect(hWnd,&g_FontPosition);
- return TRUE;
- }
复制代码 作者: Sunwayking
参考资料:
DirectX SDK Document
Ultimate Game Programming with DirectX (American)Allen Sherrod
PS: 代码大家将就的看吧,语法没加高亮,大家累眼了.如果想要看有语法高亮的代码请到 我的cnblogs 去看: http://www.cnblogs.com/Sunwayking/articles/1409930.html
[ 本帖最后由 sunwayking 于 2009-3-12 20:55 编辑 ] |
|