Windows程序設計
㈠ Windows程序設計該怎麼學
《windows程序設計》是一本講得非常具體且基礎的書,用來充作長時間的參考會比較有用,但是線性學習下來是非常困難的,實際上即使是已經寫了幾年windows程序的人,也可能並不怎麼能背下來DIB那一堆。有人可能要說:這就叫不求甚解。但是這樣的甚解根本一點必要都沒有啊,用到再去查就好了,被底層的東西絆住,是別想往上走的。
現在使用圖形,無論是使用GDI+,還是使用已有的圖形處理庫,亦或是使用別人封裝好的DIB,都要比用原生API簡單易懂很多。DIB那一套只是圖像格式方面的細節而已,我推薦LZ在閱讀這本書的時候適可而止,以後用到細節的時候再去翻閱查找。
LZ既然已經讀了之前,那麼就可以去自己動手寫一些東西了。編程嘛,寫東西才是學習最快的時候。不過我感覺原生API確實痛苦,LZ在這之後可以去嘗試別的windows開發方法(畢竟你已經有了windows編程的基礎世界觀了),比如MFC或者乾脆學習C#,這兩個的好處是和微軟本身的契合度高,用VS那一套東西就行,環境好搭。另外,時下比較好用的C++開發工具就是QT,不過是跨平台的,就是說和原生windowAPI距離遠不少。
㈡ c語言 windows程序設計!!
應該是
《深入淺出mfc》
《windows編程基礎》
《人月神話》
《設計模式》
那些吧!
㈢ Windows程序設計與C語言的主要區別是什麼
一、主體不同
1、Windows程序設計:基於MFC類庫進行的程序開發設計。
2、C語言:是一門面向過程的、抽象化的通用程序設計語言,廣泛應用於底層開發。
二、特點不同
1、Windows程序設計:以C++類的形式封裝了Windows API,並且包含一個應用程序框架,以減少應用程序開發人員的工作量。
2、C語言:僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。盡管C語言提供了許多低級處理的功能,但仍然保持著跨平台的特性。
三、優缺點不同
1、Windows程序設計:包含大量Windows句柄封裝類和很多Windows的內建控制項和組件的封裝類。專心的考慮程序的邏輯,而不是這些每次編程都要重復的東西,但是由於是通用框架,沒有最好的針對性。
2、C語言:依靠非常全面的運算符和多樣的數據類型,可以輕易完成各種數據結構的構建,通過指針類型更可對內存直接定址以及對硬體進行直接操作,因此既能夠用於開發系統程序,也可用於開發應用軟體。
㈣ Windows程序設計 和 MFC程序設計的區別
Windows程序設計一般是指用c語言編寫windows應用程序,或叫做win32編程,MFC程序設計是利用C++,以MFC為基礎編寫windows應用程序;VC是一個開發工具,在這個開發工具里,可以進行win32編程和MFC程序設計。
㈤ Windows程序設計5版現在還有必要學習嗎
不用,那是windows程序設計那本書是很經典,但是,那是很老很復雜,甚至沒必要復雜的框架。建議學完C語言後,學gtk,因為gtk是跨平台的圖形界面庫,而且編程思想模式和安卓,iOS都很相似 學學有助於你深入了解...
㈥ windows程序設計是什麼啊
就是利用windows的應用程序介面(API),編寫windows程序。
一般用C/C++;
如果用c,就是直接用這些API。
如果用C++,就用MFC(微軟基礎類庫,封裝了windows 的API)。
㈦ 請介紹一下windows程序設計有哪幾種主要干什麼
Windows API Windows 這個多作業系統除了協調應用程序的執行、分配內存、管理資源…之外, 她同時也是一個很大的服務中心,調用這個服務中心的各種服務(每一種服務就是一個函數),可以幫應用程式達到開啟視窗、描繪圖形、使用周邊設備等目的,由於這些函數服務的對象是應用程序(Application), 所以便稱之為 Application Programming Interface,簡稱 API 函數。WIN32 API也就是Microsoft Windows 32位平台的應用程序編程介面。 MFC ,微軟基礎類( Microsoft Foundation Classes ),實際上是微軟提供的,用於在 C++ 環境下編寫應用程序的一個框架和引擎, VC++ 是 WinDOS 下開發人員使用的專業 C++ SDK ( SDK,Standard SoftWare Develop Kit,專業軟體開發平台 ),MFC就是掛在它之上的一個輔助軟體開發包,MFC作為與VC++血肉相連的部分,用C++開發軟體用的最多的應該就是他了! 用VC編寫Windows程序有兩種:1. Windows c方式(SDK),2. C++方式:即對SDK函數進行包裝,如VC的MFC,BCB的VCL等。SDK編程就是直接調用Windows的API進行編程,平時人們常說"用SDK寫程序"就是指用Windows的API函數來寫程序,API由上千個API函數組成(Win95的API有兩千多個)。而MFC是API的封閉,結合面向對象程序設計的繼承性和多態性組成一個個的"類",共由一百多個類組成。盡管MFC比SDK方便,但要深入VC,直接去學MFC卻是不明智的選擇。只有在熟悉了MFC的運行機制的情況下,才有可能深入下去。所以學VC最好是先學用SDK編寫程序,在此期間掌握Windows操作系統的工作原理和各API函數的應用,然後再深入MFC。 數據結構的基礎就是離散數學,想自學離散數學的話,不知道你的數學怎麼樣,如果數學好的話,要自學離散數學的話估計不會太難,但是跟數據結構結合起來的話就比較難了!
㈧ 學習《windows程序設計》需要什麼基礎
很多人從MFC開始學習,結果常常是一頭霧水,知難而退;也有人毅力堅強,熬過了MFC的陣痛期,最後卻是知其然而不知其所以然,並且思維被限制在MFC的框架之中,遇到稍微有點規模的程序就無從下手了。
以我個人的這些年的Windows開發經歷,我建議Windows上的學習路線如下:
首先當然是語言的學習,比如C或C++(STL),它是平台無關的
然後可以從《Windows程序設計》(by
Charles Petzold)入門,從最原始的Windows API開始學習
接下來可以學習《Windows核心編程》(by Jeffrey Richter),
它會讓你比較深刻的理解Windows的前台和後台機制
學完上面2本書,對Windows系統已經比較熟悉了,再要深入的話可以學下《Windows 圖形編程》(by 袁鋒)。
至此,已經可以用API的方式開發大部分Windows應用程序了,
接下來可以學一些常用庫,比如MFC,WTL,ATL等,此時學習MFC和一開始就學習MFC已是截然不同的感覺,彼時痛苦難熬,此時會心一笑。
其他就是根據項目需要,專業知識的學習,比如COM技術,網路,D3D等。
㈨ WINDOWS程序設計的特點是什麼
一、事件驅動的程序設計
1\傳統的MS-DOS程序主要採用順序的、關聯的、過程驅動的程序設計方法。一個程序是一系列預先定義好的操作序列的組合,它具有一定的開頭、中間過程和結束。程序直接控製程序事件和過程的順序。這樣的程序設計方法是面向程序而不是面向用戶的,交互性差,用戶界面不夠友好,因為它強迫用戶按照某種不可更改的模式進行工作。
2\事件驅動程序設計是一種全新的程序設計方法,它不是由事件的順序來控制,而是由事件的發生來控制,而這種事件的發生是隨機的、不確定的,並沒有預定的順序,這樣就允許程序的的用戶用各種合理的順序來安排程序的流程。
對於需要用戶交互的應用程序來說,事件驅動的程序設計有著過程驅動方法無法替代的優點。
它是一種面向用戶的程序設計方法,它在程序設計過程中除了完成所需功能之外,更多的考慮了用戶可能的各種輸入,並針對性的設計相應的處理程序。
它是一種「被動」式程序設計方法,程序開始運行時,處於等待用戶輸入事件狀態,然後取得事件並作出相應反應,處理完畢又返回並處於等待事件狀態。
二、 消息循環與輸入
事件驅動圍繞著消息的產生與處理展開,一條消息是關於發生的事件的消息。
事件驅動是靠消息循環機制來實現的。
消息是一種報告有關事件發生的通知。
消息類似於DOS下的用戶輸入,但比DOS的輸入來源要廣,Windows應用程序的消息來源有以下四種:
(1)輸入消息:包括鍵盤和滑鼠的輸入。----------這一類消息首先放在系統消息隊列中,然後由Windows將它們送入應用程序消息隊列中,由應用程序來處理消息。
(2)控制消息:用來與Windows的控制對象,如列表框、按鈕、檢查框等進行雙向通信。當用戶在列表框中改動當前選擇或改變了檢查框的狀態時發出此類消息。這類消息一般不經過應用程序消息隊列,而是直接發送到控制對象上去。
(3)系統消息:對程序化的事件或系統時鍾中斷作出反應。一些系統消息,象DDE消息(動態數據交換消息)要通過Windows的系統消息隊列,而有的則不通過系統消息隊列而直接送入應用程序的消息隊列,如創建窗口消息。
(4)用戶消息:這是程序員自己定義並在應用程序中主動發出的,一般由應用程序的某一部分內部處理。
Windows操作系統包括三個內核基本元件:GDI, KERNEL ,USER。
其中GDI(圖形設備介面)負責在屏幕上繪制像素、列印硬拷貝輸出,繪制用戶界麵包括窗口、菜單、對話框等。
系統內核KERNEL支持與操作系統密切相關的功能:如進程載入,文本切換、文件I/O,以及內存管理、線程管理等。
USER為所有的用戶界面對象提供支持,它用於接收和管理所有輸入消息、系統消息並把它們發給相應的窗口的消息隊列。消息隊列是一個系統定義的內存塊,用於臨時存儲消息;或是把消息直接發給窗口過程。每個窗口維護自己的消息隊列,並從中取出消息,利用窗口函數進行處理。
三、圖形輸出
Windows程序不僅在輸入上與DOS程序不同,而且在程序輸出上也與DOS有著很大不同,主要表現為:
1.DOS程序獨占整個顯示屏幕,其他程序在後台等待。
2.Windows程序的所有輸出都是圖形。
3.Windows下的輸出是設備無關的。-------Windows下的應用程序使用圖形設備介面(GDI)來進行圖形輸出。GDI屏蔽了不同設備的差異,提供了設備無關的圖形輸出能力,Windows應用程序只要發出設備無關的GDI請求(如調用Rectangle畫一個矩形),由GDI去完成實際的圖形輸出操作。對於一台具有列印矩形功能的PostScript列印機來說,GDI可能只需要將矩形數據傳給驅動程序就可以了,然後由驅動程序產生PostScript命令繪制出相應的矩形;而對於一台沒有矩形輸出功能的點陣列印機來說,GDI可能需要將矩形轉化為四條線,然後向驅動程序發出畫線的指令,在列印機上輸出矩形。
四、GDI(圖形設備介面)介紹:
GDI提供兩種基本服務:創建圖形輸出和存儲圖象。
GDI提供了大量用於圖形輸出的函數,這些函數接收應用程序發出來的繪圖請求、處理繪圖數據並根據當前使用設備調用相應的設備驅動程序產生繪圖輸出。這些繪圖函數分為三類:一是文字輸出,二是矢量圖形函數,用於畫線、圓等幾何圖形,三是光柵(點陣圖)圖形函數,用於繪制點陣圖。
GDI識別四種類型的設備:顯示屏幕、硬拷貝設備(列印機、繪圖機)、點陣圖和圖元文件。
前兩者是物理設備,後兩者是偽設備。
一個偽設備提供了一種在RAM里或磁碟里存儲圖象的方法。
點陣圖存放的是圖形的點位信息,佔用較多的內存,但速度很快;圖元文件保存的是GDI函數的調用和調用參數,佔用內存較少,但依賴於GDI,因此不可能用某個設備來創建圖元文件,而且速度比點陣圖要慢。
GDI的圖形輸出是面向窗口的,面向窗口包含兩層含義:
(1)每個窗口作為一個獨立的繪圖介面來處理,有它自己的繪圖坐標。當程序在一個窗口中繪圖時,首先建立預設的繪圖坐標,原點(0,0)位於窗口用戶區的左上角。每個窗口必須獨立的維護自己的輸出。
(2)繪圖僅對於本窗口有效,圖形在窗口邊界會被自動裁剪,也就是說窗口中的每一個圖形都不會越出邊界。即使想越出邊界,也是不可能的,窗口會自動的防止其他窗口傳過來的任何像素。這樣,你在窗口內繪圖時,就不必擔心會偶然覆蓋其他程序的窗口,從而保證了Windows下同時運行多個任務時各個窗口的獨立性。
五、資源共享
對於DOS程序來說,它運行時獨占系統的全部資源,包括顯示器、內存等,在程序結束時才釋放資源。而Windows是一個多任務的操作系統,各個應用程序共享系統提供的資源,常見的資源包括:設備上下文,畫刷,畫筆,字體,對話框控制,對話框,圖標,定時器,插入符號,通信埠,電話線等。
Windows要求應用程序必須以一種能允許它共享Windows資源的方式進行設計,它的基本模式是這樣的:
1.向Windows系統請求資源;
2.使用該資源;
3.釋放該資源給Windows以供別的程序使用。
即使最有經驗的Windows程序員也常常會忽略第三步。如果忽略了這一步,輕則當時不出錯,但過一會兒出現程序運行出現異常情況,或干擾別的程序正常運行;重則立即死機,比如設備上下文沒有釋放時。
在Windows應用程序設計中,CPU也是一種非常重要的資源,因此應用程序應當避免長時間的佔用CPU資源(如一個特別長的循環);如果確實需要這樣做,也應當採取一些措施,以讓程序能夠響應用戶的輸入。主存也是一個共享資源,要防止同時運行的多個應用程序因協調不好而耗盡內存資源。
應用程序一般不要直接訪問內存或其他硬體設備,如鍵盤、滑鼠、計數器、屏幕或串口、並口等。Windows系統要求絕對控制這些資源,以保證向所有的應用程序提供公平的不中斷的運行。如果確實要訪問串並口,應當使用通過Windows提供的函數來安全的訪問。
六、Windows程序的組成
編寫一個典型的Windows應用程序,一般需要:
1.C,CPP源程序文件:源程序文件包含了應用程序的數據、類、功能邏輯模塊(包括事件處理、用戶界面對象初始化以及一些輔助常式)的定義。
2.H,HPP頭文件:頭文件包含了CPP、C源文件中所有數據、模塊、類的聲明。當一個CPP、C源文件要調用另一個CPP、C中所定義的模塊功能時,需要包含那個CPP、C文件對應的頭文件。
3.資源文件:包含了應用程序所使用的全部資源定義,通常以.RC為後綴名。這里的資源是應用程序所能夠使用的一類預定義工具中的一個對象,包括:字元串資源、加速鍵表、對話框、菜單、點陣圖、游標、工具條、圖標、版本信息和用戶自定義資源等。
在DOS程序設計過程中,所有的界面設計工作都在源程序中完成。而在Windows程序設計過程中,象菜單、對話框、點陣圖等可視的對象被單獨分離出來加以定義,並存放在資源源文件中,然後由資源編譯程序編譯為應用程序所能使用的對象的映象。資源編譯使應用程序可以讀取對象的二進制映象和具體數據結構,這樣可以減輕為創建復雜對象所需要得程序設計工作。
程序員在資源文件中定義應用程序所需使用的資源,資源編譯程序編譯這些資源並將它們存儲於應用程序的可執行文件或動態連接庫中。
七、程序中引用資源的好處:
1.降低內存需求:當應用程序運行時,資源並不隨應用程序一起裝入內存,而是在應用程序實際用到這些資源時才裝入內存。在資源裝入內存時,它們擁有自己的數據段,而不駐留於應用程序數據段中;當內存緊張時,可以廢棄這些資源,使其佔用的內存空間供他用,而當應用程序用到這些資源時才自動裝入,這種方式降低了應用程序的內存需求,使一次可運行更多的程序,這也是Windows內存管理的優點之一。
2.便於統一管理和重復利用:將點陣圖、圖標、字元串等按資源文件方式組織便於統一管理和重用。比如,將所有的錯誤信息放到資源文件里,利用一個函數就可以負責錯誤提示輸出,非常方便。如果在應用程序中要多次用到一個代表公司的徽標點陣圖,就可以將它存放在資源文件中,每次用到時再從資源文件中裝入。這種方式比將點陣圖放在一個外部文件更加簡單有效。
3.應用程序與界面有一定的獨立性,有利於軟體的國際化:由於資源文件獨立於應用程序設計,使得在修改資源文件時(如調整對話框大小、對話框控制位置),可以不修改源程序,從而簡化了用戶界面的設計。另外,目前所提供的資源設計工具一般都是採用「所見即所得」方式,這樣就可以更加直觀、可視的設計應用程序界面。由於資源文件的獨立性,軟體國際化工作也非常容易。比如,現在開發了一個英文版的應用程序,要想把它漢化,只需要修改資源文件,將其中的對話框、菜單、字元串資源等漢化即可,而無需直接修改源程序。
但是,應用程序資源只是定義了資源的外觀和組織,而不是其功能特性。例如,編輯一個對話框資源,可以改變對話框的安排和外觀,但是卻沒有也不可能改變應用程序響應對話框控制的方式。外觀的改變可以通過編輯資源來實現,而功能的改變卻只能通過改變應用程序的源代碼,然後重新編譯來實現。
C、CPP編譯器將C源程序編譯成目標程序,然後使用連接程序將所有的目標程序(包括各種庫)連接在一起,生成可執行程序。在製作Windows應用程序時,編譯器還要為引出函數生成正確的入口和出口代碼。
連接程序生成的可執行文件還不能在Windows環境下運行,必須使用資源編譯器對其進行處理。資源編譯器對可執行文件的處理是這樣的:如果該程序有資源描述文件,它就把已編譯為二進制數據的資源加入到可執行文件中;否則,僅對該可執行文件進行相容性標識。應用程序必需經過資源編譯器處理才可以在Windows環境下運行。
八、結構化程序設計和面向對象的程序設計
面向對象技術是目前流行的系統設計開發技術,它包括面向對象分析和面向對象程序設計。面向對象程序設計技術的提出,主要是為了解決傳統程序設計方法——結構化程序設計所不能解決的代碼重用問題。
結構化程序設計從系統的功能入手,按照工程的標准和嚴格的規范將系統分解為若干功能模塊,系統是"實現模塊功能的函數和過程"的集合。由於用戶的需求和軟、硬體技術的不斷發展變化,按照功能劃分設計的系統模塊必然是易變的和不穩定的。這樣開發出來的模塊可重用性不高。
面向對象程序設計從所處理的數據入手,以數據為中心而不是以服務(功能)為中心來描述系統。它把編程問題視為一個數據集合,數據相對於功能而言,具有更強的穩定性。
面向對象程序設計同結構化程序設計相比最大的區別就在於:前者首先關心的是所要處理的數據,而後者首先關心的是功能。
面向對象程序設計是一種圍繞真實世界的概念來組織模型的程序設計方法,它採用對象來描述問題空間的實體。一般的認為,對象是包含現實世界物體特徵的抽象實體,它反映了系統為之保存信息和(或)與它交互的能力。它是一些屬性及服務的一個封裝體,在程序設計領域,可以用「對象=數據+作用於這些數據上的操作」這一公式來表達。
"類"是具有相同操作功能和相同的數據格式(屬性)的對象的集合。
類可以看作抽象數據類型的具體實現。
數據類型是指數據的集合和作用於其上的操作的集合,而抽象數據類型不關心操作實現的細節。
從外部看,類型的行為可以用新定義的操作加以規定。
類為對象集合的抽象,它規定了這些對象的公共屬性和方法;對象為類的一個實例。蘋果是一個類,而放在桌上的那個蘋果則是一個對象。
對象和類的關系相當於一般的程序設計語言中變數和變數類型的關系。
消息是向某"對象"請求服務的一種表達方式。對象內有方法和數據,外部的用戶或對象對該對象提出的服務請求,可以稱為向該對象發送消息。
"合作"是指兩個對象之間共同承擔責任和分工。
在Windows中,程序的基本單位不是過程和函數,而是窗口。一個窗口是一組數據的集合和處理這些數據的方法和窗口函數。從面向對象的角度來看,窗口本身就是一個對象。Windows程序的執行過程本身就是窗口和其他對象的創建、處理和消亡過程。Windows中的消息的發送可以理解為一個窗口對象向別的窗口對象請求對象的服務過程。因此,用面向對象方法來進行Windows程序的設計與開發是極其方便的和自然的。
這是我轉別人的 看的有用請加分
㈩ 到底該如何學習windows程序設計啊
想學了。我覺得看書可以先看一些簡單易懂的,等有了一個大概印象,再看這些比較有深度的。我也是看完c++直接看windows程序設計的。開始很難理解一個簡單的hello word 就有很多不懂的大寫字母的函數和常量,不知道怎麼學起。後來反復看了很多遍,才慢慢入門。其實,我們學習的時候不必太執著於弄清每一個很復雜的大寫字母常量的含義。可以先根據書上的講解,它講到哪裡就看到哪裡。然後重點是把windows下的程序的框架搞明白,把windows系統處理的程序的流程掌握清楚(我感覺windows下程序運行流程和我們以前所認識的編的程序有很大的不同)。最後就會慢慢發現。學習windows編程無非也就是學會調用windows的api函數,和使用它定義的一些常量和結構什麼的。除了記憶很多比較麻煩的函數和常量,其實沒有什麼新的思想和難度。這個你也沒必要完全記憶,可以試著找一下比較好的參考手冊。
最後,祝你學習順利。記得要堅持才能克服困難踏過這道門檻。