有很多如鵬網的會員問過“VC、C-Free下怎麼編譯不了用graphics.h編寫的程式?”。這是因為graphics.h是TurboC下的函數庫,不是C語言標準的庫,VC、MinGW沒有提供對其的支援,所以如果需要編譯用graphics.h、bios.h等編寫的程式還是用TurboC吧。 不過這一切即將改變。 剛才上網發現了一個人編寫的graphics.h相容庫。 轉自:http://hi.baidu.com/yangw80/blog/item/63ff598072a9f9d09023d97f.html 我這裡將他的文章整理如下:
為什麼要寫這個庫? 讓初學者從 Turbo C 2.0(以下簡稱 TC) 或 Borland C++ 3.1 開始學編程是個不錯的建議,只是 TC 的環境實在太老了,複製粘貼都很不方便。有一個 Win-TC,簡單用了一下,實在是個害人的東西,還不如 TC 好呢,因為它簡化了所有調試的部分(或許是我沒看到?),而調試是寫程式相當重要的一部分。 不少老師直接拿 VC6 來講 C 語言的,因為 VC6 的編輯和調試環境都很優秀。只可惜在 VC6 下只能做一些文字性的練習題,想畫條直線畫個圓都很難,還要註冊視窗類別、建訊息迴圈等等,初學者會受嚴重打擊的。許多老師讓學生在 TC 下繪圖,因為這的確會讓人有興趣。 所以,我想給初學者一個更好的學習環境,就是 VC6 的平台 + TC 的繪圖功能,於是就有了這個庫。如果您剛開始學 C 語言,或者您是一位教 C 語言的老師,那麼這個東西一定會讓您興奮的。 額外說明 這個庫並不適合做產品,只建議用來入門學習。如果您想做簡單的繪圖產品,那麼 SDL 庫或許更適合您。或者,直接介入 DirectX 編程吧。 安裝 下載的壓縮包裡除了說明,只有兩個主要檔案,將 graphics.lib 拷貝到 VC6 檔案夾下的 Lib 檔案夾內,將 graphics.h 拷貝到 Include 檔案夾內,僅此而已,所以我就偷懶沒有做安裝程式了。 使用說明 目前只類比了極少數 Borland C++ 3.1 的繪圖庫,只是把我個人理解中的初學者常用的圖形函數類比了一下。 使用上,基本和 TC 沒什麼區別。看一個畫圓的例子吧: #include <graphics.h> // 就是需要引用這個圖形庫 #include <conio.h> void main() { initgraph(640, 480); // 這裡和 TC 略有區別 circle(200, 200, 100); // 畫圓,圓心(200, 200),半徑 100 getch(); // 按任意鍵繼續 closegraph(); // 關閉圖形介面 } 呵呵,很簡單吧。
以下是這個庫所支援的函數列表。恩,僅僅是列表,詳細的使用說明在下載包內。 void initgraph(int Width, int Height); // 初始化圖形環境 void initgraph(int Width, int Height, int Flag); void closegraph(); // 關閉圖形環境 void cleardevice(); // 清屏 COLORREF getcolor(); // 擷取當前繪圖前景色彩 void setcolor(COLORREF color); // 設定當前繪圖前景色彩 COLORREF getbkcolor(); // 擷取當前繪圖背景色 void setbkcolor(COLORREF color); // 設定當前繪圖背景色 void getviewsettings(struct viewporttype *viewport); // 擷取視圖資訊 void setviewport(int left, int top, int right, int bottom, int clip); // 設定視圖 void clearviewport(); // 清空視圖 void getlinesettings(struct linesettingstype *lineinfo); // 擷取當前線形 void setlinestyle(int linestyle, unsigned int upattern, int thickness); // 設定當前線形 void getfillsettings(struct fillsettingstype *fillinfo); // 擷取填滿類型 void setfillstyle(int pattern, int color); // 設定填滿類型 void getfillpattern(char *pattern); // 擷取自訂填滿類型 void setfillpattern(const char *upattern, int color); // 設定自訂填滿類型 void getaspectratio(int *xasp, int *yasp); // 擷取當前縮放因子 void setaspectratio(int xasp, int yasp); // 設定當前縮放因子 void setwritemode(int mode); // 設定繪圖位操作模式 void graphdefaults(); // 重設所有繪圖設定為預設值 COLORREF getpixel(int x, int y); // 擷取點的顏色 void putpixel(int x, int y, COLORREF color); // 畫點 void moveto(int x, int y); // 移動當前點(絕對座標) void moverel(int dx, int dy); // 移動當前點(相對座標) void line(int x1, int y1, int x2, int y2); // 畫線 void linerel(int dx, int dy); // 畫線(至相對座標) void lineto(int x, int y); // 畫線(至絕對座標) void rectangle(int left, int top, int right, int bottom); // 畫矩形 void getarccoords(struct arccoordstype *arccoords); // 擷取圓弧座標資訊 void arc(int x, int y, int stangle, int endangle, int radius); // 畫圓弧 void circle(int x, int y, int radius); // 畫圓 void pieslice(int x, int y, int stangle, int endangle, int radius); // 畫填充圓扇形 void ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius);// 畫橢圓弧線 void fillellipse(int x, int y, int xradius, int yradius); // 畫填充橢圓 void sector(int x, int y, int stangle, int endangle, int xradius, int yradius); // 畫填充橢圓扇形 void bar(int left, int top, int right, int bottom); // 畫無邊框填充矩形 void bar3d(int left, int top, int right, int bottom, int depth, int topflag); // 畫有邊框三維填充矩形 void drawpoly(int numpoints, const int *polypoints); // 畫多邊形 void fillpoly(int numpoints, const int *polypoints); // 畫填充的多邊形 void floodfill(int x, int y, int border); // 填充地區 void outtext(LPCTSTR textstring); // 在當前位置輸出文字 void outtextxy(int x, int y, LPCTSTR textstring); // 在指定位置輸出文字 int textwidth(LPCTSTR textstring); // 擷取字串佔用的像素寬 int textheight(LPCTSTR textstring); // 擷取字串佔用的像素高 void SetFont(int nHeight,int nWidth,int nEscapement,int nOrientation,int fnWeight,BYTE fdwItalic,BYTE fdwUnderline,BYTE fdwStrikeOut,LPCTSTR lpszFace); // 設定當前字型樣式 void SetFont(const LOGFONT *font); // 設定當前字型樣式 void GetFont(LOGFONT *font); // 擷取當前字型樣式 void getimage(int left, int top, int right, int bottom, IMAGE *imgdst); // 從螢幕擷取映像 void getimage(const char *imagefile, IMAGE *imgdst); // 從 BMP 檔案擷取映像 void getimage(const IMAGE *imgsrc, int left, int top, int right, int bottom, IMAGE *imgdst); // 從 IMAGE 對象擷取映像 void putimage(int left, int top, IMAGE *img, int op); // 繪製映像 int getmaxcolor(); // 擷取最大顏色值 int getmaxx(); // 擷取最大 x 座標 int getmaxy(); // 擷取最大 y 座標 int getx(); // 擷取當前 x 座標 int gety(); // 擷取當前 y 座標 int GetVer(); // 擷取目前的版本
|