Ⅰ c語言學習
首先是純C的教材
第一本:H.M.Deitel和P.J.Deitel的《C HOW TO PROGRAM》(C程序設計教程)。
作者是父子,從事語言教材的編寫合計超過40年,本書被美國眾多高校選用為教材,既可入門也可翻閱,甚好。本FAQ作者認為如果你只打算看一本的話,那就選他好了。
第二本:Brian W.Kernighan和Dennis M.Ritchie 的《The C Programming Language 》(C程序設計語言)。
此書簡稱K&R,由C語言的創建者撰寫,是全球銷售最多的C語言教材,其品質不容置疑。不過不適合入門,適於在入門之後鞏固提高。實體書有原版和譯本購買,電子版英文較多。
第三本:譚浩強的《C程序設計》。
優點在於,面向中國學生,語言易於理解,而且全書篇幅小,看過的人多,容易找到人請教。但是各方面的概念不深入,淺嘗輒止,實際上還有些小錯誤,不是很嚴謹。因此適合第一次入門學習,例題做完基本就可以拋棄了。有實體書和電子版下載。同時配套有習題集和習題解答,適合自學。
第四本:王大剛先生的《C語言編程寶典》。
質量不錯,與老譚的書一樣非常適合中國學生,而且對於TC的圖形編程講解非常透徹。本人沒有發現實體書,可能只發布在網路上,在VCgood論壇有轉載:
http://www.vcgood.com/bbs/forum_posts.asp?TID=1560&PN=2
http://book.chinaz.com/C/C/index.html
第五本:無名作者的《C語言初學者入門講座》
VCgood論壇轉載,作者未知,質量同上一本。http://www.vcgood.com/bbs/forum_posts.asp?TID=1294&PN=4
第六本:Kenneth A.Reek 的《C和指針》
進階讀物,把指針一章演繹為一本書可見其技術精度。指針是C的靈魂,能領會本書中的理念,才能算是真正明白了C指針的奧妙,才算懂得了C。
第七本:Andrew Koenig 的 《C陷阱與缺陷》
進階讀物,在認真讀完上面的入門書之前,暫勿閱讀。本書暢銷14年歷久不衰,足證品質。
最後一本:ISO C89規范/C99規范
一切關於C語言的疑問,只有一件東西最權威,那就是ISO的規范。但這不是正式出版物,是類似法律文本的技術說明,而且只有英文版。新手閱讀,提防吐血而亡。
然後是C++的教材
C++比C復雜的多,所以教材也就紛繁蕪雜。既有綜合性入門性的,也有專項深入的,閱讀要循序漸進,以下分階段介紹(以下文字有部分引用自他人評介)。
首先是毫無基礎的時候,先要初步掌握語法並形成編程的概念
level 0:
H.M.Deitel和P.J.Deitel的《 C++ How to Program 》(C++大學教程)。
又是這對父子。有很多號稱C++入門的書,但經我的觀察,如果要選擇能推薦給毫無編程概念的新手用的書,這本算是佼佼者了。此父子的《C程序設計教程》我已推薦了。
仍然是K&R,Brian W.Kernighan和Dennis M.Ritchie 的《The C Programming Language》(C程序設計語言)。
盡管C++之父親口說,最好把C++看作一門新語言來學習,但我個人認為,一開始學習C至少有兩大好處。相比C++,C還是非常簡單的,易於掌握,避免你過早陷入C++的語法泥潭。同時,學C能讓你對計算機的底層運行有所認識,建立良好的概念。
錢能的《C++程序設計教程》
國內C++教材中較好的一本,作者是教師,總結多年教學實踐的經驗寫成的,比較適合國內學生。
PS:老譚也有一本C++教材,在此就不太推薦了,它完全是用C的思維來看C++。
當讀者有一定c/c++基礎
推薦的閱讀順序:
level 1
從Stanley B.lippman著 侯捷 譯的《essential c++》開始,短小精悍,可以對c++能進一步了解其特性。Stanley B.Lippman的職業是提供關於C++和面向對象的訓練、咨詢、設計和指導。他也是Bjarne Stroustrup領導的Bell實驗室Foundation項目的成員之一,負責C++程序設計環境中的對象模型部分。簡單說,他是C++的創建者之一。
以Stanley B.Lippman,Josee LaJoie,Barbara E.Moo的《c++ primer》作字典和課外讀物,因為太厚不可能一口氣看完,當然你也可以用它作為主力教材。Lippman說過了,Josee LaJoie是C++標准委員會原負責人,Barbara E.Moo 是獨立咨詢顧問,參與了第一個使用C++編寫的商業產品的開發,領導了公司中第一個C++編譯器項目。
C++之父Bjarne Stroustrup的《the c++ programming language》,簡稱BS的TCPL,全面而深入的書,缺點也是太厚。
這個階段 也可以延用前階段Detiel父子的教材。
level 2 這個階段就要養成好習慣
然後從Scott Meyers的《effective c++》開始轉職,這是聖經,請遵守10誡,要經常看,沒事就拿來翻翻
接著是 Herb Sutter的《exceptional c++》。此人是C++標准委員會的主席,主席說話,誰有異議。
順下來就是Scott Meyers的《more effective c++》和Herb Sutter的《more exceptional c++》,請熟讀並牢記各條款
level 3 這個階段 把C++的類搞透
Stanley B.lippman的《insied the c++ object model》(深度探索C++對象模型)看過後如一縷清風掃去一直以來你對語言的疑惑,你終於能明白compiler到底都背著你做了些什麼了,這本書要細細回味,比較難啃,最好反復看幾遍,加深印象。
看完上一本之後,這本Bjarne Stroustrup的《The design and evolution of c++》(C++的設計與演化)會重演一次當年C++他爹在設計整個語言過程中的歷程。
Stephen C. Dewhurst的《C++ Gotchas: Avoiding Common Problems in Coding and Design》(C++程序設計陷阱)會幫你在設計層面避免錯誤。
level 4 這個階段深入STL吧
Nicolai M.Josuttis的《the c++ standard library》(C++標准程序庫—自修教程與參考手冊) 是stl的字典,什麼都可以查得到。
Scott Meyers的《effective stl》,它和聖經一樣是你日常行為的規范。發現沒有,Scott Meyers先生一直在搞effective系列。
Matthew H. Austern的《generic programming and the stl》(泛型編程與STL)讓你從OO(面向對象)向GP(泛型編程)轉變。
光用不行,我們還有必要了解stl的工作原理,那麼侯捷的 《stl源碼剖析》會解決你所有的困惑。
level 5 徹底掌握模版泛型編程
對於c++無非是OO和GP,想進一步提升OO,Herb Sutter的《exeptional c++ style》是一本主席這么多年的經驗之談,是很長esp的。
一位stl高手是不能不去了解template的,《c++ template》是一本網路全書,足夠你看完後對於GP游刃有餘。
Andrei Alexandrescu的《modern c++ design》是太過聰明的人寫給明眼人看的。
level 6
這個時候,對於C++語法本身,你應該是已經到了隨心所欲的境界,你所要練習的大概就是大規模的C++程序的設計以及一些通用的高效庫的使用,以及為什麼要這樣做的理由。
所以,《C++ 輸入輸出流及本地化》《C++ Network Programming》《大規模C++程序設計》是你需要的。
同時,C++教材中的異類:Barbara E.Moo和Andrew Koenig的《Ruminations On C++》(C++ 沉思錄)是值得你一看的,他集中反映了C++的關鍵思想和編程技術,說明了C++是什麼樣的以及能夠做些什麼,不僅告訴你如何編程,還告訴你為什麼要這樣編程。本書曾出現在眾多的C++專家推薦書目中。
和C一樣,同樣有最後一本書
ISO+IEC+14882-1998 C++規范。這可不是寶典聖經,這就是C++的法律,一切疑問以此為准到此打住。不過,有個腳注,某些具體情況取決於編譯器實現。
接下來是Windows編程
至少在國內來說,Windows環境下的編程還是很有市場的。
第一本書:Charles Petzold 的 《Programming Windows》(Windows程序設計)。
如果說,在windows編程領域只能翻閱一本書的話,那就是他了。《Windows程序設計》由微軟出版社在1988年首次出版,後來被認為是這方面最好的導論性讀本。在1994年5月,Petzold作為僅有的七個人之一(並且是唯一的作家)被《Windows Magezine》和Microsoft公司授予Windows Pioneer獎,以表彰他對Microsoft Windows的成功做出的貢獻。這本書經典到這個程度,以至對於Windows程序員來說,「從Chares 的(Window程序設計)一書中尋找答案。」幾乎成了一句至理名言。
你可以在這個地方觀看到他的外觀,http://www.charlespetzold.com/pw5/,國內書店有售,電子版則需要仔細搜索。
第二本:Jeffrey Richter 的《》(Windows核心編程)和《Advanced Windows》(Windows 高級編程指南)
和上面這本書難分伯仲。這么說吧,你讀了之後就會後悔,後悔為什麼沒有早點讀他。建議先看高級,再看核心。
個人認為除非windows發生革命性的變化,否則看完這三本書,足以應付通常的Windows編程。
上面三本書介紹的是直接使用WindowsAPI實現應用,總的來說那是一種很基礎但很繁瑣的方式。Windows下有很多的編程庫可以使用,VC和BCB都自備了優良的庫。
在VC來說,存在版本的差異,如果是6.0版本,那麼你基本只有MFC這一種選擇,但對於2002以後的版本,包括新推出的2008,MFC、ATL、.net都不錯。
對於MFC。
要學會怎麼用,可以看一下這幾本:
微軟出版社授權的中文版系列書 由David J.Kruglinski,Scot Wingo,George Shepherd寫的《Programming Visual C++ 6.0 技術內幕(第5版)》,經典的「Visual C++技術內幕」的第5版。
清華大學出版社出版 楊永國 的《Visual C++ 6.0實用教程(第2版) 》,這本不是那麼經典,同類多得很,但好處是便宜,而且能夠買到,有些書已經買不到了。
如果想知道MFC的原理,侯俊傑先生的《深入淺出MFC 》(Dessecting MFC)就值得你仔細閱讀。
對於VC2002--2008中的.net,單獨講授的似乎目前還沒有像《Windows程序設計》那樣經典的書出現,畢竟.net出現的時間也不長。但把.net MFC ATL等綜合在一起講的,倒還是有一些。
由H.M.Deitel,P.J.Deitel,J.P.Liperi和C.H.Yaeger共同編寫的《Visual C++.NET:How To Program 》(Visual C++.NET大學教程)品質算是上乘。還記得Deitel這對父子作者么,在chinapub上可以看到父子倆合著的教材有47套之多,而且個個暢銷,我覺得他們儼然就是美國的譚浩強,只是水平高出不少。
George Shepherd,David Kruglinski 的 《Visual C++ .NET技術內幕(第6版)》,就是上面那本書的.net升級。
IVOR HORTON的《VISUAL C++ 2005入門經典》也可一看。
BCB在版本6以前用的是著名的VCL庫,BCBX另起爐灶,用的是wxWidgets庫。由於對BC,作者自己涉獵不多,所以這兩套庫的教材,請大家自行查找。
就像C++和C的規范文件一樣,Windows編程中,也有一件類似萬寶全書的神物,那就是Microsoft自己推出的MSDN。
MSDN是Microsoft Software Developer Network的簡稱。這是微軟的針對開發者的開發計劃。你可以在http://msdn.microsoft.com看到有關軟體開發的資料。在VisualStudio中包括MSDN Library的光碟,其中包括VisualStudio的幫助文件和許多與開發相關的技術文獻。MSDN Library每個季度更新一次,可以向微軟訂閱更新光碟,不過價格不便宜。
MSDN就是微軟的技術大全,所有微軟的軟體系統的開發的已公開資料,都在上面。如果在那裡也無法找到答案,那你只能想辦法咨詢微軟的內部工程師求得隱藏秘籍。不要妄想能夠完全閱讀它,3G容量的文檔(大部分是文本,不是圖片和視頻),實在太過巨大了。
Ⅱ 關於#include "graphics.h"的用法
首先,#include "graphics.h"是TC專屬的一個畫圖函數,因為它不是標准庫,VC是沒有的,VC有自己的圖形函數。我到沒有試過下載#include "graphics.h",因為需要在VC運行#include "graphics.h"是需要插件的,而且#include "graphics.h"是在DOS黑框的畫圖,不美觀,而且已經過時了,真正做項目什麼的,一般用VC
VC畫圖函數
1、畫筆有兩種形式創建畫筆一是直接通過GetStockObject()函數來調用二是通過創建畫筆來調用HPEN CreatePen(intfnPenStyle,// pen styleintnWidth,// pen widthCOLORREFcrColor// pen color);
創建畫筆後必須調用SelectObject函數來將起選入設備環境;
刪除畫筆可通過DeleteObject 函數來實現;
2、畫刷創建畫刷
一是通過GetStockObject函數來調用
二是通過調用CreateSolidBrush 和CreateHatchBrush來創建畫刷HBRUSH CreateSolidBrush( COLORREF crColor // brush color value);
HBRUSH CreateHatchBrush( int fnStyle, // hatch style COLORREF clrref // color value);3、顏色通過RGB函數來實現;4、常用的繪圖函數設置畫筆當前的位置函數MoveToExBOOL MoveToEx( HDC hdc, // handle to device context int X, // x-coordinate of new current position int Y, // y-coordinate of new current position LPPOINT lpPoint // pointer to old current position);
從當前位置向指定坐 點畫直線的函數LineToBOOL LineTo( HDC hdc, // device context handle int nXEnd, // x-coordinate of line's ending point int nYEnd // y-coordinate of line's ending point);
從當前位置開始,依次用線段連接lpPoints中指定各點的函數PolylineBOOL Polyline( HDC hdc, // handle to device context CONST POINT *lppt, // pointer to array containing endpoints int cPoints // number of points in the array);
橢圓弧線ArcBOOL Arc( HDC hdc, // handle to device context int nLeftRect, // x-coord of bounding rectangle's upper-left corner int nTopRect, // y-coord of bounding rectangle's upper-left corner int nRightRect, // x-coord of bounding rectangle's lower-right corner int nBottomRect, // y-coord of bounding rectangle's lower-right corner int nXStartArc, // first radial ending point int nYStartArc, // first radial ending point int nXEndArc, // second radial ending point int nYEndArc // second radial ending point);畫一個餅圖並用當前的畫刷進行填充PieBOOL Pie( HDC hdc, // handle to device context int nLeftRect, // x-coord of bounding rectangle's upper-left corner int nTopRect, // y-coord of bounding rectangle's upper-left corner int nRightRect, // x-coord of bounding rectangle's lower-right corner int nBottomRect, // y-coord of bounding rectangle's lower-right corner int nXRadial1, // x-coord of first radial's endpoint int nYRadial1, // y-coord of first radial's endpoint int nXRadial2, // x-coord of second radial's endpoint int nYRadial2 // y-coord of second radial's endpoint);
畫一個矩形,並填充RectangleBOOL Rectangle( HDC hdc, // handle to device context int nLeftRect, // x-coord of bounding rectangle's upper-left corner int nTopRect, // y-coord of bounding rectangle's upper-left corner int nRightRect, // x-coord of bounding rectangle's lower-right corner int nBottomRect // y-coord of bounding rectangle's lower-right corner);
畫一個橢圓並填充EllipseBOOL Ellipse( HDC hdc, // handle to device context int nLeftRect, // x-coord of bounding rectangle's upper-left corner int nTopRect, // y-coord of bounding rectangle's upper-left corner
樓主,我也說老實話,我也是學習中的,希望你可以體諒,我個人認為知識是自己積累的,圖像編程也是我希望學習的方面,希望你努力,還有,控制項只是工具,不能解決一切問題……你是不是學過VB,如果是你就被VB毒害了……