首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言圖形程式設計:從 TurboC BGI 到 Windows API 的觀念釐清

     編輯:關於C語言

初學者常問:「為什麼 VC++ 找不到 graphics.h?」「BGI 檔案去哪了?」「VC++ 不支援圖形嗎?」 這類問題源於對語言標準、作業系統、硬體抽象層三者關係的混淆。本文從歷史脈絡梳理關鍵觀念,助你建立正確心智模型。

核心觀念:C 標準庫不含圖形功能

C/C++ 語言標準(ANSI/ISO)刻意不定義任何平台相關功能(圖形、聲音、網路、檔案系統細節)。標準庫僅提供跨平台通用的運算、記憶體、字串、I/O 流等抽象。圖形輸出屬於平台特定功能,由作業系統或硬體廠商提供 API。

歷史演進:從 DOS 到 Windows 的驅動模式轉變

DOS 時代:應用程式自帶驅動

  • 無統一圖形 API,顯示卡廠商規格各異(CGA/EGA/VGA/SVGA…)。
  • Borland TurboC 推出 BGI (Borland Graphics Interface):封裝各顯卡差異,提供統一 graphics.h 介面,隨附 *.BGI 驅動檔。
  • 遊戲啟動時讓玩家選擇顯卡類型,實則是選擇載入哪個 BGI 驅動。

Windows 統一驅動模型:比爾蓋茲的關鍵貢獻

  • 硬體廠商只需寫 WDDM/WDM 驅動 給 Windows,應用程式呼叫 Win32 GDI/DirectX API 即可跨硬體運作。
  • 軟體廠商無需採購所有顯卡測試、撰寫驅動,極大降低開發成本。
  • 這才是 Windows 真正的成功關鍵:整合驅動標準,而非單純提供 GUI。

VC++ 圖形程式設計正確入門路徑

VC++ 本質是 Windows 平台定製的 C/C++ 實作,原生整合 Win32 API。圖形開發三步走:

  1. 一切皆視窗:按鈕、輸入框、對話框、主視窗皆為 HWND(視窗控制代碼)。
  2. 取得 DC (Device Context):HDC hdc = GetWindowDC(hwnd); — 繪圖的「畫布」。
  3. 呼叫 GDI 函式繪圖:LineTo、Rectangle、TextOut、SetPixel… 或使用 MFC 封裝類 CDC、CPen、CBrush。
// 簡易繪圖範例
void OnPaint() {
    CPaintDC dc(this);           // 取得 DC
    CPen pen(PS_SOLID, 2, RGB(255,0,0));
    CPen* old = dc.SelectObject(&pen);
    dc.MoveTo(10, 10);
    dc.LineTo(200, 200);         // 畫線
    dc.SelectObject(old);
}

進階需求(高速動畫、遊戲)可轉向 DirectX / OpenGL / Vulkan,直接操作顯存或 GPU 指令佇列。

給初學者的建議

  • 別再買 TurboC 書籍了:DOS 已淘汰 20 年,學出來的知識無法在現代環境實驗、也無就業市場。
  • 從 Visual Studio + Windows SDK / Qt / SDL2 起步:擁抱現代工具鏈,專注核心邏輯與演算法。
  • 理解「平台抽象層」:同樣的繪圖邏輯,換平台只需換實作層,這才是可移植程式設計的精髓。

本文整理自相關技術討論,旨在釐清觀念,歡迎指正補充。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved