在C语言中实现全屏与普通窗口模式的切换通常需要依赖操作系统提供的API。以下是针对Windows和Linux终端(使用ncurses库)的两种常见实现方式:
1. Windows API 实现
#include <windows.h>
#include <stdio.h>
// 切换全屏/窗口模式
void ToggleFullscreen(HWND hwnd) {
static BOOL isFullscreen = FALSE;
static RECT originalRect;
if (!isFullscreen) {
// 进入全屏
GetWindowRect(hwnd, &originalRect);
SetWindowLongPtr(hwnd, GWL_STYLE,
WS_POPUP | WS_VISIBLE); // 移除边框和标题栏
SetWindowPos(hwnd, HWND_TOP,
0, 0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),
SWP_FRAMECHANGED);
isFullscreen = TRUE;
} else {
// 退出全屏
SetWindowLongPtr(hwnd, GWL_STYLE,
WS_OVERLAPPEDWINDOW | WS_VISIBLE); // 恢复标准窗口样式
SetWindowPos(hwnd, NULL,
originalRect.left,
originalRect.top,
originalRect.right - originalRect.left,
originalRect.bottom - originalRect.top,
SWP_FRAMECHANGED);
isFullscreen = FALSE;
}
}
// 主函数示例
int main() {
HWND consoleWindow = GetConsoleWindow();
printf("按 Enter 键切换全屏模式...");
getchar();
ToggleFullscreen(consoleWindow);
printf("已切换模式,再按 Enter 退出...");
getchar();
return 0;
}
编译说明:
- 需链接
user32.lib
- GCC编译命令:
gcc program.c -o program -luser32
2. Linux/macOS 终端实现(使用 ncurses)
#include <ncurses.h>
#include <unistd.h>
int main() {
initscr(); // 初始化ncurses模式
cbreak(); // 禁用行缓冲
noecho(); // 关闭输入回显
keypad(stdscr, TRUE); // 启用功能键
int isFullscreen = 0;
printw("按 F1 切换全屏/普通模式 | 按 q 退出");
refresh();
while(1) {
int ch = getch();
if(ch == 'q') break;
if(ch == KEY_F(1)) {
if(!isFullscreen) {
// 进入全屏(实际是清除屏幕并重绘)
clear();
printw("全屏模式 - 按 F1返回 | q退出");
refresh();
isFullscreen = 1;
} else {
// 退出全屏
clear();
printw("普通模式 - 按 F1切换全屏 | q退出");
refresh();
isFullscreen = .0;
}
}
}
endwin(); // 结束ncurses模式
return .0;
}
编译说明:
- 需安装 ncurses库:
sudo apt-get install libncurses5-dev
(Ubuntu/Debian) - GCC编译命令:
gcc program.c -o program -lncurses
###注意事项:
- Windows版本仅适用于控制台程序,图形程序需要使用其他API
- Linux版本的实际全屏效果取决于终端模拟器的支持程度
- 真正的全屏可能需要更底层的系统调用(如Linux的Framebuffer或DirectX/OpenGL)
建议根据具体需求选择合适的实现方式。如果需要更高级的图形界面支持,可以考虑使用SDL、OpenGL或Qt等跨平台框架。
内容由零声教学AI助手提供,问题来源于学员提问