WindowShow 并不是 C 语言标准库或 Windows API 中的一个原生函数。

(图片来源网络,侵删)
它更像是一个自定义函数名或者在某些特定库(如游戏引擎、GUI 框架)中封装好的函数,其目的是为了统一、方便地显示一个窗口。
理解 WindowShow 的关键在于理解它背后所代表的 Windows API 函数。
WindowShow 的核心:ShowWindow
在 Windows 编程中,真正用于控制窗口显示状态的原生 API 函数是 ShowWindow。
任何名为 WindowShow 的自定义函数,其内部几乎肯定都调用了 ShowWindow。

(图片来源网络,侵删)
ShowWindow 函数原型
#include <windows.h> BOOL ShowWindow( HWND hWnd, // 要显示或隐藏的窗口句柄 int nCmdShow // 如何显示窗口 );
参数详解
-
hWnd(HWND):HWND是 "Handle to a Window" 的缩写,即窗口句柄。- 它是一个唯一的标识符,操作系统通过它来管理和操作你的窗口。
- 你在创建窗口(例如通过
CreateWindowEx函数)后,会得到这个句柄,后续所有对窗口的操作(如显示、隐藏、移动、绘制)都需要这个句柄。
-
nCmdShow(int):- 这是一个整数值,它告诉系统应该如何显示窗口,最常用的几个值是:
SW_SHOWNORMAL(1): 激活窗口并显示为正常大小。SW_SHOWMINIMIZED(2): 激活窗口并将其显示为最小化状态(在任务栏上)。SW_SHOWMAXIMIZED(3): 激活窗口并将其显示为最大化状态(占满整个屏幕)。SW_SHOW(5): 激活窗口并以其当前大小和位置显示。SW_HIDE(0): 隐藏窗口(活动窗口被其他窗口取代)。SW_RESTORE(9): 激活并显示窗口,如果窗口最小化或最大化,则将其还原到原来的大小和位置。
- 这是一个整数值,它告诉系统应该如何显示窗口,最常用的几个值是:
WindowShow 的典型实现(自定义函数)
假设你正在写一个程序,为了代码更清晰,你可能会封装一个自己的 WindowShow 函数。
示例代码:

(图片来源网络,侵删)
#include <windows.h>
// 自定义的 WindowShow 函数
// 它封装了 ShowWindow,使其调用更直观
void WindowShow(HWND hwnd, int showState) {
// 调用底层的 Windows API 函数
ShowWindow(hwnd, showState);
// (可选) 强制窗口立即重绘,确保显示效果正确
UpdateWindow(hwnd);
}
// 程序的入口点 (WinMain)
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// 1. 注册窗口类 (略)
WNDCLASS wc = {0};
wc.lpfnWndProc = DefWindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = "MyWindowClass";
RegisterClass(&wc);
// 2. 创建窗口
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
"MyWindowClass", // Window class
"我的窗口 (WindowShow 示例)", // Window text
WS_OVERLAPPEDWINDOW, // Window style
// Size and position
CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
// 3. 使用我们自定义的 WindowShow 函数来显示窗口
// 这里我们让它以正常大小显示
WindowShow(hwnd, SW_SHOWNORMAL);
// 4. 消息循环
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
代码解释:
- 我们定义了一个
WindowShow函数,它接收窗口句柄hwnd和显示状态showState作为参数。 - 在函数内部,它直接调用了 Windows API 的
ShowWindow。 - 在
WinMain函数中,窗口创建后,我们没有直接调用ShowWindow,而是调用了我们自己封装的WindowShow(hwnd, SW_SHOWNORMAL),功能完全一样,但可能更符合你的项目命名规范。
如何获取窗口句柄 (hWnd)?
WindowShow 函数需要一个 hWnd,那么这个句柄从哪里来?
- 你自己的程序创建窗口: 如上面的例子,通过
CreateWindowEx或CreateWindow的返回值得到。 - 操作其他程序(高级用法): 你可以使用
FindWindow或EnumWindows等函数来查找并获取其他已存在程序的窗口句柄。
示例:获取计算器窗口句柄并显示它
#include <windows.h>
#include <stdio.h>
void WindowShow(HWND hwnd, int showState) {
if (hwnd) {
ShowWindow(hwnd, showState);
UpdateWindow(hwnd);
printf("窗口句柄: %p\n", hwnd);
} else {
printf("未找到窗口,\n");
}
}
int main() {
// 尝试查找标题为"计算器"的窗口
// 注意:不同系统语言下窗口标题可能不同
HWND hCalculator = FindWindow(NULL, "计算器");
// 使用我们的函数显示这个窗口
WindowShow(hCalculator, SW_SHOW);
system("pause"); // 暂停,以便观察效果
return 0;
}
警告: 操作其他程序的窗口是比较敏感的操作,需要谨慎,并且目标窗口的标题类名等信息可能会因操作系统版本、语言设置而改变。
| 概念 | 解释 | 相关函数/宏 |
|---|---|---|
WindowShow |
不是一个标准函数,通常是一个自定义的、封装性的函数名,目的是为了简化窗口显示操作。 | 无(自定义) |
| 核心功能 | 其本质是调用 Windows API 来控制窗口的可见性。 | ShowWindow |
ShowWindow |
Windows API 的原生函数,用于显示、隐藏、最大化、最小化窗口。 | ShowWindow(HWND, int) |
HWND |
窗口句柄,是操作任何窗口的“钥匙”,在调用 WindowShow 或 ShowWindow 时必须提供。 |
CreateWindowEx, FindWindow 等 |
nCmdShow |
显示指令,决定窗口如何显示(正常、最大化、最小化、隐藏等)。 | SW_SHOWNORMAL, SW_MAXIMIZE, SW_HIDE 等 |
当你看到 WindowShow 时,你应该立刻想到它是在封装 Windows 的 ShowWindow 函数,要使用它,你需要先有一个窗口句柄 (HWND),然后决定用哪种方式 (nCmdShow) 来显示这个窗口。
