首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言圖形界面在 VC++ 6.0 時代遺留問題:getmoderange 未聲明與現代替代方案

     編輯:程式設計綜合問答

錯誤原因

`getmoderange` 屬於 **Borland Turbo C / Borland C++ 專有圖形庫 (`graphics.h`)**,VC++ 6.0 **從未內建此函數**。舊教程多基於 Turbo C 2.0/3.0 (DOS 實模式),直接在 VC++ 6.0 編譯必報「未聲明標識符」。

核心差異:DOS 實模式 vs Windows 保護模式

解決路徑 (按推薦度排序)

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

  1. 安裝 DOSBox
  2. 掛載目錄:`mount c d:\tc` → `c:` → `install.exe`
  3. 在 DOSBox 內運行 `TC.EXE` 編譯/運行舊代碼

總結

`getmoderange` 是 **Borland 專有遺物**。**現代 C 圖形開發請直接使用 SDL2/raylib + CMake + VS2022**,跨平台、標準化、社群活躍。VC++ 6.0 只適合維護 20 年前的遺留 MFC 專案,不適合學習或新專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度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)