C/C++ 初學者常苦惱於控制台窗口過小,無法完整顯示大量數據或模擬全屏界面。本文提供一個基於 Windows API 的 FullScreen() 函數,在 main() 首行調用即可實現控制台最大化佔滿屏幕,附完整參數解析與原理說明。
#include <windows.h>
#include <stdio.h>
void FullScreen() {
HWND hwnd = GetForegroundWindow(); // 1. 獲取當前控制台窗口句柄
int x = GetSystemMetrics(SM_CXSCREEN) + 300; // 2. 獲取屏幕寬度 + 緩衝
int y = GetSystemMetrics(SM_CYSCREEN) + 300; // 獲取屏幕高度 + 緩衝
char setting[30];
sprintf(setting, "mode con:cols=%d lines=%d", x, y); // 3. 構造模式命令
system(setting); // 4. 設置控制台緩衝區大小
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, x+300, y+300, NULL); // 5. 置頂並調整窗口
MoveWindow(hwnd, -10, -40, x+300, y+300, TRUE); // 6. 精確定位覆蓋任務欄
printf("\n\n"); // 7. 預留標題欄空間
}
int main() {
FullScreen(); // 主函數第一行調用
// 你的業務代碼...
printf("全屏控制台就緒!\n");
system("pause");
return 0;
}
| API | 作用 | 關鍵參數說明 |
|---|---|---|
GetForegroundWindow() | 獲取當前活動窗口句柄 | 此處即控制台窗口 HWND |
GetSystemMetrics(SM_CXSCREEN) | 獲取主顯示器寬度(像素) | 配合 SM_CYSCREEN 取高度 |
sprintf(setting, "mode con:cols=%d lines=%d", x, y) | 格式化字符串構造命令 | mode con 設置控制台列數/行數(字符單位) |
system(setting) | 執行命令調整緩衝區 | 實際改變控制台內部字符網格大小 |
SetWindowPos(..., HWND_TOPMOST, ...) | 設置窗口 Z 序為最頂層 | 防止被其他窗口遮擋 |
MoveWindow(hwnd, -10, -40, w, h, TRUE) | 精確移動並調整窗口大小 | 負坐標抵消窗口邊框/標題欄,實現真全屏覆蓋 |
GetSystemMetrics 返回像素。粗略換算:字符寬≈8px,高≈16px。+300 確保緩衝區足夠大windows.h,跨平台需條件編譯SM_CXSCREEN 僅取主屏,跨屏場景需 GetMonitorInfo// 更健壯的版本:錯誤檢查 + DPI 感知
void FullScreenRobust() {
HWND hwnd = GetConsoleWindow(); // 專門獲取控制台窗口,比 GetForegroundWindow 可靠
if (!hwnd) return;
// 啟用 DPI 感知 (Win10 1607+)
SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
HMONITOR monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
MONITORINFOEX mi = { sizeof(mi) };
GetMonitorInfo(monitor, &mi);
int width = mi.rcMonitor.right - mi.rcMonitor.left;
int height = mi.rcMonitor.bottom - mi.rcMonitor.top;
// 字符單位換算 (假設 8x16 字體)
int cols = width / 8 + 10;
int lines = height / 16 + 5;
char cmd[64];
sprintf(cmd, "mode con:cols=%d lines=%d", cols, lines);
system(cmd);
MoveWindow(hwnd, mi.rcMonitor.left, mi.rcMonitor.top, width, height, TRUE);
}
這個 FullScreen() 方案雖屬「黑科技」,但對於快速原型、教學演示、舊系統維護極其實用。理解其背後的 Windows 窗口管理與控制台機制,能幫助你在受限環境下創造更好的用戶體驗。