`getmoderange` 屬於 **Borland Turbo C / Borland C++ 專有圖形庫 (`graphics.h`)**,VC++ 6.0 **從未內建此函數**。舊教程多基於 Turbo C 2.0/3.0 (DOS 實模式),直接在 VC++ 6.0 編譯必報「未聲明標識符」。
| 維度 | Turbo C (DOS) | VC++ 6.0 (Windows 9x/NT) |
| 內存模型 | 實模式 1MB、段:偏移 | 保護模式 4GB 平坦模型 |
| 顯存訪問 | 直接寫 0xA0000 | **禁止直接訪問硬體**,需 GDI/DirectX |
| 圖形庫 | `graphics.h` (BGI 驅動) | GDI (`Graphics.h` 不存在) |
| 編譯目標 | .exe (DOS) | .exe (PE 格式,Win32) |
解決路徑 (按推薦度排序)
1. 棄用 VC++ 6.0,改用現代工具鏈 + 現代圖形庫 (強烈推薦)
- IDE: **Visual Studio 2022 Community** / **CLion** / **VS Code + CMake**
- 編譯器: MSVC / GCC / Clang (支援 C11/C17/C23)
- 圖形庫選擇:
- SDL2 (C, 跨平台, 2D/輸入/音頻) — `vcpkg install sdl2`
- raylib (C, 極簡, 適合教學/遊戲) — `vcpkg install raylib`
- SFML (C++, 面向對象)
- OpenGL / Vulkan / DirectX 12 (底層 3D)
- Dear ImGui (即時 GUI,工具開發首選)
2. 必須在 VC++ 6.0 維護舊專案:移植 BGI 代碼到 Windows GDI
// Turbo C 代碼
initgraph(&gd, &gm, "C:\\TC\\BGI");
circle(100, 100, 50);
getch();
closegraph();
// VC++ 6.0 對應 GDI 代碼 (在 WM_PAINT 中繪製)
void OnPaint(HWND hwnd) {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
Ellipse(hdc, 50, 50, 150, 150); // 圓心(100,100) 半徑50
EndPaint(hwnd, &ps);
}
// 需建立標準 Win32 視窗 (RegisterClass, CreateWindow, GetMessage 循環)
**核心改變**:從「主動繪圖」→「響應 `WM_PAINT` 被動繪圖」,且座標系統、顏色模式、資源管理完全不同。
3. 想體驗 Turbo C 環境:DOSBox + Turbo C 2.0/3.0
- 安裝 DOSBox
- 掛載目錄:`mount c d:\tc` → `c:` → `install.exe`
- 在 DOSBox 內運行 `TC.EXE` 編譯/運行舊代碼
總結
`getmoderange` 是 **Borland 專有遺物**。**現代 C 圖形開發請直接使用 SDL2/raylib + CMake + VS2022**,跨平台、標準化、社群活躍。VC++ 6.0 只適合維護 20 年前的遺留 MFC 專案,不適合學習或新專案。
- 上一篇文章: Azure Blob Storage REST API 列出容器 Blob 完整實現指南 (含共享金鑰認證)
- 下一篇文章: ASP.NET WebForms ClientScript.RegisterStartupScript 動態彈窗顯示下拉選單天數完整實現
Copyright ©
程式碼之家 All Rights Reserved