您的位置:首页 > 其它

第一个DX程序

2016-02-23 20:39 316 查看
在创建空白窗口的代码中,

函数入口部分做了如下工作:

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR cmdLine, int nShow){
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(cmdLine);
// ①. 创建窗口类WNDCLASSEX的类对象wndClass = {0};
// WNDCLASSEX实际上是个结构体structure
// ②. 对结构体成员依次赋值
// ③. 注册窗口类RegisterClassEx(&wndClass)
// ④. 调整大小为:640*480
// ⑤. 创建窗口:CreateWindow,该函数返回窗口句柄hwnd
// ⑥. 显示窗口:ShowWindow(hwnd, nShow);

// 初始化Demo;Demo Initialize
MSG msg = {0};
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))        // PM_REMOVE将消息从队列中移除
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{ // 没有收到消息,在游戏中就只做更新 Update 和渲染 rendering 这两件事。
//Update
//Draw
}
}
// 关闭Demo;Demo Shutdown
return static_cast<int>(msg.wParam);
}


可运行代码,请点击:空白项目+win32代码=窗口

2. 窗口过程部分:

代码如下

// 窗口过程函数声明
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);


窗口过程函数返回 LRESULT 类型并且有回调 CALLBACK 修饰。

该回调函数接受参数窗口的句柄来调度该窗口的消息,无符号整型消息代号。及两个不经常使用的额外信息参数。

记得在winMain()中我们将回调函数WndProc赋给了WNDCLASSEX结构的lpfnWndProc成员。

wndClass.lpfnWndProc = WndProc;


当程序获取消息后,调用该函数处理:

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hDC;

switch(message)
{
// 响应绘制消息
case WM_PAINT:
hDC = BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
break;

// 响应退出消息 ,PostQuitMessage处理退出消息
case WM_DESTROY:
PostQuitMessage(0);
break;
// 处理那些我们不感兴趣的消息
default:
return DefWndowProc(hwnd, message, wParam, lParam);
}
return 0;
}


添加D3D支持





未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: