版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第9章 Windows編程基礎(chǔ),第 9 章 第 1 節(jié) 9.1 Windows 程序設(shè)計(jì)基本概念,1. Visual C+應(yīng)用程序設(shè)計(jì)方法 (1)使用Windows提供的Windows API函數(shù) Windows API是Windows系統(tǒng)和Windows應(yīng)用程序間的標(biāo)準(zhǔn)程序接口,應(yīng)用程序可以通過(guò)此接口訪問(wèn)系統(tǒng) (2)使用Microsoft提供的MFC類庫(kù) MFC類庫(kù)集成了大量已經(jīng)預(yù)先定義好的類,用戶可以根據(jù)編程的需要調(diào)用相應(yīng)的類,或根據(jù)需要自定義有關(guān)的類。,2. Windows程序設(shè)計(jì)基本概念,(1) 窗口,窗口是應(yīng)用程序與用戶之間交互的接口環(huán)境。用戶可以通過(guò)窗口輸入數(shù)據(jù),控制應(yīng)用程序的運(yùn)行
2、;應(yīng)用程序可以通過(guò)窗口顯示數(shù)據(jù)和狀態(tài)。,(2) 對(duì)象與句柄,對(duì)象是指Windows的規(guī)范部件,包括各種窗口、菜單、按鈕、對(duì)話框以及程序模塊等。 句柄是指Windows使用的一個(gè)唯一的整數(shù)值,是一個(gè)4字節(jié)長(zhǎng)的數(shù)值,用于標(biāo)識(shí)應(yīng)用程序中不同的對(duì)象和同類對(duì)象中不同的實(shí)例,諸如一個(gè)窗口、按鈕、圖標(biāo)、滾動(dòng)條、輸出設(shè)備、控件或者文件等。應(yīng)用程序通過(guò)句柄能夠訪問(wèn)相應(yīng)的對(duì)象信息。表9-1列出常用的句柄。 表9-1 Windows常用句柄 句柄類型類型說(shuō)明句柄類型類型名稱HWND窗口句柄HBITMAP位圖句柄HINSTANCE實(shí)例句柄HCURSOR光標(biāo)句柄HDC當(dāng)前設(shè)備環(huán)境句柄HICON圖標(biāo)句柄HFONT字體句柄
3、HMENU菜單句柄HPEN畫筆句柄HFILE文件句柄HBRUSH畫刷句柄,(3) 事件驅(qū)動(dòng),Windows應(yīng)用程序以消息為基礎(chǔ),以事件驅(qū)動(dòng)之。Windows應(yīng)用程序啟動(dòng)之后將進(jìn)入一個(gè)消息循環(huán),等待系統(tǒng)或應(yīng)用程序的消息,消息的產(chǎn)生是因?yàn)槭录l(fā)生的結(jié)果,Windows程序設(shè)計(jì)主要圍繞編寫事件或消息的響應(yīng)函數(shù)上。有關(guān)事件驅(qū)動(dòng)的問(wèn)題在下節(jié)中將有詳細(xì)的討論。,(4) 消息及其在Windows編程中的應(yīng)用,Windows應(yīng)用程序的運(yùn)行是依靠事件來(lái)驅(qū)動(dòng),Windows應(yīng)用程序不斷等待(利用一個(gè)while循環(huán)),如果有事件發(fā)生,操作系統(tǒng)會(huì)以消息的形式傳遞給應(yīng)用程序,應(yīng)用程序會(huì)捕獲相應(yīng)的消息,然后響應(yīng)消息(調(diào)用
4、相應(yīng)的函數(shù))。 系統(tǒng)傳遞給應(yīng)用程序的消息數(shù)據(jù)是一個(gè)MSG結(jié)構(gòu)體數(shù)據(jù)類型的數(shù)據(jù)。結(jié)構(gòu)體MSG的定義如下: typedef struct tagMSG / 消息 HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; MSG;,第 9 章 第 2 節(jié) 9.2 Windows 中的事件驅(qū)動(dòng),Windows應(yīng)用程序以消息為基礎(chǔ),以事件驅(qū)動(dòng)之。 事件驅(qū)動(dòng)程序設(shè)計(jì)是圍繞著消息的產(chǎn)生與處理而展開(kāi)的。一條消息是關(guān)于發(fā)生的事件的信息。作為一個(gè)Windows程序員,其工作就是對(duì)正開(kāi)發(fā)的應(yīng)用程序所要發(fā)出或要接收的消息進(jìn)
5、行排序和管理。 在Windows中事件產(chǎn)生的消息由系統(tǒng)傳遞給應(yīng)用程序,應(yīng)用程序必須有一個(gè)消息循環(huán)接收消息和處理相應(yīng)的消息。消息循環(huán)的實(shí)現(xiàn)如下: MSG msg /定義一個(gè)MSG類型的變量 while (GetMessage ( /將消息傳遞給窗口函數(shù),以便處理相應(yīng)的消息 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法更適合于Windows的事件驅(qū)動(dòng)機(jī)制,因?yàn)槊嫦驅(qū)ο髮?wèn)題分解為一個(gè)或多個(gè)對(duì)象的處理,對(duì)象的屬性和行為的處理不能使用順序處理方式,比較適合這種根據(jù)用戶要求處理問(wèn)題的方法。,第 9 章 第 3 節(jié) 9.3 Windows 應(yīng)用程序中常見(jiàn)消息,消息在Windows程序設(shè)計(jì)中是很關(guān)鍵的因素,在API程序設(shè)計(jì)方法中
6、要求熟練記憶常見(jiàn)消息,但是在MFC程序設(shè)計(jì)方法中只是要求了解這些消息的相關(guān)含義即可。,1. 鼠標(biāo)消息,表9-3 常見(jiàn)的鼠標(biāo)消息 鼠標(biāo)消息名 說(shuō)明 WM_LBUTTONDOWN 單擊鼠標(biāo)左鍵時(shí)產(chǎn)生的消息 WM_LBUTTONUP 放開(kāi)鼠標(biāo)左鍵時(shí)產(chǎn)生的消息 WM_RBUTTONDOWN 單擊鼠標(biāo)右鍵時(shí)產(chǎn)生的消息 WM_RBUTTONUP 放開(kāi)鼠標(biāo)右鍵時(shí)產(chǎn)生的消息 WM_LBUTTONDBCLK 雙擊鼠標(biāo)左鍵時(shí)產(chǎn)生的消息 WM_RBUTTONDBCLK 雙擊鼠標(biāo)右鍵時(shí)產(chǎn)生的消息,2. 鍵盤消息,(1) WM_KEYDOWN 這是在按下一個(gè)非系統(tǒng)鍵時(shí)產(chǎn)生的消息。此外相似的消息還有WM_KEYUP,它是
7、在放開(kāi)非系統(tǒng)鍵時(shí)產(chǎn)生。 (2) WM_CHAR 這也是按下一個(gè)非系統(tǒng)鍵時(shí)產(chǎn)生的消息。,3. 關(guān)閉窗口消息,關(guān)閉窗口時(shí)產(chǎn)生的消息是WM_CLOSE。,4. 退出程序消息,退出程序時(shí)產(chǎn)生的消息是WM_QUIT,這是退出應(yīng)用程序時(shí)由PostQuitMessage函數(shù)發(fā)出的消息。,5. 重畫消息 這是一個(gè)十分重要的消息,當(dāng)發(fā)生用戶區(qū)移動(dòng)或顯示事件、用戶窗口改變大小的事件以及程序通過(guò)滾動(dòng)條滾動(dòng)窗口時(shí),均產(chǎn)生一條WM_PAINT消息。此外,當(dāng)下拉式菜單關(guān)閉并需要恢復(fù)被覆蓋的部分以及Windows清除對(duì)話框或消息框等對(duì)象,并需要恢復(fù)被覆蓋的部分時(shí),將產(chǎn)生WM_PAINT消息。,第 9 章 第 4 節(jié) 9.4
8、 API 及應(yīng)用程序基本框架,1. Windows應(yīng)用程序的組成,一個(gè)完整的Windows應(yīng)用程序通常由五種類型的文件組成,見(jiàn)下表。 文件類型 擴(kuò)展名 說(shuō)明 C+源程序文件 .cpp或.c 頭文件 .h 頭文件包括源程序文件需要的外部常量、變量、數(shù)據(jù)結(jié)構(gòu)和函數(shù)定義及其說(shuō)明 模塊定義文件 .def 模塊定義文件定義程序模塊的屬性 資源描述文件 .rc 資源描述文件定義源程序使用的資源 工程文件 .mak 各種源程序文件編譯后生成工程文件,經(jīng)進(jìn)一步編譯后成為可執(zhí)行文件,2. Windows API 應(yīng)用程序?qū)嵗?Windows應(yīng)用程序的開(kāi)始部分十分相似,下面通過(guò)一個(gè)實(shí)例的分析充分展示W(wǎng)indows
9、應(yīng)用程序的各個(gè)部分。,【例9-1】簡(jiǎn)單窗口顯示。,/頭文件windows.h中包含應(yīng)用程序中所需要的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)的定義 #include /窗口函數(shù)說(shuō)明 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; /* 以下初始化窗口類 */ int WINAPI WinMain ( /WinMain函數(shù) HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) static char szAppName = 示例 ; /窗口類名 HWND h
10、wnd ; /窗口句柄 MSG msg ; /Windows消息 WNDCLASSEX wndclass ; /窗口類,可以是WNDCLASS wndclass.cbSize = sizeof (wndclass) ; /窗口類數(shù)據(jù)大小 wndclass.style = CS_HREDRAW | CS_VREDRAW ; /窗口類型 wndclass.lpfnWndProc = WndProc ; /窗口處理函數(shù)為WndProc wndclass.cbClsExtra = 0 ; /窗口類無(wú)擴(kuò)展 wndclass.cbWndExtra = 0 ; /窗口實(shí)例無(wú)擴(kuò)展 wndclass.hInst
11、ance = hInstance ; /當(dāng)前實(shí)例句柄 wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; /窗口的最小化圖標(biāo)為默認(rèn)圖標(biāo) wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; /窗口采用箭頭光標(biāo) wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; /窗口背景為白色 wndclass.lpszMenuName = NULL ; /窗口無(wú)菜單 wndclass.lpszClassName = szAppName
12、 ; /窗口類名為“示例” wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ; /* 以下是對(duì)窗口類的注冊(cè) */ if(! RegisterClassEx ( 程序運(yùn)行結(jié)果如右圖所示。 例9-1的運(yùn)行結(jié)果,3. Windows API 應(yīng)用程序結(jié)構(gòu)分析,Windows的應(yīng)用程序具有相對(duì)固定的基本結(jié)構(gòu),其中由入口函數(shù)WinMain和窗口函數(shù)構(gòu)成基本框架,并包含各種數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)與函數(shù)等。,1 WinMain函數(shù),WinMain函數(shù)是所有Windows應(yīng)用程序的入口,類似于C語(yǔ)言中的main函數(shù),其功能是完成一系列的定義和初始化工作,并產(chǎn)
13、生消息循環(huán)。 WinMain函數(shù)有三個(gè)基本的組成部分:函數(shù)說(shuō)明、初始化和消息循環(huán)。,(1) WinMain函數(shù)說(shuō)明,int WINAPI WinMain ( HINSTANCE hInstance, /應(yīng)用程序當(dāng)前實(shí)例句柄 HINSTANCE hPrevInstance, /應(yīng)用程序其他實(shí)例句柄 PSTR szCmdLine, /指向程序命令行參數(shù)的指針 int iCmdShow ) /應(yīng)用程序開(kāi)始執(zhí)行時(shí)窗口顯示方式的整數(shù)值,(2) 初始化,初始化包括窗口類的定義、注冊(cè)、創(chuàng)建窗口實(shí)例和顯示四個(gè)部分。 窗口類的定義 窗口類定義通過(guò)給窗口類數(shù)據(jù)結(jié)構(gòu)WNDCLASS賦值完成,結(jié)構(gòu)體類型WNDCLAS
14、S的定義如下: typedef struct tagWNDCLASS UINT style; /窗口類的樣式,一般設(shè)置為0 WNDPROC lpfnWndProc; /指向窗口函數(shù)的指針 int cbClsExtra; /分配在窗口類結(jié)構(gòu)后的字節(jié)數(shù) int cbWndExtra; /分配在窗口實(shí)例后的字節(jié)數(shù) HINSTANCE hInstance; /定義窗口類的應(yīng)用程序的實(shí)例句柄 HICON hIcon; /窗口類的圖標(biāo) HCURSOR hCursor; /窗口類的光標(biāo) HBRUSH hbrBackground; /窗口類的背景刷 LPCWSTR lpszMenuName; /窗口類的菜單名
15、 LPCWSTR lpszClassName; /窗口類名 WNDCLASS;, 注冊(cè)窗口類,RegisterClass( /wndclass為窗口類結(jié)構(gòu), 創(chuàng)建窗口,創(chuàng)建一個(gè)窗口類的實(shí)例由函數(shù)CreatWindow( )實(shí)現(xiàn),該函數(shù)的原形為: HWND CreateWindow( LPCTSTR lpClassName, / 窗口類名 LPCTSTR lpWindowName, / 窗口標(biāo)題名稱 DWORD dwStyle, / 窗口樣式,常用窗口樣式見(jiàn)表9-5 int x, / 窗口左上角橫坐標(biāo) int y, / 窗口左上角縱坐標(biāo) int nWidth, / 窗口寬度 int nHeigh
16、t, / 窗口高度 HWND hWndParent, /該窗口的父窗口句柄 HMENU hMenu, / 窗口主菜單句柄 HANDLE hInstance, / 創(chuàng)建窗口的應(yīng)用程序當(dāng)前句柄 LPVOID lpParam / 指向一個(gè)傳遞給窗口的參數(shù)值的指針 );, 顯示窗口,ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); (3) 消息循環(huán) MSG msg /定義一個(gè)MSG類型的變量 while (GetMessage ( /將消息傳遞給窗口函數(shù),以便處理相應(yīng)的消息 ,2 窗口函數(shù),窗口函數(shù)是應(yīng)用程序處理接收到的消息的函數(shù),其中包含了應(yīng)用程序?qū)Ω鞣N可能接收到的消息的處理過(guò)程。 窗口函數(shù)的一般形式如下: LRES
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 信用分析師崗前規(guī)章制度考核試卷含答案
- 科研助理安全檢查能力考核試卷含答案
- 釬焊工持續(xù)改進(jìn)考核試卷含答案
- 耐火材料成型操作工安全應(yīng)急能力考核試卷含答案
- 肉品分級(jí)員班組評(píng)比模擬考核試卷含答案
- 絕緣成型件制造工安全素養(yǎng)模擬考核試卷含答案
- 紡織染色機(jī)操作工安全知識(shí)競(jìng)賽測(cè)試考核試卷含答案
- 鉆孔機(jī)司機(jī)標(biāo)準(zhǔn)化考核試卷含答案
- 水聲換能器制造工安全管理水平考核試卷含答案
- 水工監(jiān)測(cè)工保密意識(shí)強(qiáng)化考核試卷含答案
- 種植業(yè)合作社賬務(wù)處理
- 【麗江玉龍旅游薪酬制度的創(chuàng)新研究6100字】
- 公司兩權(quán)分離管理制度
- 車輛叉車日常檢查記錄表
- 廣東高校畢業(yè)生“三支一扶”計(jì)劃招募考試真題2024
- 膠帶機(jī)硫化工藝.課件
- 種雞免疫工作總結(jié)
- 河南省商丘市柘城縣2024-2025學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)試題(含答案)
- 河南省信陽(yáng)市2024-2025學(xué)年高二上學(xué)期1月期末英語(yǔ)試題(含答案無(wú)聽(tīng)力原文及音頻)
- 給女朋友申請(qǐng)書
- 八下《桃花源記》《小石潭記》全文背誦(原文+譯文)
評(píng)論
0/150
提交評(píng)論