You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C语言实现不同窗口输出内容并支持按键切换

实现方案说明

C语言标准库本身没有内置窗口管理相关的API,需要结合操作系统提供的接口或者第三方图形库实现,以下分两种常见场景给出可运行代码:

场景1:Windows控制台窗口简易实现(无额外依赖)

如果接受用控制台窗口作为「黑屏窗口」,可以直接调用Win32系统API实现,逻辑是先创建第一个控制台显示文本,等待回车后销毁第一个控制台,再创建新的控制台显示目标内容:

#include <windows.h>
#include <stdio.h>

int main() {
    // 初始化第一个窗口
    AllocConsole();
    SetConsoleTitleA("第一个窗口");
    printf("hello world\n");
    printf("按回车键继续...");
    getchar(); // 阻塞等待回车输入
    FreeConsole(); // 销毁第一个窗口

    // 初始化第二个窗口
    AllocConsole();
    SetConsoleTitleA("第二个窗口");
    printf("thank you\n");
    printf("按回车键退出...");
    getchar();
    FreeConsole();
    return 0;
}

编译方式:直接用MinGW或MSVC编译即可,无需链接额外第三方库。

  • 如果你使用Linux/macOS平台的控制台,可使用ncurses库实现类似的窗口切换逻辑,核心是清空当前终端输出或者拉起新的终端窗口展示内容。

场景2:跨平台图形窗口实现(基于SDL2库)

如果需要原生图形黑屏窗口,可使用跨平台的SDL2库实现,兼容Windows、macOS、Linux系统。你需要先在开发环境中安装SDL2开发库,再使用以下代码:

#include <SDL2/SDL.h>
#include <stdio.h>

// 通用黑色窗口创建函数
SDL_Window* create_black_window(const char* title, const char* print_text) {
    SDL_Window* window = SDL_CreateWindow(
        title,
        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        400, 300,
        SDL_WINDOW_SHOWN
    );
    SDL_Surface* surface = SDL_GetWindowSurface(window);
    // 填充纯黑背景
    SDL_FillRect(surface, NULL, SDL_MapRGB(surface->format, 0, 0, 0));
    SDL_UpdateWindowSurface(window);
    // 文本打印到控制台,如需在图形窗口内渲染文本可集成SDL_ttf库
    printf("%s\n", print_text);
    return window;
}

int main() {
    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
        fprintf(stderr, "SDL初始化失败: %s\n", SDL_GetError());
        return 1;
    }

    // 展示第一个窗口
    SDL_Window* win1 = create_black_window("窗口1", "hello world");
    SDL_Event e;
    int running = 1;
    // 等待回车按下事件
    while (running && SDL_WaitEvent(&e)) {
        if (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_RETURN) {
            running = 0;
        }
    }
    SDL_DestroyWindow(win1);

    // 展示第二个窗口
    SDL_Window* win2 = create_black_window("窗口2", "thank you");
    running = 1;
    while (running && SDL_WaitEvent(&e)) {
        if (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_RETURN) {
            running = 0;
        }
    }
    SDL_DestroyWindow(win2);

    SDL_Quit();
    return 0;
}

编译命令(以GCC为例):gcc main.c -o window_demo -lSDL2

内容的提问来源于stack exchange,提问作者Beginner 101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:15:00