vc第3章Windows編程基礎(chǔ)_第1頁
vc第3章Windows編程基礎(chǔ)_第2頁
vc第3章Windows編程基礎(chǔ)_第3頁
vc第3章Windows編程基礎(chǔ)_第4頁
vc第3章Windows編程基礎(chǔ)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1Visual C+第三章Windows 編程基礎(chǔ)2022/9/112內(nèi)容提要Windows編程基礎(chǔ)知識(shí)Windows應(yīng)用程序常用消息Windows中的事件驅(qū)動(dòng)程序設(shè)計(jì)Windows應(yīng)用程序組成及編程步驟.2022/9/113.1.Windows編程基礎(chǔ)知識(shí)集資源和工具于一體的開發(fā)系統(tǒng)可視化開發(fā)系統(tǒng)(資源和工具的集成)源程序編輯器編譯器調(diào)試工具語法檢查程序修改運(yùn)行監(jiān)視應(yīng)用程序Help和Setup開發(fā)工具函數(shù)庫和系統(tǒng)函數(shù)開發(fā)工具資源管理器各種窗口和控件的編輯器例程庫及Help其他功能3.2022/9/113.1.Windows編程基礎(chǔ)知識(shí)Windows的程序設(shè)計(jì)語言“面向?qū)ο?Object-Or

2、iented)”的語言VC+,VB和VJ適合于Windows的程序開發(fā)。Windows的程序中,對(duì)象是具有規(guī)范形態(tài)和操作模式的部件:窗口菜單按鈕對(duì)話框程序模塊4.2022/9/1153.1.Windows編程基礎(chǔ)知識(shí)Windows的程序設(shè)計(jì)方法傳統(tǒng)編寫法-使用API(Application Programming Interface)交互式方法-使用MFC (Microsoft Foundation Class)編寫Windows程序主要工作:在創(chuàng)建對(duì)象為對(duì)象屬性賦值.2022/9/11應(yīng)用程序接口API定義Win系統(tǒng)各種特殊函數(shù)及數(shù)據(jù)結(jié)構(gòu)包含上千個(gè)可調(diào)用系統(tǒng)功能的標(biāo)準(zhǔn)API函數(shù)實(shí)現(xiàn)應(yīng)用程序與

3、Win系統(tǒng)間的標(biāo)準(zhǔn)程序接口API函數(shù)實(shí)現(xiàn)三種功能窗口管理函數(shù)窗口的創(chuàng)建、移動(dòng)和修改圖形設(shè)備(GDI)函數(shù)與設(shè)備無關(guān)的圖形操作系統(tǒng)服務(wù)函數(shù)與操作系統(tǒng)有關(guān)的多種服務(wù)3.1 Windows編程基礎(chǔ)知識(shí)6.2022/9/11用MFC庫交互式可視化編程MFC類庫含有大量已定義好的類(class),可根據(jù)編程的需要,調(diào)用相應(yīng)的類,或自定義有關(guān)的類實(shí)現(xiàn)可視化交互開發(fā)方式選擇所需對(duì)象并確定其屬性,搭建起應(yīng)用程序的“大框架”,編寫必要的細(xì)節(jié)代碼段,構(gòu)成完整的應(yīng)用程序。3.1 Windows編程基礎(chǔ)知識(shí)7.2022/9/118API函數(shù)和MFC類庫編程需了解的相關(guān)概念窗口(Window)事件驅(qū)動(dòng)(Event-dr

4、iven)句柄(Handle)消息(Message)3.1 Windows編程基礎(chǔ)知識(shí).2022/9/113.1 Windows編程基礎(chǔ)知識(shí)(1) 窗口9.2022/9/1110窗口及其功能系統(tǒng)對(duì)應(yīng)用程序管理的基本單位應(yīng)用程序與用戶之間交互的接口環(huán)境Window應(yīng)用程序基本的操作單元Win應(yīng)用程序編程創(chuàng)建一個(gè)或多個(gè)窗口Win應(yīng)用程序運(yùn)行窗口內(nèi)部、窗口與窗口之間、窗口與系統(tǒng)之間進(jìn)行數(shù)據(jù)處理與交換的過程。3.1 Windows編程基礎(chǔ)知識(shí).2022/9/1111(2) 事件驅(qū)動(dòng)相關(guān)概念事件一種情況或一種活動(dòng)的發(fā)生、或一種指定狀態(tài)的變化,例如:按下鼠標(biāo)事件驅(qū)動(dòng)由描述事件發(fā)生的信息(消息)來驅(qū)動(dòng)程序的

5、執(zhí)行。程序的執(zhí)行取決于事件發(fā)生的順序;消息的產(chǎn)生并不要求有次序之分。事件驅(qū)動(dòng)編程方法針對(duì)事件或消息的處理進(jìn)行;適于編寫交互式程序。3.1 Windows編程基礎(chǔ)知識(shí).2022/9/1112(3) 句柄相關(guān)概念句柄用于標(biāo)識(shí)不同的對(duì)象和同類對(duì)象中不同的實(shí)例的標(biāo)識(shí)符,一個(gè)其長度為4字節(jié)長整數(shù)值。句柄是Win應(yīng)用程序編程的基礎(chǔ),應(yīng)用程序通過句柄訪問相應(yīng)的對(duì)象信息。3.1 Windows編程基礎(chǔ)知識(shí).2022/9/1113句柄標(biāo)識(shí)的對(duì)象實(shí)例窗口按鈕圖標(biāo)滾動(dòng)條輸出設(shè)備控件文件.。常用句柄類型HWND 窗口句柄HINSTANCE 前實(shí)例句柄HCURSOR 光標(biāo)句柄HFONT 字體句柄HPEN 畫筆句柄HBR

6、USH 畫刷句柄HDC 設(shè)備環(huán)境句柄HBITMAP 位圖句柄HICON 圖標(biāo)句柄HMENU 菜單句柄HFILE 文件句柄3.1 Windows編程基礎(chǔ)知識(shí).2022/9/11143.1 Windows編程基礎(chǔ)知識(shí).2022/9/1115(4) 消息相關(guān)概念應(yīng)用程序利用消息與系統(tǒng)及其它應(yīng)用程序進(jìn)行信息交換。消息的三個(gè)組成部分:消息號(hào):由事先定義好的消息名標(biāo)識(shí)字參數(shù)(wParam) :用于提供消息的附加信息長字參數(shù)(lParam) :用于提供消息的附加信息附加信息 與具體消息號(hào)的值有關(guān)3.1 Windows編程基礎(chǔ)知識(shí).2022/9/11消息用結(jié)構(gòu)MSG表示typedef struct tagMS

7、G HWND hwnd; /窗口句柄,為null,則檢索隊(duì)的所有消息 UINT message;/消息號(hào),由Windows.h中的宏定義來標(biāo)識(shí) WPARAM wParam; /消息的附加信息 LPARAM lParam; /消息的附加信息 DWORD time; /指定消息送至隊(duì)列的時(shí)間 POINT pt; /指定消息發(fā)送時(shí)屏幕光標(biāo)的位置,MSG;數(shù)據(jù)類型說明: Windows Data Types windef.h3.1 Windows編程基礎(chǔ)知識(shí)16.2022/9/1117消息的分類 各種消息分類,分別以不同的前綴表示:BM 按鈕控制消息。CB 組合框控制消息。DM 默認(rèn)下壓式按鈕控制消息

8、。EM 編輯控制消息。LB 列表框控制消息。SBM 滾動(dòng)條控制消息。WM 窗口消息。3.1 Windows編程基礎(chǔ)知識(shí).2022/9/11183.2. Windows應(yīng)用程序常用消息窗口管理消息初始化消息輸入消息系統(tǒng)消息剪貼板消息控制處理消息控制通知消息滾動(dòng)條通知消息非用戶區(qū)消息MDI消息DDE消息應(yīng)用程序自定義的消息.2022/9/11193.2. Windows應(yīng)用程序常用消息(1) WM_LBUTTONDOWN:單擊鼠標(biāo)左鍵的消息,附加信息:lParam當(dāng)前光標(biāo)位置低字節(jié)為X坐標(biāo)值高字節(jié)為Y坐標(biāo)值wParam整數(shù)以標(biāo)識(shí)鼠標(biāo)鍵的按下狀態(tài)MK_LBUTTON按下鼠標(biāo)左鍵MK_MBUTTON按

9、下鼠標(biāo)中鍵MK_RBUTTON按下鼠標(biāo)右鍵.2022/9/11203.2. Windows應(yīng)用程序常用消息類似的鼠標(biāo)左右鍵消息還有:WM_LBUTTONUP:放開左鍵;WM_RBUTTONDOWN:單擊右鍵;WM_RBUTTONUP: 放開右鍵;WM_LBUTTONDBLCLK:雙擊左鍵;WM_RBUTTONDBLCLK:雙擊右鍵。.2022/9/11213.2. Windows應(yīng)用程序常用消息(2) WM_KEYDOWN:Posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsys

10、tem key is a key that is pressed when the ALT key is not pressed. wParam按下鍵的虛擬鍵碼,標(biāo)識(shí)按或放。lParam記錄按鍵的重復(fù)次數(shù)、掃描碼、轉(zhuǎn)移代碼及先前鍵的狀態(tài)等信息。相似的消息:WM_KEYUP, 放開非系統(tǒng)鍵時(shí)產(chǎn)生.2022/9/11223.2. Windows應(yīng)用程序常用消息(3) WM_ CHAR:Posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage

11、 function. The WM_CHAR message contains the character code of the key that was pressed. wParam按下鍵的ASCII碼。lParam與WM_KEYDOWN的相同。.2022/9/11233.2. Windows應(yīng)用程序常用消息(4) WM_CREATE:由CreateWindow函數(shù)發(fā)出的消息。wParam未用。lParam個(gè)指向CREATESTRUCT數(shù)據(jù)結(jié)構(gòu)的指針。(5) WM_CLOSE:關(guān)閉窗口時(shí)產(chǎn)生的消息。wParam和lParam均未用。(6) WM_DESTROY:由DestroyWiodo

12、w函數(shù)發(fā)出的消息。wParam和lParam均未用。.2022/9/11243.2. Windows應(yīng)用程序常用消息(7) WM_QUIT退出應(yīng)用程序時(shí)由PostQuitMessage函數(shù)發(fā)出的消息。wParam標(biāo)識(shí)退出時(shí)的有關(guān)信息。lParam未用。(8) WM_PAINT用戶區(qū)移動(dòng)或顯示、用戶窗口改變大小程序通過滾動(dòng)條滾動(dòng)窗口下拉式菜單關(guān)閉并需要恢復(fù)被覆蓋的部分Windows清除對(duì)話框等對(duì)象,并需要恢復(fù)被覆蓋的部分.2022/9/11253.3 Windows中的事件驅(qū)動(dòng)程序設(shè)計(jì)計(jì)算平均成績啟動(dòng)輸入姓名輸入第一次測(cè)試成績輸入第二次測(cè)試成績輸入第三次測(cè)試成績計(jì)算平均成績結(jié)束過程驅(qū)動(dòng)方法啟動(dòng)消

13、息處理結(jié)束輸入姓名輸入第一次成績輸入第二次成績輸入第三次成績計(jì)算平均成績事件驅(qū)動(dòng)方法.2022/9/11263.4.Windows應(yīng)用程序組成及編程步驟3.4.1 應(yīng)用程序的組成3.4.2 源程序組成結(jié)構(gòu)3.4.3 應(yīng)用程序舉例.2022/9/11273.4.1 應(yīng)用程序的組成一個(gè)完整的Windows應(yīng)用程序通常包含如下幾種類型的文件:C/C+語言源程序文件(.c或.cpp)頭文件(.h)模塊定義文件(.def)資源描述文件(.rc)項(xiàng)目文件(.mak).2022/9/11283.4.2 源程序組成結(jié)構(gòu)WinMain和WndProc是Windows應(yīng)用程序的主體入口函數(shù)WinMainEvery

14、 Windows program includes an entry-point function that is named either WinMain or wWinMain.所有應(yīng)用程序的入口,類似Main函數(shù),完成一系列的定義和初始化,并產(chǎn)生消息循環(huán)窗口函數(shù)WndProcAn application-defined function that processes messages sent to a window.處理消息.2022/9/11三個(gè)基本的組成部分:函數(shù)說明初始化消息循環(huán)功能注冊(cè)窗口類,建立窗口及初始化進(jìn)入消息循環(huán),根據(jù)接受的消息調(diào)用相應(yīng)的處理過程當(dāng)消息循環(huán)檢索到WM_Q

15、UIT時(shí)終止程序運(yùn)行WinMain函數(shù)29.2022/9/11WinMain函數(shù)(1) 函數(shù)說明int WINAPI WinMain ( HINSTANCE hThisInst,應(yīng)用程序當(dāng)前實(shí)例句柄 HINSTANCE hPrevInst,應(yīng)用程序其他實(shí)例句柄 LPSTR lpszCmdLine, 指向命令行參數(shù)的指針 Int nCmdShow初始窗口顯示方式的整數(shù)值標(biāo)識(shí))注意!Win是多任務(wù)管理的,同一應(yīng)用程序可能同時(shí)存在多個(gè)窗口,Win系統(tǒng)對(duì)每個(gè)窗口的執(zhí)行稱為一個(gè)實(shí)例,并用一個(gè)實(shí)例句柄來唯一標(biāo)識(shí)30.2022/9/11WinMain函數(shù)(2) 初始化窗口類的定義:定義窗口的形式與功能Loa

16、dIcon()LoadCursor() GetStockObject()窗口類的注冊(cè):窗口類必須先注冊(cè)后使用RegisterClass()創(chuàng)建窗口實(shí)例CreateWindow()顯示窗口ShowWindow()UpdateWindow()31.2022/9/11(a)窗口類定義通過給窗口類WNDCLASS賦值完成,該數(shù)據(jù)結(jié)構(gòu)中包含窗口類的各種屬性。窗口類定義常用以下函數(shù):LoadIcon加載一個(gè)窗口圖標(biāo)。其原型為:HICON LoadIcon( HINSTANCE hInstance, LPCTSTR lpIconName)圖標(biāo)資源名或系統(tǒng)預(yù)定義圖標(biāo)標(biāo)識(shí)名圖標(biāo)資源模塊句柄WinMain函數(shù)(2

17、) 初始化32.2022/9/11LoadCursor加載一個(gè)窗口光標(biāo)HCURSOR LoadCursor( HINSTANCE hInstance, LPCTSTR lpCursorName)GetStockObject獲取系統(tǒng)提供的背景刷HBRUSH GetStockObject(int nBrush);光標(biāo)資源名或系統(tǒng)預(yù)定義圖標(biāo)標(biāo)識(shí)名光標(biāo)資源模塊句柄WinMain函數(shù)(2) 初始化33.2022/9/11(b)注冊(cè)窗口類Win系統(tǒng)提供部分預(yù)定義的窗口類,程序員也可以自定義窗口類,窗口類必須先注冊(cè)后使用。由函數(shù)RegisterClass()實(shí)現(xiàn)注冊(cè)。 RegisterClass(&wndc

18、lass);/wndclass為窗口類結(jié)構(gòu) RegisterClass函數(shù)的返回為布爾值,注冊(cè)成功則返回真WinMain函數(shù)(2) 初始化34.2022/9/11(c) 創(chuàng)建窗口示例HWND Create Window ( LPCTSTR lpszClassName,窗口類名 LPCTSTR lpszTitle,窗口標(biāo)題名 DWORD dwStyle, 創(chuàng)建窗口的樣式 int x,y, 窗口左上角坐標(biāo) int nWidth,nHeight, 窗口寬度和度高 HWND hwndParent, 該窗口的父窗口句柄 HWENU hMenu, 窗口主菜單句柄 HINSTANCE hInstance,

19、應(yīng)用程序當(dāng)前句柄 LPVOID lpParam 傳遞給窗口的參數(shù)值的指針 )WinMain函數(shù)(2) 初始化35.2022/9/11WinMain函數(shù)(2) 初始化36.2022/9/11(d)顯示窗口調(diào)用ShowWindow函數(shù)在屏幕上顯示窗口ShowWindow(hwnd,nCmdshow);顯示窗口后,調(diào)用UpdateWindow更新并繪制用戶區(qū),并發(fā)出WM_PAINT消息。 UpdateWindow(hwnd);WinMain函數(shù)(2) 初始化37.2022/9/1138消息循環(huán)的常見格式如下:MSG Msg;while (GetMessage (&Msg,NULL,0,0) Tran

20、slateMessage(&Msg); DispatchMessage(&Msg); WinMain函數(shù)(3)消息循環(huán).2022/9/1139GetMessage從消息隊(duì)列中讀取一條消息,并將消息放在MSG結(jié)構(gòu)中返回零值,即檢索到WM_QUIT消息 時(shí),程序結(jié)束循環(huán)并退出TranslateMessage將消息的虛擬鍵轉(zhuǎn)換為字符信息DispatchMessage將消息傳送到指定窗口函數(shù)WinMain函數(shù)(3)消息循環(huán).2022/9/11WinMain函數(shù)(3)消息循環(huán)40.2022/9/1141窗口函數(shù)WndProc定義了應(yīng)用程序?qū)邮盏降牟煌⒌捻憫?yīng)包含了對(duì)各種可能接收到的消息的處理過程由一

21、個(gè)或多個(gè)switch語句組成每一條case語句對(duì)應(yīng)一種消息,當(dāng)應(yīng)用程序接收到一個(gè)消息時(shí),相應(yīng)的case語句被激活并執(zhí)行相應(yīng)的響應(yīng)程序模塊。.2022/9/1142窗口函數(shù)WndProcLRESULT CALLBACK WndProc(HWND hwnd,UINT messgae, WPARAM wParam,LPARAM lParam ) switch(message) message為標(biāo)識(shí)的消息 case break; case WM_DESTROY: PostQuitMessage(0); default: return DefWindowProc(hwnd,message,wParam,lParam); return(0);為未定義處理過程的消息提供缺省處理在消息處

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論