C語言C++、編程學(xué)習(xí)交流基地:585653964
1形用、為什么VC下找不到BGI文件就轧?
2证杭、我按照書上寫的把程序輸入,編譯時(shí)發(fā)現(xiàn)找不到graphics.h文件
3妒御、VC是不是不支持圖形開發(fā)扒椤?
4携丁、... ...
問這類問題的同學(xué)還很多琢歇,總的來說,我覺得這些同學(xué)應(yīng)該屬于初學(xué)C語言梦鉴,對(duì)于語言李茫、操作系統(tǒng)、平臺(tái)的概念還不清楚肥橙,因此會(huì)問這類問題魄宏。
首先,糾正一點(diǎn)存筏,C語言就是C語言宠互,是負(fù)責(zé)編制程序?qū)崿F(xiàn)計(jì)算的,真正的C語言椭坚,是不帶任何平臺(tái)相關(guān)特點(diǎn)的予跌,而圖形、聲音善茎,是平臺(tái)相關(guān)券册,因?yàn)椴皇敲總€(gè)計(jì)算平臺(tái)都有圖形界面,因此垂涯,最原始的C烁焙,甚至是C++語言,是不帶任何圖形開發(fā)接口的耕赘。
就我本人而言骄蝇,也犯過類似的迷糊,最開始我們在Apple II計(jì)算機(jī)上開發(fā)操骡,由于其Basic語言是和計(jì)算機(jī)綁定在一起的九火,硬件也有圖形開發(fā)接口,使用匯編語言也能直接開發(fā)当娱,因?yàn)槌约龋揖拖氘?dāng)然地認(rèn)為考榨,計(jì)算機(jī)一定可以繪圖的跨细。
后來學(xué)習(xí)了計(jì)算機(jī)圖形學(xué),才發(fā)現(xiàn)不是這么一回事河质,圖形終端冀惭,是單獨(dú)的一門大學(xué)問震叙,和計(jì)算機(jī)基本上是割裂的,在以前大中小型機(jī)的時(shí)代散休,一臺(tái)計(jì)算機(jī)可以帶字符終端媒楼,如電傳打字機(jī),也可以帶圖形終端戚丸,不過划址,有圖形終端的一般叫圖形工作站,呵呵限府,很拉風(fēng)的夺颤。
記得90年我在石油物探局玩了一次Sun Sparc 490圖形工作站,我當(dāng)時(shí)都迷了胁勺,90年世澜,人家音頻、視頻接口就是標(biāo)配署穗,XWindows比我們現(xiàn)在的XP什么的好看多了寥裂,按鈕全是圓弧帶陰影的,硬件實(shí)現(xiàn)實(shí)三維計(jì)算案疲。記得當(dāng)年是瞞著巴統(tǒng)進(jìn)來的封恰,一臺(tái)120萬美金,確實(shí)是好東東褐啡,20年前的配置俭驮,到現(xiàn)在都不見得落后多少。
說這些主要是請大家清楚一點(diǎn)春贸,計(jì)算機(jī)里面還是可以細(xì)分的混萝,圖形系統(tǒng)是圖形系統(tǒng),計(jì)算機(jī)是計(jì)算機(jī)萍恕,我們大家一般都是從微型計(jì)算機(jī)PC開始學(xué)習(xí)編程的逸嘀,再加上現(xiàn)在Windows系統(tǒng)這么流行,可能有點(diǎn)想當(dāng)然允粤,以為圖形顯示卡是一臺(tái)計(jì)算機(jī)的標(biāo)配崭倘,這是不一定的。
話說回來类垫,大家可能還有個(gè)誤區(qū)司光,以為C語言,C++語言悉患,以及Java這些東西残家,是PC機(jī)的語言,其實(shí)也不是的售躁,計(jì)算機(jī)硬件是硬件坞淮,軟件是軟件茴晋,C和C++都有自己的標(biāo)準(zhǔn)協(xié)會(huì),Java有Sun公司在維護(hù)回窘,因此诺擅,這些語言的產(chǎn)生和發(fā)展,其實(shí)和PC平臺(tái)沒有太多關(guān)系啡直。
最起碼烁涌,C就是為Unix而生的,而Unix一般是大中小型機(jī)的標(biāo)準(zhǔn)操作系統(tǒng)酒觅,Windows最開始提供的是Pascal格式的api烹玉,大家查查Win32API,很多很古老的函數(shù)接口阐滩,前面都要有PASCAL修飾二打,表示這個(gè)接口符合PASCAL標(biāo)準(zhǔn)。甚至掂榔,目前我們用的匈牙利命名法继效,其實(shí)是Pascal的命名法,發(fā)明者是個(gè)匈牙利人装获,應(yīng)該是Windows api的主要制定者之一瑞信。
因此,大家可以想象穴豫,C和C++語言的基本庫凡简,本來就不可能綁定任何一個(gè)平臺(tái),一定只會(huì)利用各個(gè)平臺(tái)共有的特點(diǎn)來完成設(shè)計(jì)精肃,而圖形系統(tǒng)秤涩,大家可以想象,各個(gè)平臺(tái)都不一樣司抱,很難有個(gè)通用的庫筐眷,所以,真實(shí)的C語言里面习柠,其實(shí)是不帶圖形啊匀谣,聲音啊這類庫的,這些都是各個(gè)硬件资溃、操作系統(tǒng)軟件開發(fā)商武翎,自行提供的。
VC是個(gè)特例溶锭,VC準(zhǔn)確的講井辆,應(yīng)該不是一門C和C++的教學(xué)型語言裂问,它更像Windows平臺(tái)定制的一個(gè)實(shí)用性C和C++語言瞒爬。因此,他天生就有對(duì)Windows的集成性,自然支持Win32API中關(guān)于GUI的圖形函數(shù)驻售,因此露久,VC是可以繪圖的。只要你有一個(gè)窗口欺栗,就可以再窗口DC上繪圖毫痕。如果使用DirectX的話,甚至可以利用虛擬的表面迟几,直接訪問顯存消请,實(shí)現(xiàn)高速繪圖,開發(fā)游戲类腮。
不過這里還得倒回去說一點(diǎn)臊泰,最開始PC平臺(tái)使用DOS操作系統(tǒng),是沒有C語言的蚜枢,當(dāng)時(shí)有家公司叫做Borland缸逃,看中這個(gè)市場,推出了TurboC系列語言厂抽,后來又發(fā)展到Borland C++系列需频,大家不要跟我說不知道啊,Delphi知道不筷凤?
當(dāng)時(shí)DOS平臺(tái)一般都有圖形卡昭殉,但卡的類型很多,而DOS顯然又沒有Windows這樣藐守,提供統(tǒng)一的api接口訪問挪丢,因此,需要進(jìn)行圖形繪制的廠商卢厂,一般需要自己根據(jù)各個(gè)卡型開發(fā)自己的驅(qū)動(dòng)程序吃靠,以前有段時(shí)間,臺(tái)灣的游戲很流行足淆,很多游戲一上來就讓玩家選擇顯卡巢块,如EGA、VGA等等巧号,就是在選擇驅(qū)動(dòng)程序族奢。
歡迎加入交流學(xué)習(xí)基地
驅(qū)動(dòng)程序其實(shí)不復(fù)雜,就是封裝各個(gè)圖形卡的差異性丹鸿,對(duì)上提供統(tǒng)一的api接口供上層函數(shù)調(diào)用越走,驅(qū)動(dòng)一般都是匯編和C語言開發(fā)的。目前有很多工作崗位,招嵌入式開發(fā)工程師廊敌,主要就是寫驅(qū)動(dòng)铜跑。看見沒骡澈,嵌入式由于沒有Windows這個(gè)統(tǒng)一的界面锅纺,也需要寫驅(qū)動(dòng)。
這里就要夸夸比爾蓋茨了肋殴,他的Windows系統(tǒng)其實(shí)意義重大囤锉,不僅僅起到了圖形界面操作系統(tǒng)的用途,它實(shí)際上整合了PC平臺(tái)的驅(qū)動(dòng)標(biāo)準(zhǔn)护锤,各個(gè)硬件廠商以后只要給Windows寫驅(qū)動(dòng)就好了官地,不需要針對(duì)每個(gè)應(yīng)用分別寫驅(qū)動(dòng),如AutoCAD的驅(qū)動(dòng)和游戲的驅(qū)動(dòng)顯然就不是一碼事烙懦,這樣硬件廠商節(jié)約很多人力驱入,自然說好。
軟件廠商呢氯析,只要針對(duì)Windows平臺(tái)開發(fā)沧侥,就自然而然支持所有符合Windows規(guī)范的硬件,也無需自己每種硬件都采購一套魄鸦,分別寫驅(qū)動(dòng)宴杀,這節(jié)約了大量的人力和無力,因此拾因,Windows最成功的旺罢,我認(rèn)為還不是這個(gè)圖形界面,它整合了驅(qū)動(dòng)標(biāo)準(zhǔn)绢记,為業(yè)界節(jié)約了大量的成本扁达,這是它的成功之處,值得稱道蠢熄。
我們現(xiàn)在再回到Borland跪解,由于它做TurboC的時(shí)代,還是DOS操作系統(tǒng)签孔,沒有Windows這么方便叉讥,但是PC平臺(tái)的C語言,要是不支持圖形繪制饥追,市場會(huì)大打折扣图仓,大家不買啊,因此但绕,他必須讓他的C語言支持圖形救崔,但是惶看,圖形卡有很多啊,因此六孵,他就開發(fā)出自己的圖形驅(qū)動(dòng)標(biāo)準(zhǔn)纬黎,叫做BGI,這是一種文件格式劫窒,一般安裝一套TurboC本今,里面會(huì)帶一堆這個(gè)文件,就是針對(duì)各個(gè)不同顯卡的驅(qū)動(dòng)烛亦。
而上層的程序诈泼,使用graphics.h這個(gè)頭文件懂拾,調(diào)用標(biāo)準(zhǔn)BGI的api調(diào)用煤禽,即可實(shí)現(xiàn)圖形開發(fā),至于針對(duì)各個(gè)不同的圖形卡岖赋,api中有查詢接口檬果,告訴你選擇哪個(gè)BGI而已。
不過話說回來唐断,DOS畢竟是淘汰的東東选脊,目前已經(jīng)是Windows的世界,最起碼Linux的市場都比DOS大脸甘,因此恳啥,建議同學(xué)們自學(xué)C語言,還是看看書的出版年代丹诀,問問題的同學(xué)顯然對(duì)著一本TurboC的書在看钝的,這很麻煩,學(xué)出來的東西一來不好做實(shí)驗(yàn)铆遭,二來也沒有市場硝桩,現(xiàn)在估計(jì)沒有哪家公司還在使用TurboC開發(fā)。建議大家還是從VC學(xué)起吧枚荣。
VC下大家就不用問了碗脊,Windows是圖形操作系統(tǒng),一定有圖形函數(shù)的橄妆,查查Win32API函數(shù)庫衙伶,看看MFC,都能找到一堆害碾。
這里簡單提示幾點(diǎn):
1痕支、Windows下,一切都是窗口蛮原,我們看到的一個(gè)軟件界面卧须,如VC,如IE,是無數(shù)個(gè)窗口構(gòu)成的花嘶,甚至Dialog上每個(gè)按鈕笋籽,都是窗口。
2椭员、Windows下车海,只要是窗口,就一定有句柄隘击,Handle侍芝,這是每個(gè)窗口的靈魂,任何針對(duì)窗口的操作埋同,幾乎都是從Handle開始的州叠。
3、一般說來凶赁,窗口分兩類咧栗,可顯示的和不可顯示的,大多數(shù)是可顯示的虱肄。只要可顯示致板,就可以利用GetWindowDC,從Handle獲得DC咏窿。
4斟或、DC到手,天下我有集嵌。呵呵萝挤,拿到DC,大家就想怎么畫就怎么畫了纸淮∑秸叮可以設(shè)定畫筆,刷子咽块,字體绘面,可以用畫點(diǎn),畫線的函數(shù)侈沪,可以填充揭璃,裁剪,等等亭罪,GUI圖形雖然效率偏低瘦馍,做高速游戲動(dòng)畫可能不夠,不過应役,就大家目前做的圖形試驗(yàn)情组,寫個(gè)物理教學(xué)題材的軟件燥筷,做個(gè)化學(xué)實(shí)驗(yàn)軟件等等,足夠了院崇。
希望大家看了能有幫助肆氓,特別是萌新們,其他大神也可來指點(diǎn)底瓣!
如侵刪谢揪!