createwindow消息循環(huán)處理方式

小樊
87
2024-07-02 23:08:20

窗口消息循環(huán)是在窗口程序中用來(lái)處理窗口消息的主要方法。在Windows應(yīng)用程序中,通常會(huì)創(chuàng)建一個(gè)消息循環(huán)來(lái)監(jiān)聽(tīng)和處理系統(tǒng)發(fā)送的消息,并根據(jù)消息的類型來(lái)執(zhí)行相應(yīng)的操作。

以下是一個(gè)簡(jiǎn)單的示例,演示如何創(chuàng)建一個(gè)窗口消息循環(huán):

#include <Windows.h>

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

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASS wc = {};
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = L"WindowClass";

    RegisterClass(&wc);

    HWND hwnd = CreateWindow(L"WindowClass", L"Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);

    ShowWindow(hwnd, nCmdShow);
    
    MSG msg;
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

在這個(gè)示例中,我們定義了一個(gè)簡(jiǎn)單的窗口過(guò)程函數(shù)WndProc來(lái)處理窗口消息。在WinMain函數(shù)中,我們創(chuàng)建了一個(gè)注冊(cè)窗口類并創(chuàng)建了一個(gè)窗口實(shí)例。然后我們進(jìn)入一個(gè)while循環(huán),在循環(huán)中不斷調(diào)用GetMessage函數(shù)來(lái)獲取消息,然后通過(guò)TranslateMessage和DispatchMessage函數(shù)來(lái)處理消息。

當(dāng)窗口關(guān)閉時(shí),我們會(huì)調(diào)用DestroyWindow函數(shù)來(lái)銷毀窗口,然后調(diào)用PostQuitMessage函數(shù)來(lái)向消息隊(duì)列中發(fā)送一個(gè)退出消息,最終退出消息循環(huán)并返回消息循環(huán)的返回值。

這個(gè)示例演示了一個(gè)簡(jiǎn)單的窗口消息循環(huán)處理方式,在實(shí)際開發(fā)中可以根據(jù)需要對(duì)消息進(jìn)行更復(fù)雜的處理和分發(fā)。

0