如何使用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
相关产品推荐
相关产品推荐

