windows.h 是 Microsoft Windows 平台下的一个核心头文件,它为 C 程序员提供了使用 Windows API (Application Programming Interface) 的所有基本功能,当你想在 Windows 上编写具有图形界面、访问系统资源、进行多线程编程等功能的程序时,几乎都离不开这个头文件。

(图片来源网络,侵删)
windows.h 的作用是什么?
windows.h 是连接你的 C 代码和 Windows 操作系统内核之间的桥梁,它定义了:
- 数据类型:Windows API 专用的数据类型,如
HWND(窗口句柄),DWORD(双字),BOOL(布尔值) 等。 - 结构体:描述各种对象信息的复杂结构,如
WNDCLASS(窗口类),MSG(消息),POINT(点坐标) 等。 - 函数原型:所有 Windows API 函数的声明,如
CreateWindow(创建窗口),MessageBox(显示消息框),GetMessage(获取消息) 等。 - 宏定义:常量、消息标识符等,如
WM_PAINT(绘制消息),IDOK(确定按钮ID)。 - 其他头文件:
windows.h本身还会自动包含其他几十个 Windows 相关的头文件,如windef.h,winnt.h,winuser.h等,让你只需要包含这一个文件就能获得大部分核心功能。
包含 windows.h
在你的 C 源文件中,只需使用 #include 指令即可:
#include <windows.h>
常见用途和代码示例
下面通过几个经典的例子来展示 windows.h 的强大功能。
示例 1:最简单的窗口程序
这是一个完整的、可以编译运行的 Windows 窗口程序,它会创建一个标题为 "Hello Windows" 的空白窗口。

(图片来源网络,侵删)
#include <windows.h>
// 窗口过程函数的声明
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// 1. 注册窗口类
WNDCLASS wc = {0};
wc.lpfnWndProc = WindowProc; // 窗口过程函数地址
wc.hInstance = hInstance; // 当前实例句柄
wc.lpszClassName = "MyWindowClass"; // 窗口类名
RegisterClass(&wc);
// 2. 创建窗口
HWND hwnd = CreateWindow(
"MyWindowClass", // 窗口类名
"Hello Windows", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, CW_USEDEFAULT, // 窗口位置 (x, y)
500, 400, // 窗口大小 (width, height)
NULL, // 父窗口句柄
NULL, // 窗口菜单句柄
hInstance, // 实例句柄
NULL // 创建参数
);
// 3. 显示窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 4. 消息循环
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg); // 翻译键盘消息
DispatchMessage(&msg); // 分发消息到窗口过程
}
return 0;
}
// 5. 窗口过程函数 - 处理发送到窗口的消息
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_DESTROY: // 当窗口被销毁时
PostQuitMessage(0); // 发送退出消息
return 0;
case WM_PAINT: // 当窗口需要重绘时
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// 在这里可以绘制文本或图形
FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
EndPaint(hwnd, &ps);
}
return 0;
}
// 处理我们没有处理的消息,交给系统默认处理
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
代码解析:
WinMain: Windows 程序的入口点,类似于main。WNDCLASS: 定义窗口的“蓝图”,包括图标、光标、背景刷以及最重要的——处理消息的函数WindowProc。RegisterClass: 向系统注册这个窗口类。CreateWindow: 根据“蓝图”创建一个实际的窗口。ShowWindow: 显示创建好的窗口。GetMessage/TranslateMessage/DispatchMessage: 经典的消息循环,不断从消息队列中获取消息并分发给WindowProc处理。WindowProc: 这是程序的心脏,系统会把各种事件(如鼠标点击、键盘输入、窗口重绘)封装成MSG结构体,通过这个函数传递给你,你在这里编写代码来响应这些事件。
示例 2:显示一个消息框
这是最简单的 API 调用之一,用于弹出一个对话框。
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// 显示一个简单的消息框
MessageBox(
NULL,
"你好,世界!\n这是一个由 Windows API 创建的消息框。",
"消息",
MB_OK | MB_ICONINFORMATION
);
return 0;
}
代码解析:
MessageBox: 一个非常简单的函数,用于弹出一个模态对话框。- 参数分别是:父窗口句柄(
NULL表示桌面)、消息内容、标题框、以及按钮和图标的样式(MB_OK表示“确定”按钮,MB_ICONINFORMATION表示信息图标)。
示例 3:获取系统信息
windows.h 也提供了许多函数来获取系统信息。

(图片来源网络,侵删)
#include <windows.h>
#include <stdio.h> // 为了使用 printf
int main() {
// 获取操作系统版本信息
OSVERSIONINFO osvi = {0};
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (GetVersionEx(&osvi)) {
printf("操作系统版本: %d.%d\n", osvi.dwMajorVersion, osvi.dwMinorVersion);
printf("平台 ID: %d\n", osvi.dwPlatformId);
}
// 获取系统内存信息
MEMORYSTATUSEX memInfo = {0};
memInfo.dwLength = sizeof(MEMORYSTATUSEX);
GlobalMemoryStatusEx(&memInfo);
printf("内存使用率: %.2f%%\n", memInfo.dwMemoryLoad);
printf("总物理内存: %lld MB\n", memInfo.ullTotalPhys / (1024 * 1024));
printf("可用物理内存: %lld MB\n", memInfo.ullAvailPhys / (1024 * 1024));
return 0;
}
重要注意事项
- 平台依赖性:
windows.h是 Windows 平台专属的,如果你写的代码需要跨平台(例如在 Linux 或 macOS 上运行),就不能使用它,跨平台开发通常会使用像 SDL, GLFW (用于图形) 或 POSIX API (用于系统调用) 这样的库。 - 庞大的头文件:因为
windows.h包含了非常多的内容,编译它会消耗一定的时间,在大型项目中,有时会包含更具体的头文件(如winuser.h用于用户界面)来加快编译速度,但对于大多数小程序,直接包含windows.h是最简单方便的。 - Unicode 支持:现代 Windows API 同时支持 ANSI (多字节字符) 和 Unicode (宽字符) 两个版本,函数名通常有两种形式,
MessageBoxA(ANSI) 和MessageBoxW(Unicode)。windows.h中的MessageBox实际上是一个宏,在编译时会根据项目设置(_UNICODE宏是否定义)解析为MessageBoxA或MessageBoxW,推荐使用 Unicode 版本以获得更好的国际化支持。
windows.h 是 Windows C/C++ 开发的基石,它为你打开了调用底层操作系统功能的大门,是编写桌面应用程序、系统工具、游戏引擎等 Windows 软件的必备工具,掌握它,就意味着你能够利用 Windows 强大的功能来构建复杂的应用程序。
