開發(fā)環(huán)境與工具


包含頭文件與入口函數(shù)(WinMain 詳解)


在源文件頂部添加 注冊(cè)窗口類 所需的頭:

#include < windows.h >

Win32 GUI 程序的入口函數(shù)不是 main,而是:

int WINAPI WinMain(
    HINSTANCE hInstance,      // 應(yīng)用實(shí)例句柄
    HINSTANCE hPrevInstance,  // 上一個(gè)實(shí)例(忽略)
    LPSTR     lpCmdLine,      // 命令行參數(shù)
    int       nShowCmd        // 窗口顯示方式
);

測(cè)試 Win32 API 可用性(MessageBox 使用方法)

WinMain 中插入以下代碼,驗(yàn)證 Win32 API 教程 環(huán)境是否就緒:

MessageBox(
    nullptr,            // 無父窗口
    "Hello, Win32!",    // 消息文本
    "First GUI",        // 窗口標(biāo)題
    MB_OK               // OK 按鈕
);
return 0;

編譯并運(yùn)行后,你將看到一個(gè)帶 “OK” 按鈕的對(duì)話框。


注冊(cè)窗口類(RegisterClass 示例)


要?jiǎng)?chuàng)建真正的窗口,需先定義并注冊(cè)一個(gè) 窗口類(WNDCLASSEXW)

  1. 初始化結(jié)構(gòu)體

    WNDCLASSEXW wc = {0};
  2. 設(shè)置必要成員

    wc.cbSize        = sizeof(WNDCLASSEXW);
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = WndProc;                          // 窗口過程
    wc.hInstance     = hInstance;                        // 應(yīng)用實(shí)例
    wc.hCursor       = LoadCursor(nullptr, IDC_ARROW);   // 默認(rèn)箭頭光標(biāo)
    wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);   // 默認(rèn)背景色
    wc.lpszClassName = L"MyWindowClass";                 // 類名
  3. 注冊(cè)窗口類

    if (!RegisterClassExW(&wc)) {
       MessageBox(nullptr, "注冊(cè)窗口類失敗!", "Error", MB_ICONERROR);
       return -1;
    }

創(chuàng)建窗口(CreateWindow 示例)

注冊(cè)成功后,使用 CreateWindowW 創(chuàng)建一個(gè)可見的 Windows GUI 編程 窗口:

HWND hwnd = CreateWindowW(
    L"MyWindowClass",                 // 窗口類名
    L"My First Window",               // 窗口標(biāo)題
    WS_OVERLAPPEDWINDOW | WS_VISIBLE, // 窗口樣式
    100, 100, 500, 500,               // 位置與大小
    nullptr, nullptr, nullptr, nullptr
);
if (!hwnd) {
    MessageBox(nullptr, "創(chuàng)建窗口失?。?quot;, "Error", MB_ICONERROR);
    return -1;
}

消息循環(huán)(Message Loop)

窗口創(chuàng)建后必須進(jìn)入 消息循環(huán),否則程序會(huì)立即退出:

MSG msg;
while (GetMessage(&msg, nullptr, 0, 0)) {  // 獲取消息
    TranslateMessage(&msg);                // 翻譯鍵盤消息
    DispatchMessage(&msg);                 // 派發(fā)給窗口過程
}

窗口過程(DefWindowProc 默認(rèn)消息處理)

定義 WndProc 回調(diào),實(shí)現(xiàn) WM_DESTROY 處理 等:

LRESULT CALLBACK WndProc(
    HWND   hwnd,
    UINT   uMsg,
    WPARAM wParam,
    LPARAM lParam
) {
    switch (uMsg) {
    case WM_DESTROY:
        PostQuitMessage(0);  // 退出消息循環(huán)
        return 0;
    default:
        return DefWindowProcW(hwnd, uMsg, wParam, lParam);
    }
}

編譯與運(yùn)行

  1. 修復(fù)可能的編譯錯(cuò)誤(如逗號(hào)、括號(hào)錯(cuò)誤)。
  2. 重新編譯并運(yùn)行后,你將看到一個(gè)可以 調(diào)整大小、最小化關(guān)閉 的基礎(chǔ)窗口。

總結(jié)與下一步

本文選自YouTube視頻:https://www.youtube.com/watch?v=8GCvZs55mEM

上一篇:

如何在Python中使用ChatGPT API?

下一篇:

Qwen-MT API快速接入教程:如何使用Go語言實(shí)現(xiàn)92種語言互譯
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)