WINDOWS應(yīng)用程序設(shè)計(jì)_第1頁
WINDOWS應(yīng)用程序設(shè)計(jì)_第2頁
WINDOWS應(yīng)用程序設(shè)計(jì)_第3頁
WINDOWS應(yīng)用程序設(shè)計(jì)_第4頁
WINDOWS應(yīng)用程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

linteOSW

馬洪兵

1

★4

Windows應(yīng)用程序設(shè)方

?Win32API

?Windows應(yīng)用程序設(shè)計(jì)模式

?Windows應(yīng)用程序的基本結(jié)構(gòu)

?結(jié)構(gòu)化異常處理

?動態(tài)鏈接庫

Win32API★4

?Windows應(yīng)用程序總是在常規(guī)的用戶態(tài)下運(yùn)行

■操作系統(tǒng)核心組件則對外界表現(xiàn)出中立的性質(zhì),它

們不實(shí)現(xiàn)用戶界面,甚至不提供編程接口,系統(tǒng)服務(wù)

調(diào)用對應(yīng)用程序而言是不公開的

?Windows操作系統(tǒng)依靠一組用戶態(tài)環(huán)境子系統(tǒng),作

為應(yīng)用程序與操作系統(tǒng)核心之間的接口

3

Win32API*

?Win32子系統(tǒng)是Windows2000/XP操作系統(tǒng)的固有的

子系統(tǒng),這個子系統(tǒng)能夠提供應(yīng)用程序運(yùn)行所需要的

窗口管理、圖形設(shè)備接口、媒體控制、內(nèi)存管理等各

項(xiàng)服務(wù)功能,這些功能以函數(shù)庫的形式組織在一起,

這就是Win32應(yīng)用程序編程接口,簡稱為Win32Api

?Win32子系統(tǒng)負(fù)責(zé)將API調(diào)用轉(zhuǎn)換成Windows操作系

統(tǒng)的系統(tǒng)服務(wù)調(diào)用

?對于應(yīng)用程序開發(fā)人員而言,他所看到的Windows操

作系統(tǒng)實(shí)際上就是Win32API,操作系統(tǒng)的其他部分

對他來說是完全透明的。

Win32API

Windows應(yīng)用程序與操作系統(tǒng)的關(guān)系

5

Win32API

?USER32.DLL:負(fù)責(zé)處理用戶接口

?GDI32.DLL:負(fù)責(zé)在圖形設(shè)備上執(zhí)行繪圖操作

?KERNEL32.DLL:操作系統(tǒng)核心功能服務(wù)

?COMCTL32.DLL:通用控件庫

?COMDLG32.DLL:公共對話框

?SHELL32.DLL:用戶界面外殼

?DIBENG.DLL:圖形引擎

?NETAPI32.DLL:網(wǎng)絡(luò)

6

Win32API

標(biāo)準(zhǔn)Win32API函數(shù)分類:

?系統(tǒng)服務(wù)

?通用控件庫

■圖形設(shè)備接口

?網(wǎng)絡(luò)服務(wù)

?用戶接口

?系統(tǒng)Shell

?Windows系統(tǒng)信息

7

■窗口

目的是保證用戶能夠同時(shí)訪問大多數(shù)應(yīng)用程序

應(yīng)用程序使用窗口來顯示輸出或接收用戶的輸入

2、應(yīng)用程序只有通過窗口才能訪問系統(tǒng)顯示器;并且

苣仁,通過使用窗口與其他應(yīng)用程序共享系統(tǒng)顯示器

8

?事件驅(qū)動

Windows應(yīng)用程序的執(zhí)行順序取決于事件發(fā)生的順

序,描述事件發(fā)生的信息稱為消息,而事件驅(qū)動程

序設(shè)計(jì)則是圍繞著消息的產(chǎn)生與處理而展開的。

波方夕

消息可以分為由硬件設(shè)備產(chǎn)生的輸入消息和來自

容矽Windows系統(tǒng)的窗口管理消息

發(fā)送消息---send

指派消息---post

9

物Windows應(yīng)用程序設(shè)計(jì)模式

?事件驅(qū)動

硬件輸入

10

?Windows應(yīng)用程序的開發(fā)流程

Windows應(yīng)用程序分為程序代碼和用戶界面資源

兩部分,兩部分通過資源編譯器組合為一個完整

的EXE文件

將用戶界面資源一類的靜態(tài)數(shù)據(jù)與程序代碼相分

離有如下一些優(yōu)點(diǎn):

叱減少內(nèi)存要求;

,劃清了程序員與用戶界面設(shè)計(jì)人員的任

務(wù)分工;

a用戶界面風(fēng)格的變化可以不必修改程序

代碼或只需進(jìn)行少量的修改。

Windows應(yīng)用程序設(shè)計(jì)植

?Windows應(yīng)用程序的開發(fā)流程

工具

文本文件

二進(jìn)制文件12

A

1/Windows應(yīng)用程序的基

Windows應(yīng)用程序具有相對固定的基本結(jié)構(gòu),

入口點(diǎn)函數(shù)WinMain和窗口函數(shù)構(gòu)成了

音aWindows應(yīng)用程序的基本框架。

13

<O

5V7..揄函數(shù)

dWinMain函數(shù)是程序的入口點(diǎn),相當(dāng)于標(biāo)準(zhǔn)C語

言中的main函數(shù)

京,WinMain函數(shù)主要由四部分組成

■?

?!?夕注冊窗口類

2若。?個典口

O,建立消息循環(huán)

W

14

M7

?WinMain函數(shù)----->消息循環(huán)

勃Windows并不直接把輸入消息發(fā)送給應(yīng)用程序,

而是將其送入應(yīng)用程序的消息隊(duì)列之中。止匕外,

SWindows和其他應(yīng)用程序也可以將消息指派到應(yīng)

用程序隊(duì)列中。

應(yīng)用程序必須讀取應(yīng)用程序隊(duì)列,檢索消息并將

泗它們發(fā)送出去,以便適當(dāng)?shù)拇翱诤瘮?shù)能夠處理它

O—們,負(fù)責(zé)這一任務(wù)的便是消息循環(huán)。

15

?WinMain函數(shù)>消息循環(huán)

whil一(G一tM一ssag一(&Msg,NULL,0,0))

Translat一M一ssag一(&Msg);

DispatchM一ssag一(&Msg);

)

GetMessage函數(shù)檢索到WM_QUIT消息時(shí)返回非零

值,檢索到其他消息均返向KULL。

16

■窗口函數(shù)

窗口函數(shù)也稱為窗口過程,負(fù)責(zé)從Windows接收消

息,并根據(jù)這些消息完成特定的操作

窗口函數(shù)是一個回調(diào)函數(shù),由Windows系統(tǒng)調(diào)用,

應(yīng)用程序并不會直接調(diào)用它的窗口函數(shù)

窗口函數(shù)的主體是由一系列case語句組成的消

受用息處理程序段

O—

如果窗口函數(shù)不處理某些消息,則必須把它們

蚪傳給DefWindowProc函數(shù)

17

Windows應(yīng)用程序的基本結(jié)

V/indows系統(tǒng)

指沈的消息發(fā)送的消息

WM.KEYDOWNWM_CREATE1

WM_KEYUPWM_DESTROY

WM_M0USEMOVEWM_SIJE3

WM_LBUTTONDOWNWM_PAINT

WM_QUIT

j①

DcfWindowProc()

應(yīng)用程序的

一消息隊(duì)列

檢留到

的相j息

J(iI

GelMessage()⑤

y

應(yīng)用程序

WinMain()

DispatchMessage()

回調(diào)

WndProc()

1case1

1casc2

case3

1DefauIt______________

18

1Windows應(yīng)用程序的基本結(jié)

nH當(dāng)用戶關(guān)閉窗口時(shí),Windows系統(tǒng)將把

WM_DESTROY消息發(fā)送給該窗口的窗口函數(shù),

在這I中情況下,窗口函數(shù)應(yīng)該使用

PostQuitMessage函數(shù)將WM_QUIT消息發(fā)送到

s應(yīng)用程序隊(duì)列中,這樣可以使GetMessage函數(shù)

檢索到WM_QUIT消息,從而結(jié)束消息循環(huán),

泗退出應(yīng)用程序。

O—

19

Windows應(yīng)用程序的基本結(jié)

20

結(jié)構(gòu)化異常處理張先4

Windows在系統(tǒng)底層提供了一種稱為結(jié)構(gòu)化異常處理

SEH的系統(tǒng)機(jī)制。利用SEH可以把程序主要的工作同

錯誤處理分離開來,這樣的分離,可以使程序員集中

精力關(guān)注程序要完成的任務(wù),而將可能發(fā)生的錯誤放

在后面處理。

異常是在應(yīng)用程序的正常執(zhí)行過程中發(fā)生的不正常事

件。CPU引發(fā)的異常稱為硬件異常,操作系統(tǒng)和應(yīng)用

程序直接引發(fā)的異常,稱為軟件異常

結(jié)構(gòu)化異常處理張先4

SHE是操作系統(tǒng)的一種系統(tǒng)機(jī)制,與特定的程序

設(shè)計(jì)語言無關(guān)。

應(yīng)用程序要利用系統(tǒng)提供的SHE機(jī)制,則必須借

助于特定程序設(shè)計(jì)語言的相關(guān)語法。

因此,SEH不但涉及操作系統(tǒng),而且與編譯器有

密切的關(guān)系。

結(jié)構(gòu)化異常處理包括異常處理和終止處理兩個方面

22

結(jié)構(gòu)化異常處理**卷

?異常處理

try

F

...//guardeds一ction

)

一xc一pt(一xc一ptionfilt一r)

F

...//exceptionhandl一r

23

結(jié)構(gòu)化異常處理張先4

?異常處理

異常過濾器返回如下三個異常標(biāo)識符之一

^ECXEPTIONEXECUTEHANDLER

eECXEPTI0N1C0NTINUgEXECUTION

^ECXEPTIONZCONTINUEZSEARCH

24

結(jié)構(gòu)化異常處理張先4

?終止處理

Windows應(yīng)用程序在運(yùn)行時(shí)通常要分配資源,使

用這些資源,然后釋放它們。

由于異常改變了控制的流程,因此很容易導(dǎo)致無

法釋放在產(chǎn)生異常的代碼塊中分配的資源。

使用終止處理程序可以保證進(jìn)行這樣的清除工作

結(jié)構(gòu)化異常處理

?終止處理

try

???

}

finally

???

}

26

結(jié)構(gòu)化異常處理張先4

?終止處理

有兩種情況可能使受保護(hù)段不正常地結(jié)束:

它在try塊中執(zhí)行了return、goto、break或

continue等控制語句

行在try塊中發(fā)生異常

27

結(jié)構(gòu)化異常處理張先4

■軟件異常

當(dāng)一個函數(shù)執(zhí)行失敗時(shí),習(xí)慣上要返回一些特

殊的值來,函數(shù)的調(diào)用者可以檢查這些特殊值

并采取一種替代的動作

如果這個調(diào)用者是被另一個調(diào)用者調(diào)用的函數(shù)

,那么它還需要將它自己的失敗代碼返回給它

的調(diào)用者

這種錯誤代碼的逐層傳遞會使源程序變得非常

難于編寫和維護(hù)

采用軟件異常則可以解決這些問題

28

動態(tài)鏈接庫*決斗

動態(tài)鏈接庫DLL是一個可執(zhí)行程序模塊,模塊中包

含了可以被其他應(yīng)用程序或其他DLL共享的程序代

碼和資源

采用DLL的優(yōu)點(diǎn):

,當(dāng)多個進(jìn)程同時(shí)使用同一個DLL時(shí),只要在內(nèi)

存中裝入它的一個副本即可,從而可以節(jié)省內(nèi)存;

eDLL與調(diào)用它的應(yīng)用程序相分離,因此可以在

不修改應(yīng)用程序的情況下對DLL進(jìn)行更新;

,只要在調(diào)用DLL中的函數(shù)時(shí)遵循相同的調(diào)用規(guī)

范,那么DLL中的函數(shù)就可以被各種編程語言編

制的應(yīng)用程序調(diào)用

29

動態(tài)鏈接庫

?DLL到進(jìn)程地址空間的映射

裝入時(shí)刻動態(tài)鏈接

動態(tài)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論