所有文章 > 如何集成API > 使用 C++ 和 Win32 API 创建 GUI 窗口应用程序:从零构建 Windows 桌面界面
使用 C++ 和 Win32 API 创建 GUI 窗口应用程序:从零构建 Windows 桌面界面

使用 C++ 和 Win32 API 创建 GUI 窗口应用程序:从零构建 Windows 桌面界面

引言

在本系列 Win32 API 教程 中,我们将带你从零开始,使用 C++ Win32 窗口示例 构建最基础的 Windows GUI 编程 应用。无需任何面向对象特性,只要你掌握 C 或 C++ 就能轻松上手。即使你以前使用过 WinForms、WPF 或 Qt,本教程也会帮助你深入理解更底层的 Win32 API


开发环境与工具

  • IDE:Code::Blocks(亦可选用 Visual C++ 或其他 IDE)。
  • 编译器:GCC(MinGW)或 Microsoft VC++(MSVC)。
  • 项目类型

    • Win32 GUI 项目:含模板代码,自动链接所需库。
    • Console 项目:需手动包含 <windows.h > f,适合理解底层调用。

包含头文件与入口函数(WinMain 详解)


在源文件顶部添加 注册窗口类 所需的头:

#include < windows.h >

Win32 GUI 程序的入口函数不是 main,而是:

int WINAPI WinMain(
    HINSTANCE hInstance,      // 应用实例句柄
    HINSTANCE hPrevInstance,  // 上一个实例(忽略)
    LPSTR     lpCmdLine,      // 命令行参数
    int       nShowCmd        // 窗口显示方式
);
  • WINAPI:调用约定(__stdcall)。
  • 四个参数分别提供应用实例、旧实例、命令行字符串和启动时窗口状态。

测试 Win32 API 可用性(MessageBox 使用方法)

WinMain 中插入以下代码,验证 Win32 API 教程 环境是否就绪:

MessageBox(
    nullptr,            // 无父窗口
    "Hello, Win32!",    // 消息文本
    "First GUI",        // 窗口标题
    MB_OK               // OK 按钮
);
return 0;

编译并运行后,你将看到一个带 “OK” 按钮的对话框。


注册窗口类(RegisterClass 示例)


要创建真正的窗口,需先定义并注册一个 窗口类(WNDCLASSEXW)

  1. 初始化结构体

    WNDCLASSEXW wc = {0};
  2. 设置必要成员

    wc.cbSize        = sizeof(WNDCLASSEXW);
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = WndProc;                          // 窗口过程
    wc.hInstance     = hInstance;                        // 应用实例
    wc.hCursor       = LoadCursor(nullptr, IDC_ARROW);   // 默认箭头光标
    wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);   // 默认背景色
    wc.lpszClassName = L"MyWindowClass";                 // 类名
  3. 注册窗口类

    if (!RegisterClassExW(&wc)) {
       MessageBox(nullptr, "注册窗口类失败!", "Error", MB_ICONERROR);
       return -1;
    }

创建窗口(CreateWindow 示例)

注册成功后,使用 CreateWindowW 创建一个可见的 Windows GUI 编程 窗口:

HWND hwnd = CreateWindowW(
    L"MyWindowClass",                 // 窗口类名
    L"My First Window",               // 窗口标题
    WS_OVERLAPPEDWINDOW | WS_VISIBLE, // 窗口样式
    100, 100, 500, 500,               // 位置与大小
    nullptr, nullptr, nullptr, nullptr
);
if (!hwnd) {
    MessageBox(nullptr, "创建窗口失败!", "Error", MB_ICONERROR);
    return -1;
}

消息循环(Message Loop)

窗口创建后必须进入 消息循环,否则程序会立即退出:

MSG msg;
while (GetMessage(&msg, nullptr, 0, 0)) {  // 获取消息
    TranslateMessage(&msg);                // 翻译键盘消息
    DispatchMessage(&msg);                 // 派发给窗口过程
}
  • GetMessage:获取消息,返回 FALSE 时退出循环。
  • TranslateMessage & DispatchMessage:确保消息正确处理。

窗口过程(DefWindowProc 默认消息处理)

定义 WndProc 回调,实现 WM_DESTROY 处理 等:

LRESULT CALLBACK WndProc(
    HWND   hwnd,
    UINT   uMsg,
    WPARAM wParam,
    LPARAM lParam
) {
    switch (uMsg) {
    case WM_DESTROY:
        PostQuitMessage(0);  // 退出消息循环
        return 0;
    default:
        return DefWindowProcW(hwnd, uMsg, wParam, lParam);
    }
}
  • PostQuitMessage:让 GetMessage 返回 FALSE,结束程序。
  • DefWindowProc:默认处理所有未自定义的消息。

编译与运行

  1. 修复可能的编译错误(如逗号、括号错误)。
  2. 重新编译并运行后,你将看到一个可以 调整大小最小化关闭 的基础窗口。

总结与下一步

  • 完成了从包含 < windows.h > WinMain 详解MessageBox 使用方法注册窗口类CreateWindow 示例消息循环DefWindowProc 默认消息处理 的完整流程。

本文选自YouTube视频:https://www.youtube.com/watch?v=8GCvZs55mEM

#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费