C语言中Windowshow如何使用?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 C语言 正文

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

c语言中Windowshow
(图片来源网络,侵删)

它更像是一个自定义函数名或者在某些特定库(如游戏引擎、GUI 框架)中封装好的函数,其目的是为了统一、方便地显示一个窗口

理解 WindowShow 的关键在于理解它背后所代表的 Windows API 函数


WindowShow 的核心:ShowWindow

在 Windows 编程中,真正用于控制窗口显示状态的原生 API 函数是 ShowWindow

任何名为 WindowShow 的自定义函数,其内部几乎肯定都调用了 ShowWindow

c语言中Windowshow
(图片来源网络,侵删)

ShowWindow 函数原型

#include <windows.h>
BOOL ShowWindow(
  HWND hWnd,   // 要显示或隐藏的窗口句柄
  int  nCmdShow // 如何显示窗口
);

参数详解

  1. hWnd (HWND):

    • HWND 是 "Handle to a Window" 的缩写,即窗口句柄
    • 它是一个唯一的标识符,操作系统通过它来管理和操作你的窗口。
    • 你在创建窗口(例如通过 CreateWindowEx 函数)后,会得到这个句柄,后续所有对窗口的操作(如显示、隐藏、移动、绘制)都需要这个句柄。
  2. nCmdShow (int):

    • 这是一个整数值,它告诉系统应该如何显示窗口,最常用的几个值是:
      • SW_SHOWNORMAL (1): 激活窗口并显示为正常大小。
      • SW_SHOWMINIMIZED (2): 激活窗口并将其显示为最小化状态(在任务栏上)。
      • SW_SHOWMAXIMIZED (3): 激活窗口并将其显示为最大化状态(占满整个屏幕)。
      • SW_SHOW (5): 激活窗口并以其当前大小和位置显示。
      • SW_HIDE (0): 隐藏窗口(活动窗口被其他窗口取代)。
      • SW_RESTORE (9): 激活并显示窗口,如果窗口最小化或最大化,则将其还原到原来的大小和位置。

WindowShow 的典型实现(自定义函数)

假设你正在写一个程序,为了代码更清晰,你可能会封装一个自己的 WindowShow 函数。

示例代码:

c语言中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,那么这个句柄从哪里来?

  1. 你自己的程序创建窗口: 如上面的例子,通过 CreateWindowExCreateWindow 的返回值得到。
  2. 操作其他程序(高级用法): 你可以使用 FindWindowEnumWindows 等函数来查找并获取其他已存在程序的窗口句柄。

示例:获取计算器窗口句柄并显示它

#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 窗口句柄,是操作任何窗口的“钥匙”,在调用 WindowShowShowWindow 时必须提供。 CreateWindowEx, FindWindow
nCmdShow 显示指令,决定窗口如何显示(正常、最大化、最小化、隐藏等)。 SW_SHOWNORMAL, SW_MAXIMIZE, SW_HIDE

当你看到 WindowShow 时,你应该立刻想到它是在封装 Windows 的 ShowWindow 函数,要使用它,你需要先有一个窗口句柄 (HWND),然后决定用哪种方式 (nCmdShow) 来显示这个窗口。

-- 展开阅读全文 --
头像
织梦整体项目如何引入?
« 上一篇 01-24
dede友情链接链接位置如何设置?
下一篇 » 01-24

相关文章

取消
微信二维码
支付宝二维码

目录[+]