




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一章 Windows 編程基礎(chǔ),Windows應(yīng)用程序,操作系統(tǒng),計(jì)算機(jī)硬件之間的相互關(guān)系,Windows應(yīng)用程序是通過系統(tǒng)發(fā)送的消息來處理用戶輸入的。,向下的箭頭表示操作系統(tǒng)可以操縱輸 出設(shè)備,以執(zhí)行特定的功能。 向上的箭頭表示操作系統(tǒng)能夠感知輸 出設(shè)備狀態(tài)的變化。 以上兩者就是操作系統(tǒng)與計(jì)算機(jī)硬件的 關(guān)系。,關(guān)于API,向下的箭頭表示應(yīng)用程序可以通知操作系統(tǒng)執(zhí)行某個(gè)具體的動(dòng)作,如操作系統(tǒng)能夠控制聲卡發(fā)出聲音,但它并不知道應(yīng)該何時(shí)發(fā)出何種聲音,需要應(yīng)用程序告訴操作系統(tǒng)該發(fā)出什么樣的聲音。這個(gè)關(guān)系好比有個(gè)機(jī)器人能夠完成行走的功能,但是,如果人們不告訴它往哪個(gè)方向上走,機(jī)器人是不會(huì)主動(dòng)行走的。
2、這里的機(jī)器人就是操作系統(tǒng),人們就是應(yīng)用程序。,關(guān)于API,那么,應(yīng)用程序是如何通知操作系統(tǒng)執(zhí)行某個(gè)功能的呢?有過編程經(jīng)驗(yàn)的讀者都應(yīng)該知道,在應(yīng)用程序中要完成某個(gè)功能,都是以函數(shù)調(diào)用的形式實(shí)現(xiàn)的,同樣,應(yīng)用程序也是以函數(shù)調(diào)用的方式來通知操作系統(tǒng)執(zhí)行相應(yīng)的功能的。 操作系統(tǒng)所能夠完成的每一個(gè)特殊功能通常都有一個(gè)函數(shù)與其對(duì)應(yīng),也就是說,操作系統(tǒng)把它所能夠完成的功能以函數(shù)的形式提供給應(yīng)用程序使用,應(yīng)用程序?qū)@些函數(shù)的調(diào)用就叫做系統(tǒng)調(diào)用,這些函數(shù)的集合就是Windows操作系統(tǒng)提供給應(yīng)用程序編程的接口(Application Programming Interface),簡(jiǎn)稱Windows API。 如
3、CreateWindow就是一個(gè)API函數(shù),應(yīng)用程序中調(diào)用這個(gè)函數(shù),操作系統(tǒng)就會(huì)按照該函數(shù)提供的參數(shù)信息產(chǎn)生一個(gè)相應(yīng)的窗口。,關(guān)于消息及消息隊(duì)列,向上的箭頭表示操作系統(tǒng)能夠?qū)⑤斎朐O(shè)備的變化上傳給應(yīng)用程序。 如用戶在某個(gè)程序活動(dòng)時(shí)按了一下鍵盤,操作系統(tǒng)馬上能夠感知到這一事件,并且能夠知道用戶按下的是哪一個(gè)鍵,操作系統(tǒng)并不決定對(duì)這一事件如何作出反應(yīng),而是將這一事件轉(zhuǎn)交給應(yīng)用程序,由應(yīng)用程序決定如何對(duì)這一事件作出反應(yīng)。 好比有個(gè)蚊子叮了我們一口,我們的神經(jīng)末梢(相當(dāng)于操作系統(tǒng))馬上感知到這一事件,并傳遞給了我們的大腦(相當(dāng)于應(yīng)用程序),我們的大腦最終決定如何對(duì)這一事件作出反應(yīng),如將蚊子趕走,或是將蚊
4、子拍死。 對(duì)事件作出反應(yīng)的過程就是消息響應(yīng)。,關(guān)于消息及消息隊(duì)列,操作系統(tǒng)是怎樣將感知到的事件傳遞給應(yīng)用程序的呢?這是通過消息機(jī)制(Message)來實(shí)現(xiàn)的。操作系統(tǒng)將每個(gè)事件都包裝成一個(gè)稱為消息的結(jié)構(gòu)體MSG來傳遞給應(yīng)用程序,參看MSDN。 MSG結(jié)構(gòu)定義如下: typedef struct tagMSG HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; MSG;,消息驅(qū)動(dòng)機(jī)制 在Windows應(yīng)用程序中,是通過接收消息、分 發(fā)消息、處理消息和用戶進(jìn)行交互的。這種消息驅(qū)動(dòng) 機(jī)制是 Wind
5、ows編程的最大特點(diǎn)。,關(guān)于句柄,句柄(HANDLE),資源的標(biāo)識(shí)。 操作系統(tǒng)要管理和操作這些資源,都是通過句柄來找到對(duì)應(yīng)的資源。按資源的類型,又可將句柄細(xì)分成圖標(biāo)句柄(HICON),光標(biāo)句柄(HCURSOR),窗口句柄(HWND),應(yīng)用程序?qū)嵗浔℉INSTANCE)等等各種類型的句柄。操作系統(tǒng)給每一個(gè)窗口指定的一個(gè)唯一的標(biāo)識(shí)號(hào)即窗口句柄。,消息隊(duì)列,消息隊(duì)列是一個(gè)“先進(jìn)先出的緩存區(qū)”。 通常為某種變量類型的數(shù)組,消息隊(duì)列的每個(gè)元素 都是一條消息,操作系統(tǒng)將消息按先后順序放到消息 隊(duì)列中,而應(yīng)用程序總是取走隊(duì)列中的第一條消息。 應(yīng)用程序得到消息后,便知道了用戶的操作,以及程序狀態(tài)的變化。,
6、Windows應(yīng)用程序的基本流程,WinMain函數(shù),Win是多任務(wù)管理的,同一應(yīng)用程序的多個(gè)窗口可能會(huì)同 時(shí)存,Win系統(tǒng)對(duì)每個(gè)窗口的執(zhí)行稱為一個(gè)實(shí)例,并用一個(gè)實(shí)例 句柄來唯一標(biāo)識(shí)。 WinMain函數(shù)的說明如下: int WINAPI WinMain ( HINSTANCE hThisInst,應(yīng)用程序當(dāng)前實(shí)例句柄 HINSTANCe hPrevInst,應(yīng)用程序其他實(shí)例句柄 LPSTR lpCmdLine, 指向程序命令行參數(shù)的指針 Int nCmdShow應(yīng)用程序開始執(zhí)行時(shí)窗口顯示方式的整數(shù)值標(biāo)識(shí) ),窗口的創(chuàng)建,創(chuàng)建一個(gè)完整的窗口需要經(jīng)過下面四個(gè)操作步驟: 設(shè)計(jì)一個(gè)窗口類; 注冊(cè)窗口
7、類; 創(chuàng)建窗口; 顯示及更新窗口。,創(chuàng)建窗口,HWND CreateWindow( LPCTSTR lpClassName, / 已注冊(cè)的窗口類名 LPCTSTR lpWindowName, / 窗口的標(biāo)題 DWORD dwStyle, / 窗口風(fēng)格 int x, / 窗口的水平位置 int y, / 窗口的垂直位置 int nWidth, / 寬度 int nHeight, / 高度 HWND hWndParent, / 父窗口句柄 HMENU hMenu, / 菜單句柄 HANDLE hInstance, / 實(shí)例句柄 LPVOID lpParam / 參數(shù)數(shù)據(jù) );,提取消息語句GetM
8、essage,BOOL GetMessage ( LPMSG lpMsg, / address of structure with message HWND hWnd, / handle of window UINT wMsgFilterMin, / first message UINT wMsgFilterMax / last message ); 解釋: 1、 LPMSG lpMsg 為一個(gè)指向消息結(jié)構(gòu)體的指針 在傳遞參數(shù)過程當(dāng)中,我們不需要對(duì)其進(jìn)行初始化,定義一個(gè)結(jié)構(gòu)體變量,將地址存放于lpMsg中。通過函數(shù)調(diào)用,它會(huì)自動(dòng)填充消息結(jié)構(gòu)體的成員變量。,2、窗口句柄 即表示我們獲得的是哪個(gè)窗
9、口的消息。 若將其值設(shè)置為NULL,也就是表示我們可以調(diào)用整 個(gè)線程的任何窗口的消息。 3、指定消息的最小和最大值 表示我們對(duì)消息的選擇過程,只選擇我們感興趣的消 息。即我們可以指定消息的有效范圍。 可以使用wMsgFilterMin , wMsgFilterMax來設(shè)定一個(gè)消息的最小,最大值。 參看:WM_KEYFIRST and WM_KEYLAST WM_MOUSEFIRST and WM_MOUSELAST,若兩個(gè)值都設(shè)置為0,則函數(shù)會(huì)返回所有的消息, 即最消息沒有范圍的過濾。 4、函數(shù)的返回值類型:BOOL 當(dāng)GetMessage使用可以得到消息,則返回為 真,則while為真,則為
10、死循環(huán),能保證程序的不斷 運(yùn)行。若為假,則退出循環(huán)。,轉(zhuǎn)換(翻譯)消息語句TranslateMessage,BOOL TranslateMessage ( CONST MSG *lpMsg / address of structure with message ); 對(duì)取到的消息對(duì)進(jìn)行轉(zhuǎn)換,當(dāng)我們?cè)阪I盤上有按鍵 時(shí),系統(tǒng)會(huì)產(chǎn)生WM_KEYDOWN, WM_KEYUP 消 息,并且參數(shù)會(huì)有剛才按鍵產(chǎn)生的一個(gè)虛擬的掃描 碼, TranslateMessage會(huì)將WM_KEYDOWN, WM_KEYUP 轉(zhuǎn)換為WM_CHAR 消息,并將轉(zhuǎn)換完 的消息投放到消息隊(duì)列當(dāng)中。,傳遞函數(shù)DispatchMe
11、ssage,將消息傳遞給窗口過程,即傳給回調(diào)函數(shù)。 也可以理解為: 將消息路由給了操作系統(tǒng),然后操作系統(tǒng)去調(diào)用窗口 過程函數(shù)。 窗口過程函數(shù):WinSunProc LRESULT CALLBACK WindowProc( HWND hwnd, / handle to window UINT uMsg, / message identifier WPARAM wParam, / first message parameter LPARAM lParam / second message parameter );,WinSunProc用來接收和處理各種不同的消息。在 VC+開發(fā)過程中,我們必須寫成
12、這種形式,但是名 稱可以改變,參數(shù)的類型不能改變。 DispatchMessage得到消息之后,操作系統(tǒng)回去調(diào) 用WinSunProc函數(shù),并將MSG的前四個(gè)參數(shù)給了 WinSunProc,而我們要判斷產(chǎn)生的是什么消息,利 用switch case語句進(jìn)行判斷,并作出相應(yīng)。,窗口過程函數(shù),第二個(gè)成員變量lpfnWndProc指定了這一類型窗口的過程函數(shù),也稱回調(diào)函數(shù)?;卣{(diào)函數(shù)的原理是這樣的,當(dāng)應(yīng)用程序收到給某一窗口的消息時(shí)(還記得前面講過的消息通常與窗口相關(guān)的嗎?),就應(yīng)該調(diào)用某一函數(shù)來處理這條消息。這一調(diào)用過程不用應(yīng)用程序自己來實(shí)施,而由操作系統(tǒng)來完成,但是,回調(diào)函數(shù)本身的代碼必須由應(yīng)用程序
13、自己完成。對(duì)于一條消息,操作系統(tǒng)到底調(diào)用應(yīng)用程序中的哪個(gè)函數(shù)(回調(diào)函數(shù))來處理呢?操作系統(tǒng)調(diào)用的就是接受消息的窗口所屬的類型中的lpfnWndProc成員指定的函數(shù)。每一種不同類型的窗口都有自己專用的回調(diào)函數(shù),該函數(shù)就是通過lpfnWndProc成員指定的。,設(shè)計(jì)窗口類,typedef struct _WNDCLASS UINT style; WNDPROClpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTS
14、TR lpszMenuName; LPCTSTR lpszClassName; WNDCLASS;,消息對(duì)話框窗口MessageBox,int MessageBox( HWND hWnd, / handle of owner window LPCTSTR lpText, / address of text in message box LPCTSTR lpCaption, / address of title of message box UINT uType / style of message box );,HDC hdc; device context. 一個(gè)設(shè)備上下文句柄 為系統(tǒng)內(nèi)部維
15、護(hù)的一個(gè)數(shù)據(jù)結(jié)構(gòu)。 微軟為我們提供了DC,用它來和設(shè)備驅(qū)動(dòng)程序打交 道,借用DC我們只需要下達(dá)命令,而Windows提供了 一個(gè)抽象的接口,稱為圖形設(shè)備接口(GDI,Graphical Device Interface),使得用戶直接利用系統(tǒng)的GDI 函數(shù)就能方便實(shí)現(xiàn)圖形和文本的輸出。而不關(guān)心與系 統(tǒng)的相連的外部設(shè)備的類型。 GetDC,/獲取DC ReleaseDC /釋放DC,繪制函數(shù):,HDC BeginPaint ( HWND hwnd, / handle to window LPPAINTSTRUCT lpPaint / pointer to structure for paint
16、information ); 第一個(gè)參數(shù)都是程序的窗口句柄,第二個(gè)參數(shù)是指向 型態(tài)為PAINTSTRUCT的結(jié)構(gòu)指針。PAINTSTRUCT 結(jié)構(gòu)中包含一些窗口消息處理程序,可以用來更新顯 示區(qū)域的內(nèi)容,它是一個(gè)系統(tǒng)內(nèi)部的結(jié)構(gòu)體,我們不 關(guān)心內(nèi)部的數(shù)據(jù)成員。,WndProc處理的消息為WM_PAINT,這個(gè)消息在 Windows程序設(shè)計(jì)中是很重要的。當(dāng)窗口顯示區(qū)域的一部分顯 示內(nèi)容或者全部變?yōu)椤盁o效”,以致于必須“更新畫面”時(shí),將由 這個(gè)消息通知程序。顯示區(qū)域的顯示內(nèi)容怎么會(huì)變得無效呢? 在最初建立窗口的時(shí)候,整個(gè)顯示區(qū)域都是無效的,因?yàn)槌?序還沒有在窗口上畫什么東西。第一條WM_PAINT消息(通常 發(fā)生在WinMain中調(diào)用UpdateWindow時(shí))指示窗口消息處理 程序在顯示區(qū)域上畫一些東西。在用戶改變窗口的大小后,顯 示區(qū)域的顯示內(nèi)容重新變得無效。 wndclass結(jié)構(gòu)的style字段設(shè)定為標(biāo)志CS_HREDRAW和 CS_VREDRAW,這樣的格式設(shè)定指示W(wǎng)indows,在窗口大小 改變后,就把整個(gè)窗口顯示內(nèi)容當(dāng)成無效。,文本輸出,BOOL TextOut( HDC hdc,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二年級(jí)下語文課本解析計(jì)劃
- 2025小學(xué)二年級(jí)語文上冊(cè)家校合作計(jì)劃
- 2025年呼吸科護(hù)理患者教育計(jì)劃
- 農(nóng)產(chǎn)品加工主要材料供應(yīng)及保供措施
- 初中校園足球畢業(yè)選手發(fā)展計(jì)劃
- 翻轉(zhuǎn)課堂促進(jìn)學(xué)生創(chuàng)新能力心得體會(huì)
- 土釘墻施工創(chuàng)新技術(shù)流程他
- 公路橋梁工程2025年工作總結(jié)及2025年工作計(jì)劃
- 鋼結(jié)構(gòu)工程EPC項(xiàng)目投資控制措施
- 2025年數(shù)學(xué)教研組課堂管理優(yōu)化計(jì)劃
- 工作擔(dān)保合同范本
- 景點(diǎn)聯(lián)票銷售策略與實(shí)證研究
- 福建省廈門一中2024年物理高一下期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 疾控中心慢病培訓(xùn)課件
- 三年級(jí)下冊(cè)數(shù)學(xué)計(jì)算題300道及答案
- 皮膚科病人的藥物不良反應(yīng)護(hù)理與預(yù)防
- 《SOP基礎(chǔ)知識(shí)培訓(xùn)》課件
- 圖解《黨政機(jī)關(guān)國(guó)內(nèi)公務(wù)接待管理規(guī)定》
- 自考高級(jí)英語上冊(cè)課文中英文對(duì)照
- 郴電國(guó)際變電站一線值班員筆試
- 工業(yè)產(chǎn)品質(zhì)量安全風(fēng)險(xiǎn)管控清單
評(píng)論
0/150
提交評(píng)論