版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、教學(xué)重點1、Windows程序設(shè)計基本概念 窗口、事件驅(qū)動、句柄、消息、匈牙利命名法2、Windows應(yīng)用程序源程序結(jié)構(gòu) WinMain函數(shù)(入口函數(shù)) -初始化、消息循環(huán) WinProc函數(shù)(窗口函數(shù)) -處理消息,實現(xiàn)程序具體功能第1章 Windows編程基礎(chǔ) 1.1 Windows程序設(shè)計Windows的程序設(shè)計語言 VC,VB,VJ都是“面向?qū)ο蟆钡某绦蛟O(shè)計語言。對象 Windows的規(guī)范部件,如窗口、菜單、按鈕、對話框、程序模塊等。 第1章 Windows編程基礎(chǔ) 1.1 Windows程序設(shè)計對象特征 具有規(guī)范形態(tài)和操作模式,編寫Windows程序相當(dāng)一部分工作是在創(chuàng)建對象和為對象
2、屬性賦值。編程方法 傳統(tǒng)編寫法-API 交互式方法-MFC 第1章 Windows編程基礎(chǔ) 1.1 Windows程序設(shè)計Windows API 系統(tǒng)函數(shù)數(shù)據(jù)結(jié)構(gòu) Windows API是Windows系統(tǒng)與Windows應(yīng)用程序間的標(biāo)準程序接口,Windows應(yīng)用程序可以利用大量的標(biāo)準API函數(shù)調(diào)用系統(tǒng)功能。 第1章 Windows編程基礎(chǔ) 1.2 Windows編程基本概念 (1) 窗口 (2) 句柄 (3) 事件驅(qū)動 (4) 消息 (5) 匈牙利命名法第1章 Windows編程基礎(chǔ) 窗口一般包含下列組成部分:標(biāo)題欄、菜單框、工作區(qū)、窗口邊界、 最大化按鈕、最小化按鈕、垂直滾動條、水平滾動
3、條。第1章 Windows編程基礎(chǔ) 1.2 Windows編程基本概念-窗口1.2 Windows編程基本概念窗口是系統(tǒng)管理應(yīng)用程序的基本單位,是應(yīng)用程序與用戶之間交互的接口環(huán)境,是Windows應(yīng)用程序基本的操作單元。編寫一個Windows應(yīng)用程序首先應(yīng)創(chuàng)建窗口,隨后應(yīng)用程序的運行過程即是窗口與系統(tǒng)之間進行數(shù)據(jù)處理與數(shù)據(jù)交換的過程。第1章 Windows編程基礎(chǔ) 1.2 Windows編程基本概念-事件驅(qū)動DOS程序:順序的、過程驅(qū)動程序都有一個明顯的開始、明顯的過程以及一個明顯的結(jié)束。Windows程序:事件驅(qū)動程序的流程不是由事件的順序來控制,而是由事件的發(fā)生來控制,所有的事件是無序的。
4、第1章 Windows編程基礎(chǔ) 1.2 Windows編程基本概念-句柄句柄是一個4字節(jié)長的數(shù)值,用于標(biāo)識應(yīng)用程序中不同的對象和同類對象中不同的實例。應(yīng)用程序通過句柄訪問相應(yīng)的對象信息。第1章 Windows編程基礎(chǔ) 1.2 Windows編程基本概念-句柄第1章 Windows編程基礎(chǔ) HWND窗口句柄HDC設(shè)備環(huán)境句柄HBITMAP位圖句柄HCURSOR光標(biāo)句柄HICON圖標(biāo)句柄HFONT字體句柄HMENU菜單句柄HPEN畫筆句柄HFILE文件句柄HBRUSH畫刷句柄HINSTANCE實例句柄1.2 Windows編程基本概念-消息消息是描述事件發(fā)生的信息(如按下鼠標(biāo)或鍵盤),Window
5、s程序設(shè)計是針對事件或消息的處理進行。第1章 Windows編程基礎(chǔ) 1.2 Windows編程基本概念-消息Windows應(yīng)用程序利用Windows消息(Message)與應(yīng)用程序及系統(tǒng)進行信息交換。消息組成消息號:由事先定義好的消息名標(biāo)識;字參數(shù)(wParam) :提供消息的附加信息;長字參數(shù)(lParam) :提供消息的附加信息。第1章 Windows編程基礎(chǔ) 1.2 Windows編程基本概念-消息Windows消息的類型前綴符號用于消息宏識別消息附屬的分類 第1章 Windows編程基礎(chǔ) BM按鈕控件消息DM按鈕控件消息CB組合框控件消息EM編輯控件消息LB列表框控件消息SBM滾動條
6、控件消息WM窗口消息1.2 Windows編程基本概念-匈牙利命名法小寫字母做為變量名前綴說明類型,其余部分描述變量意義與功能第1章 Windows編程基礎(chǔ) 前綴類型說明chchar字符bBOOL布爾值n(l)int整數(shù)1.2 Windows編程基本概念-匈牙利命名法第1章 Windows編程基礎(chǔ) 前綴類型說明wWORD16位無符號整數(shù)dwDWORD32位無符號數(shù)lpszLPTSTR指向字符串的32位指針hHandle窗口對象的句柄1.3 Windows的消息循環(huán)1、Windows系統(tǒng)為應(yīng)用程序保持一個消息隊列。2、當(dāng)有事件發(fā)生后,Windows先將激發(fā)事件翻譯成一個Windows消息,然后再
7、把這個消息加入到這個應(yīng)用程序的消息隊列中去。3、應(yīng)用程序需要通過消息循環(huán)來接收這些消息。 第1章 Windows編程基礎(chǔ) 1.3 Windows的消息循環(huán)MSG msg; / 定義消息名while (GetMessage (&msg, NULL, 0, 0)TranslateMessage (&msg) ; / 翻譯消息DispatchMessage (&msg) ; / 分發(fā)消息第1章 Windows編程基礎(chǔ) 1.3 Windows的消息循環(huán)-MSG結(jié)構(gòu)體typedef struct tagMSGHWND hwnd; UINT message;WPARAM wParam; LPARAM lP
8、aram;DWORD time; POINT pt; MSG, *PMSG;第1章 Windows編程基礎(chǔ) 1.3 Windows的消息循環(huán)-POINT結(jié)構(gòu)體定義typedef struct tagPOINT LONG x; LONG y; POINT;第1章 Windows編程基礎(chǔ) 1.3 Windows的消息循環(huán)-MSG結(jié)構(gòu)體hwnd:消息將要發(fā)送到的那個窗口的句柄,用這個參數(shù)可以決定讓哪個窗口接收消息。message:消息號,它唯一標(biāo)識了一種消息類型。每種消息類型都在windows.h文件進行了預(yù)定義。wParam:一個32位的消息參數(shù),這個值的確切意義取決于消息本身。lParam:同上
9、。 第1章 Windows編程基礎(chǔ) 1.3 Windows的消息循環(huán)-MSG結(jié)構(gòu)體time:消息放入消息隊列中的時間,在這個域中寫入的并非當(dāng)時日期,而是從Windows啟動后所測量的時間值。Windows用這個域來使消息保持正確的順序。pt:消息放入消息隊列時的鼠標(biāo)坐標(biāo)。第1章 Windows編程基礎(chǔ) 1.3 Windows的消息循環(huán)-GetMessageBOOL GetMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax );第1章 Windows編程基礎(chǔ) 1.3 Windows的消息循環(huán)-GetMes
10、sagelpMsg:指定要接收消息的MSG結(jié)構(gòu)的地址;hWnd:窗口句柄,一般將其設(shè)置為空,表示要獲取該應(yīng)用程序創(chuàng)建的所有窗口的消息;第三、四參數(shù)用于指定消息范圍。GetMessage收到一個WM_QUIT消息,則返回FALSE以退出消息循環(huán),終止程序運行。否則GetMessage()返回TRUE。第1章 Windows編程基礎(chǔ) 1.3 Windows的消息循環(huán)- TranslateMessageGetMessage()讀入消息后,首先要經(jīng)過函數(shù)TranslateMessage()對其進行解釋,但對大多數(shù)消息來說并不起什么作用。TranslateMessage()負責(zé)將消息的虛擬鍵轉(zhuǎn)換為字符消
11、息。第1章 Windows編程基礎(chǔ) 1.3 Windows的消息循環(huán)- DispatchMessageDispatchMessage()函數(shù),把GetMessage獲取的Windows消息傳送給在MSG結(jié)構(gòu)中為窗口所指定的窗口過程。在消息處理函數(shù)處理完消息之后,代碼又循環(huán)到開始去接收另一個消息,這樣就完成了一個完整的消息循環(huán)。第1章 Windows編程基礎(chǔ) 1.4常用消息鼠標(biāo)消息WM_LBUTTONDOWN:單擊鼠標(biāo)左鍵時產(chǎn)生;WM_LBUTTONUP:放開鼠標(biāo)左鍵時產(chǎn)生; WM_RBUTTONDOWN:單擊鼠標(biāo)右鍵時產(chǎn)生;WM_RBUTTONUP:放開鼠標(biāo)右鍵時產(chǎn)生; WM_LBUTTOND
12、BLCLK:雙擊鼠標(biāo)左鍵時產(chǎn)生;WM_RBUTTONDBLCLK:雙擊鼠標(biāo)右鍵時產(chǎn)生。第1章 Windows編程基礎(chǔ) 1.4常用消息鼠標(biāo)消息1Param:低字節(jié)包含當(dāng)前光標(biāo)的X坐標(biāo)值,高字節(jié)包含當(dāng)前光標(biāo)的Y坐標(biāo)值。wParam:包含一整數(shù)值以標(biāo)識鼠標(biāo)鍵的按下狀態(tài)。MK_LBUTTON按下鼠標(biāo)左鍵MK_MBUTTON按下鼠標(biāo)中鍵MK_RBUTTON按下鼠標(biāo)右鍵第1章 Windows編程基礎(chǔ) 1.4常用消息鍵盤消息WM_KEYDOWN:按下一個非系統(tǒng)鍵時產(chǎn)生的消息。系統(tǒng)鍵是指實現(xiàn)系統(tǒng)操作的組合鍵,例如Alt與某個功能鍵組合以實現(xiàn)系統(tǒng)菜單操作等。wParam:按下鍵的虛擬鍵碼,用以標(biāo)識按下或釋放的鍵
13、。1Param:記錄了按鍵的重復(fù)次數(shù)、掃描碼、轉(zhuǎn)移代碼、先前鍵的狀態(tài)等信息。如F1的虛擬鍵碼在Windows.h文件中定義為VK_F1,相似的消息還有WM_KEYUP, 在放開非系統(tǒng)鍵時產(chǎn)生。第1章 Windows編程基礎(chǔ) 1.4常用消息鍵盤消息WM_ CHAR 按下一個非系統(tǒng)鍵時產(chǎn)生的消息。wParam 為按鍵的ASCII碼。1Param 與WM_KEYDOWN的相同。第1章 Windows編程基礎(chǔ) 1.4 常用消息刷新消息WM_PAINT用戶區(qū)移動或顯示、用戶窗口改變大小、程序通過滾動條滾動窗口、下拉式菜單關(guān)閉并需要恢復(fù)被覆蓋的部分、Windows清除對話框等對象并需要恢復(fù)被覆蓋的部分,均
14、產(chǎn)生WM_PAINT消息。第1章 Windows編程基礎(chǔ) 1.4常用消息其他消息WM_CREATE由CreateWindow函數(shù)發(fā)出的消息。wParam:未用。1Param:包含一個指向CREATESTRUCT數(shù)據(jù)結(jié)構(gòu)的指針。WM_CLOSE:關(guān)閉窗口時產(chǎn)生的消息。wParam和1Param均未用。第1章 Windows編程基礎(chǔ) 1.4常用消息其他消息WM_DESTROY 由DestroyWindow函數(shù)發(fā)出的消息。wParam和1Param均未用。WM_QUIT 由PostQuitMessage函數(shù)發(fā)出的消息,退出應(yīng)用程序時發(fā)出的消息。wParam:含退出代碼,標(biāo)識程序退出運行時的有關(guān)信息。
15、 1Param:未用。第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成一個基本的Windows應(yīng)用程序通常由三種類型的文件組成:(1) C/C+語言源程序文件;(2) 頭文件;(3) 資源描述文件。第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成源程序組成結(jié)構(gòu)WinMainWinProcWinMain:入口函數(shù)WndProc:窗口函數(shù)第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)WinMain函數(shù)功能:(1)注冊窗口類;(2)建立窗口及執(zhí)行必要的初始化;(3)進入消息循環(huán),根據(jù)接收的消息調(diào)用相應(yīng)的處理過程,當(dāng)消息循環(huán)檢
16、索到WM_QUIT時終止程序運行。第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)WinMain函數(shù)說明int WINAPI WinMain ( HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow);第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)初始化-窗口類定義定義窗口的形式與功能,通過給窗口類數(shù)據(jù)結(jié)構(gòu)WNDCLASS賦值完成,該數(shù)據(jù)結(jié)構(gòu)中包含窗口類的各種屬性。第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程
17、序組成-WinMain函數(shù)typedef struct tagWNDCLASS UINT style;/ 窗口類的樣式,一般設(shè)置為0 WINPROC lpfnWndProc;/窗口函數(shù)函數(shù)的指針 int cbClsExtra;/分配在窗口類結(jié)構(gòu)體后的字節(jié)數(shù) int cbWndExtra;/ 分配在窗口實例后的字節(jié)數(shù) HINSTANCE hInstance; / 應(yīng)用程序的實例句柄 HICON hIcon; / 窗口類的圖標(biāo)第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù) 。 HCURSOR hCursor ; / 窗口類的光標(biāo) HBRUSH hbrBack
18、ground; / 窗口類的背景刷 LPCTSTR lpszMenuName; / 窗口類菜單資源名 LPCTSTR lpszClassName; / 窗口類名 WNDCLASS;第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)LoadIcon的作用是在應(yīng)用程序中加載一個窗口圖標(biāo)。其原型為:HICON LoadIcon( HINSTANCE hInstance, / 應(yīng)用程序句柄 LPCTSTR lpIconName / 圖標(biāo)資源名);第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù) LPCTSTR lpIconNam
19、e IDI_APPLICATION、IDI_ASTERISK 、IDI_ERROR、IDI_EXCLAMATION、IDI_HAND、IDI_INFORMATION、IDI_QUESTION、IDI_WARNING、IDI_WINLOGO 第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)程序舉例:HICON hIcon;hIcon = LoadIcon(NULL, IDI_QUESTION); 第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)LoadCursor的作用是在應(yīng)用程序中加載一個窗口光標(biāo)。其原型為:HCURS
20、OR LoadCursor( HINSTANCE hInstance, / 應(yīng)用程序?qū)嵗浔?LPCTSTR lpCursorName / 光標(biāo)資源名); 第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)LPCTSTR lpCursorNameIDC_ARROW、IDC_CROSS、IDC_SIZEALL、IDC_SIZENESW、IDC_SIZENS、IDC_SIZENWSE、IDC_SIZEWE、IDC_UPARROW、IDC_WAIT 第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)程序舉例:HCURSOR hC
21、ursor;hCursor = LoadCursor(NULL,IDC_WAIT); 第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)應(yīng)用程序調(diào)用函數(shù)GetStockObject獲取系統(tǒng)提供的背景刷。其原型為:HGDIOBJ GetStockObject( int fnObject / 庫存對象類型); 第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)HGDIOBJ GetStockObject(int fnObject); BLACK_BRUSH、DKGRAY_BRUSH、GRAY_BRUSH、HOLLOW_BRUS
22、H、LTGRAY_BRUSH、NULL_BRUSH、WHITE_BRUSH第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)程序舉例:HBRUSH hBrush;hBrush =(HBRUSH) GetStockObject( DKGRAY_BRUSH); 第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)初始化-注冊窗口類Winows系統(tǒng)本身提供部分預(yù)定義的窗口類,程序員也可以自定義窗口類,窗口類必須先注冊后使用。窗口類的注冊由函數(shù)RegisterClass()實現(xiàn)。 第1章 Windows編程基礎(chǔ) 1.5 Window
23、s應(yīng)用程序組成-WinMain函數(shù)RegisterClass函數(shù)返回布爾值,注冊成功則返回真。ATOM RegisterClass(CONST WNDCLASS *lpWndClass);程序舉例:WNDCLASS ws;/ 初始化代碼RegisterClass(&ws); / ws為窗口類結(jié)構(gòu)第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)初始化-創(chuàng)建窗口實例創(chuàng)建一個窗口類的實例由函數(shù)CreateWindow()實現(xiàn),函數(shù)原型如下:HWND CreateWindow ( LPCTSTR lpszClassName, 窗口類名 LPCTSTR lpszTi
24、tle, 窗口標(biāo)題名 DWORD dwStyle, 創(chuàng)建窗口的樣式 int x, int y, 窗口左上角坐標(biāo) 第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù) 。 int nWidth,int nHeight, 窗口寬度和高度 HWND hwndParent,該窗口的父窗口句柄 HMENU hMenu, 窗口主菜單句柄 HINSTANCE hInstance, 應(yīng)用程序?qū)嵗浔?LPVOID lpParam 指向一個參數(shù)值的指針); 第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)DWORD dwStyle; 創(chuàng)建窗
25、口的樣式WS_BORDER、WS_CAPTION、WS_VSCROLL、WS_MAXIMIZEBOX 、WS_MAXIMIZE、WS_MINIMIZEBOX、WS_MINIMIZE、 WS_OVERLAPPEDWINDOW、WS_POPUP、WS_POPUPWINDOW、WS_SYSMENU、 WS_HSCROLL 第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)顯示窗口窗口類的顯示由ShowWindow()和UpdateWindow()函數(shù)實現(xiàn)。應(yīng)用程序調(diào)用ShowWindow函數(shù)在屏幕上顯示窗口,顯示窗口后,應(yīng)用程序調(diào)用UpdateWindow更新并繪
26、制用戶區(qū),并發(fā)出WM_PAINT消息。 第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)BOOL ShowWindow( HWND hWnd, / 窗口句柄 int nCmdShow / 窗口顯示狀態(tài));BOOL UpdateWindow( HWND hWnd / 窗口句柄);第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-WinMain函數(shù)int nCmdShowSW_HIDE、SW_SHOWNORMAL、SW_SHOWMINIMIZE、SW_SHOWMAXMIZE、SW_SHOWNOACTIVE、SW_RESTORE第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-消息循環(huán)MSG Msg;while (GetMessage (&Msg,NULL,0,0) TranslateMessage(&Msg);/ 處理字符消息 DispatchMessage(&Msg); / 分發(fā)消息第1章 Windows編程基礎(chǔ) 1.5 Windows應(yīng)用程序組成-窗口函數(shù)WndProc定義了應(yīng)用程序?qū)邮盏降牟煌⒌捻憫?yīng),包含了對各種可能接收到的消息的處理過程。WndProc函數(shù)由一個或多個switch語句組成,每一條case語句對應(yīng)一種消息,當(dāng)應(yīng)用程序接收到一個消息時
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 邊境邊防安全培訓(xùn)課件
- 車駕管窗口業(yè)務(wù)課件培訓(xùn)
- 車隊道路交通安全培訓(xùn)
- 安全三級教育試題
- 2026年人防護安全知識試題
- 《電動機》物理授課課件
- 2026年小學(xué)心理健康教育領(lǐng)導(dǎo)小組及分工職責(zé)(3篇)
- 2026年密碼機要崗位考試題庫及答案
- 車間班組長培訓(xùn)內(nèi)容課件
- 車間安全管理教育培訓(xùn)課件
- 智能安全帽解決方案-智能安全帽
- 中醫(yī)臨床路徑18脾胃科
- 2024年版煙霧病和煙霧綜合征診斷與治療專家共識(完整版)
- 零星維修合同模板
- 九三學(xué)社申請入社人員簡歷表
- 聚氨酯門窗研究匯報
- 醫(yī)院電子病歷四級建設(shè)需求
- 上海2023屆高三二模數(shù)學(xué)卷匯總(全)
- 《銳角三角函數(shù)》復(fù)習(xí)(公開課)課件
- 計算機視覺PPT完整全套教學(xué)課件
- YC/T 564-2018基于消費體驗的中式卷煙感官評價方法
評論
0/150
提交評論