ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DirectX 9.0 3D 游戏开发编程基础之一

DirectX 9.0 3D 游戏开发编程基础之一

原创 Linux操作系统 作者:whufly85_ 时间:2011-06-06 12:03:07 0 删除 编辑
      在进行D3D编程之前,需要创建一个窗口进行显示。本例采用Windows SDK编写窗口程序,作为以后学习的框架,以后关于本书的学习的例子都是根据本例进行修改。
/*
*创建win32窗口
*whufly
*2011年6月5日
*/

#include

LRESULT CALLBACK WinProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
void Render();

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    WNDCLASSEX wndclass;
    wndclass.cbSize = sizeof(WNDCLASSEX);
    wndclass.hInstance = hInstance;
    wndclass.style. = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WinProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_PEN);
    wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
    wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = "CppWindow";
    wndclass.hIconSm =  LoadIcon(wndclass.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));


    if (!RegisterClassEx(&wndclass))
    {
        MessageBox(NULL,
            "Call to RegisterClassEx failed!",
            "Win32 Guided Tour",
            NULL);

        return 1;
    }

    HWND hwnd = CreateWindow(
        "CppWindow",
        "D3D窗口",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        500, 100,
        NULL,
        NULL,
        hInstance,
        NULL
        );

    if (!hwnd)
    {
        MessageBox(NULL,
            "Call to CreateWindow failed!",
            "Win32 Guided Tour",
            NULL);

        return 1;
    }

    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);

    MSG msg;
    msg.message = NULL;
    while (msg.message !=WM_QUIT)
    {
        if (PeekMessage(&msg,0,0,0,PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
            //D3D渲染函数
            Render();
        }
    }

    return (int)msg.wParam;
}

void Render()
{

}

LRESULT CALLBACK WinProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    switch (msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        break;
    }

    return DefWindowProc(hwnd,msg,wParam,lParam);
}
       需要说明的是,本例采用的是PeekMessage,而不是GetMessage,因为使用GetMessage时,如果没有取到消息,它就把执行权交给其他进程,而PeekMessage会一直占用你的CPU,因此我们可以在没有输入消息的时候也处理一些事情,比如本例的Render,也就是说本书中D3D的渲染都是在cpu空闲时进行的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24818796/viewspace-697218/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2011-06-02

  • 博文量
    3
  • 访问量
    5031