當前位置:編程學習大全網 - 源碼下載 - Windows程序設計的特點?

Windows程序設計的特點?

l樓主您好!這個有點專業喔。但是我知道內容在《Windows程序設計(第五版 )清華大學出版社》那裏可以找到詳細介紹的。大家都是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程序的設計與開發是極其方便的和自然的。 最後祝您好運!!!

  • 上一篇:java的發展歷史
  • 下一篇:90 SpringCloud 解決分布式事務--lcn解決分布式事務
  • copyright 2024編程學習大全網