用DirectX 12进行3D游戏编程入门前传——创建win32窗口

定义消息处理函数

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)  
{  
    switch (message)  
    {  
    case WM_DESTROY:  
        PostQuitMessage(0);  
        break;  
    default:  
        return DefWindowProc(hWnd, message, wParam, lParam);  
    }  
    return 0;  
}  

定义wWinMain函数

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,  
    _In_opt_ HINSTANCE hPrevInstance,  
    _In_ LPWSTR    lpCmdLine,  
    _In_ int       nCmdShow)  
{  
    // main function  
}  

定义窗口类

WNDCLASSEXW wcex;  
wcex.cbSize = sizeof(WNDCLASSEX);  
wcex.style = CS_HREDRAW | CS_VREDRAW;  
wcex.lpfnWndProc = WndProc;  
wcex.cbClsExtra = 0;  
wcex.cbWndExtra = 0;  
wcex.hInstance = hInstance;  
wcex.hIcon = NULL;  
wcex.hCursor = NULL;  
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);  
wcex.lpszMenuName = NULL;  
wcex.lpszClassName = L"Main";  
wcex.hIconSm = NULL; 

注册窗口类

RegisterClassExW(&wcex);  

创建窗口

HWND hWnd = CreateWindowEx(0, "Main", "demo",  
    WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);  

显示窗口

ShowWindow(hWnd, nCmdShow);  
UpdateWindow(hWnd);  

消息循环

// Main message loop:  
while (GetMessage(&msg, nullptr, 0, 0))  
{  
    TranslateMessage(&msg);  
    DispatchMessage(&msg);  
}  

处理消息

完整程序

#include <windows.h>  

// process message  
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)  
{  
    switch (message)  
    {  
    case WM_DESTROY:  
        PostQuitMessage(0);  
        break;  
    default:  
        return DefWindowProc(hWnd, message, wParam, lParam);  
    }  
    return 0;  
}  

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,  
    _In_opt_ HINSTANCE hPrevInstance,  
    _In_ LPWSTR    lpCmdLine,  
    _In_ int       nCmdShow)  
{  
    WNDCLASSEXW wcex;  
    wcex.cbSize = sizeof(WNDCLASSEX);  
    wcex.style = CS_HREDRAW | CS_VREDRAW;  
    wcex.lpfnWndProc = WndProc;  
    wcex.cbClsExtra = 0;  
    wcex.cbWndExtra = 0;  
    wcex.hInstance = hInstance;  
    wcex.hIcon = NULL;  
    wcex.hCursor = NULL;  
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);  
    wcex.lpszMenuName = NULL;  
    wcex.lpszClassName = L"Main";  
    wcex.hIconSm = NULL;  

    RegisterClassExW(&wcex);  

    HWND hWnd = CreateWindowEx(0, "Main", "demo",  
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);  

    ShowWindow(hWnd, nCmdShow);  
    UpdateWindow(hWnd);  

    MSG msg;  

    // Main message loop:  
    while (GetMessage(&msg, nullptr, 0, 0))  
    {  
        TranslateMessage(&msg);  
        DispatchMessage(&msg);  
    }  

    return (int)msg.wParam;  
}  

猜你喜欢

转载自blog.csdn.net/a39547a/article/details/80778490