Windows程序設(shè)計(jì)課件_第1頁
Windows程序設(shè)計(jì)課件_第2頁
Windows程序設(shè)計(jì)課件_第3頁
Windows程序設(shè)計(jì)課件_第4頁
Windows程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、WindowsWindows程序設(shè)計(jì)程序設(shè)計(jì)信息工程學(xué)院信息工程學(xué)院圖形用戶界面(GUI)nWindows是一個(gè)具有可視化圖形用戶界面是一個(gè)具有可視化圖形用戶界面的多任務(wù)操作系統(tǒng)。的多任務(wù)操作系統(tǒng)。n它為用戶提供了風(fēng)格統(tǒng)一的由窗口它為用戶提供了風(fēng)格統(tǒng)一的由窗口(window)、菜單、菜單(menu)、工具欄、工具欄(toolbar)、控件控件(control)等界面元素所構(gòu)成的多任務(wù)環(huán)等界面元素所構(gòu)成的多任務(wù)環(huán)境。境。Windows編程模式nWindows 操作系統(tǒng)完全不同于單任務(wù)的操作系統(tǒng)完全不同于單任務(wù)的DOS操作系統(tǒng),具有圖形用戶界面、多任操作系統(tǒng),具有圖形用戶界面、多任務(wù)、多窗口等特點(diǎn)

2、。務(wù)、多窗口等特點(diǎn)。nWindows下的圖形用戶界面程序開發(fā):下的圖形用戶界面程序開發(fā): 直接使用直接使用Windows API函數(shù)函數(shù) 微軟基礎(chǔ)類庫微軟基礎(chǔ)類庫MFC(面向?qū)ο蟪绦蛟O(shè)計(jì))(面向?qū)ο蟪绦蛟O(shè)計(jì)) wxWidget等(面向?qū)ο蟪绦蛟O(shè)計(jì))等(面向?qū)ο蟪绦蛟O(shè)計(jì)) 基于Windows API的程序設(shè)計(jì)nWindows API (Application Programming Interface)是是Windows系統(tǒng)和系統(tǒng)和Windows 應(yīng)用應(yīng)用程序間的標(biāo)準(zhǔn)接口,為應(yīng)用程序提供程序間的標(biāo)準(zhǔn)接口,為應(yīng)用程序提供Windows支持的函數(shù)定義、參數(shù)定義和消支持的函數(shù)定義、參數(shù)定義和消息格式等

3、。息格式等。nWindows API:包含:包含Windows應(yīng)用程序的函應(yīng)用程序的函數(shù)調(diào)用、數(shù)據(jù)類型和結(jié)構(gòu)。數(shù)調(diào)用、數(shù)據(jù)類型和結(jié)構(gòu)?;赪indows API的程序設(shè)計(jì)n第一個(gè)第一個(gè)Windows程序:程序:“Hello world!”n窗口和消息窗口和消息n圖形基礎(chǔ)圖形基礎(chǔ)n控件類(子窗口類)控件類(子窗口類)n應(yīng)用實(shí)例:簡易計(jì)算器的實(shí)現(xiàn)應(yīng)用實(shí)例:簡易計(jì)算器的實(shí)現(xiàn)1. Hello world!nCode:Blocks下新建一個(gè)空的下新建一個(gè)空的.cpp(或(或.c)文件,文件中錄入下列代碼:文件,文件中錄入下列代碼:1. Hello world!n程序編譯運(yùn)行結(jié)果程序編譯運(yùn)行結(jié)果1. He

4、llo world!n解釋解釋1:頭文件:頭文件類型定義類型定義內(nèi)核函數(shù)、用戶接口函數(shù)和圖形設(shè)備接口函數(shù)內(nèi)核函數(shù)、用戶接口函數(shù)和圖形設(shè)備接口函數(shù)1. Hello world!n解釋解釋2:程序入口點(diǎn):程序入口點(diǎn)WinMain(4個(gè)參數(shù))個(gè)參數(shù))1. Hello world!n解釋解釋2:程序入口點(diǎn):程序入口點(diǎn)WinMain(4個(gè)參數(shù))個(gè)參數(shù)) hInst是唯一標(biāo)識本程序的實(shí)例句柄,系統(tǒng)和其是唯一標(biāo)識本程序的實(shí)例句柄,系統(tǒng)和其它應(yīng)用程序通過該句柄與本程序通訊。它應(yīng)用程序通過該句柄與本程序通訊。 hPrevInst是本程序的前一個(gè)實(shí)例句柄,是本程序的前一個(gè)實(shí)例句柄,32位位Windows版本中該參

5、數(shù)始終為版本中該參數(shù)始終為NULL。 lpCmdLine是一個(gè)字符串指針,用于運(yùn)行程序是一個(gè)字符串指針,用于運(yùn)行程序的命令行。的命令行。nShowCmd指出程序最初顯示的方式。指出程序最初顯示的方式。1. Hello world!n解釋解釋2:程序入口點(diǎn):程序入口點(diǎn)WinMain返回值返回值#define WINAPI _stdcall指定了一種調(diào)用方式:如何生成機(jī)器代碼以在指定了一種調(diào)用方式:如何生成機(jī)器代碼以在堆棧中放置函數(shù)調(diào)用的參數(shù)堆棧中放置函數(shù)調(diào)用的參數(shù)1. Hello world!n解釋解釋3:MessageBox函數(shù)函數(shù)1. Hello world!n解釋解釋3:MessageBo

6、x函數(shù)(函數(shù)(4個(gè)參數(shù))個(gè)參數(shù))第一個(gè)參數(shù):窗口句柄第一個(gè)參數(shù):窗口句柄第二個(gè)參數(shù):消息框中顯示的字符串第二個(gè)參數(shù):消息框中顯示的字符串第三個(gè)參數(shù):標(biāo)題欄字符串第三個(gè)參數(shù):標(biāo)題欄字符串最后一個(gè)參數(shù):消息框按鈕類型最后一個(gè)參數(shù):消息框按鈕類型n#define MB_OK0 x0000n#define MB_OKCANCEL0 x0001n#define MB_ABORTRETRYIGNORE 0 x0002n#define MB_YESNOCANCEL0 x00032. 窗口和消息窗口和消息n什么是窗口什么是窗口?屏幕上的一個(gè)可以接收用戶輸入,并以文本或圖屏幕上的一個(gè)可以接收用戶輸入,并以文本或

7、圖形的格式顯示輸出內(nèi)容的區(qū)域。形的格式顯示輸出內(nèi)容的區(qū)域。n什么是消息?什么是消息?消息描述了事件的類別,包括在圖形用戶消息描述了事件的類別,包括在圖形用戶界面內(nèi)下的輸入選擇、鼠標(biāo)按鍵、鍵盤按界面內(nèi)下的輸入選擇、鼠標(biāo)按鍵、鍵盤按鍵、窗口被創(chuàng)建、關(guān)閉和改變等。鍵、窗口被創(chuàng)建、關(guān)閉和改變等。2.1 一個(gè)典型的窗口程序一個(gè)典型的窗口程序nCode:Blocks下下Windows程序的創(chuàng)建程序的創(chuàng)建2.1 一個(gè)典型的窗口程序一個(gè)典型的窗口程序nCode:Blocks下下Windows程序的創(chuàng)建程序的創(chuàng)建2.1 一個(gè)典型的窗口程序一個(gè)典型的窗口程序nCode:Blocks下下Windows程序的創(chuàng)建程序

8、的創(chuàng)建2.1 一個(gè)典型的窗口程序一個(gè)典型的窗口程序n代碼生成及運(yùn)行結(jié)果代碼生成及運(yùn)行結(jié)果2.1 總體考慮總體考慮n很難記住很難記住Windows程序的所有語法,故向?qū)С绦虻乃姓Z法,故向?qū)ё詣?dòng)生成一個(gè)框架。自動(dòng)生成一個(gè)框架。n兩個(gè)主要函數(shù)兩個(gè)主要函數(shù)WinMain和和WndProc。nWindows函數(shù):如函數(shù):如LoadIcon、ShowWindow等。等。n新的數(shù)據(jù)類型和宏定義:如新的數(shù)據(jù)類型和宏定義:如HWND、MSG、WNDCLASSEX等。等。2.1 總體考慮總體考慮LRESULT CALLBACK WindowProcedure ();int WINAPI WinMain (HIN

9、STANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) HWND hwnd; MSG messages; WNDCLASSEX wincl; wincl.hInstance = hThisInstance; . if (!RegisterClassEx (&wincl) return 0; hwnd = CreateWindowEx(.); ShowWindow (hwnd, nCmdShow); while (GetMessage (&messages, NULL, 0, 0) Tran

10、slateMessage(&messages); DispatchMessage(&messages); return messages.wParam;2.1 總體考慮總體考慮LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch (message) /* handle the messages */ case WM_DESTROY: PostQuitMessage (0); break; default: /* for messages that we do

11、nt deal with */ return DefWindowProc (hwnd, message, wParam, lParam); return 0;2.2 事件驅(qū)動(dòng)與消息循環(huán)事件驅(qū)動(dòng)與消息循環(huán)啟動(dòng)啟動(dòng)輸入姓名輸入姓名輸入第一次測試成績輸入第一次測試成績輸入第二次測試成績輸入第二次測試成績輸入第三次測試成績輸入第三次測試成績計(jì)算平均成績計(jì)算平均成績結(jié)束結(jié)束啟動(dòng)啟動(dòng)消息處理消息處理結(jié)束結(jié)束輸入姓名輸入姓名輸入第一次成績輸入第一次成績輸入第二次成績輸入第二次成績輸入第三次成績輸入第三次成績計(jì)算平均成績計(jì)算平均成績過程驅(qū)動(dòng)過程驅(qū)動(dòng)事件驅(qū)動(dòng)事件驅(qū)動(dòng)2.2 事件驅(qū)動(dòng)與消息循環(huán)事件驅(qū)動(dòng)與消息循環(huán)啟

12、動(dòng)啟動(dòng)消息處理消息處理結(jié)束結(jié)束輸入姓名輸入姓名輸入第一次成績輸入第一次成績輸入第二次成績輸入第二次成績輸入第三次成績輸入第三次成績計(jì)算平均成績計(jì)算平均成績2.2 事件驅(qū)動(dòng)與消息循環(huán)事件驅(qū)動(dòng)與消息循環(huán)2.2 事件驅(qū)動(dòng)與消息循環(huán)事件驅(qū)動(dòng)與消息循環(huán)2.2 事件驅(qū)動(dòng)與消息循環(huán)事件驅(qū)動(dòng)與消息循環(huán) while (GetMessage (&messages, NULL, 0, 0) TranslateMessage(&messages); DispatchMessage(&messages); 2.2 事件驅(qū)動(dòng)與消息循環(huán)事件驅(qū)動(dòng)與消息循環(huán)LRESULT CALLBACK WindowProcedure (H

13、WND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch (message) case WM_DESTROY: PostQuitMessage (0); break; case WM_PAINT: break;2.2 事件驅(qū)動(dòng)與消息循環(huán)事件驅(qū)動(dòng)與消息循環(huán)LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch (message) default: return DefWindowProc (hwnd

14、, message,wParam, lParam); return 0;2.3 Windows函數(shù)函數(shù)和新數(shù)據(jù)類型和新數(shù)據(jù)類型n函數(shù)函數(shù)LoadIcon、LoadCursorRegisterClassEx:注冊窗口:注冊窗口CreateWindowEx:創(chuàng)建窗口:創(chuàng)建窗口ShowWindow:顯示窗口:顯示窗口GetMessage、TranslateMessage等等2.3 Windows函數(shù)函數(shù)和新數(shù)據(jù)類型和新數(shù)據(jù)類型n新數(shù)據(jù)類型新數(shù)據(jù)類型typedef void* PVOID;typedef PVOID HANDLE;typedef HANDLE HDC;typedef HANDLE HI

15、NSTANCE;typedef HANDLE HWND;typedef long LONG_PTR;typedef unsigned int UINT_PTR;typedef UINT_PTR WPARAM;typedef LONG_PTR LPARAM;typedef CHAR *PSTR;2.3 Windows函數(shù)函數(shù)和新數(shù)據(jù)類型和新數(shù)據(jù)類型n新數(shù)據(jù)類型新數(shù)據(jù)類型typedef struct tagWNDCLASSEX UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANC

16、E hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm; WNDCLASSEX, *PWNDCLASSEX;2.3 Windows函數(shù)函數(shù)和新數(shù)據(jù)類型和新數(shù)據(jù)類型n新數(shù)據(jù)類型新數(shù)據(jù)類型typedef struct tagMSG HWND hWnd;/指定消息發(fā)向的窗口句柄指定消息發(fā)向的窗口句柄UINTmessage;/標(biāo)識消息的消息值標(biāo)識消息的消息值WPARAMwParam;/消息參數(shù)消息參數(shù)LPARAM

17、lParam;/消息參數(shù)消息參數(shù)DWORDtime;/消息進(jìn)入隊(duì)列的時(shí)間消息進(jìn)入隊(duì)列的時(shí)間POINT pt; /消息進(jìn)入隊(duì)列時(shí)鼠標(biāo)指針的屏幕坐標(biāo)消息進(jìn)入隊(duì)列時(shí)鼠標(biāo)指針的屏幕坐標(biāo) MSG,*PMSG,NEAR *NPMSG, FAR * LPMSG;2.3 Windows函數(shù)函數(shù)和新數(shù)據(jù)類型和新數(shù)據(jù)類型n新數(shù)據(jù)類型新數(shù)據(jù)類型message是標(biāo)識消息的消息值或消息名是標(biāo)識消息的消息值或消息名#define WM_CREATE 0X0001 /創(chuàng)建窗口產(chǎn)生的消息創(chuàng)建窗口產(chǎn)生的消息#define WM_DESTROY 0X0002 /撤銷窗口產(chǎn)生的消息撤銷窗口產(chǎn)生的消息#define WM_PAINT

18、 0X000F /重畫窗口產(chǎn)生的消息重畫窗口產(chǎn)生的消息#define WM_CLOSE 0X0010 /關(guān)閉窗口產(chǎn)生的消息關(guān)閉窗口產(chǎn)生的消息#define WM_CHAR 0X0102 /按下非系統(tǒng)鍵產(chǎn)生的字符消息按下非系統(tǒng)鍵產(chǎn)生的字符消息#define WM_USER 0X0400 /用戶自定義消息用戶自定義消息#define WM_LBUTTONDOWN 2.3 Windows函數(shù)函數(shù)和新數(shù)據(jù)類型和新數(shù)據(jù)類型n新數(shù)據(jù)類型新數(shù)據(jù)類型wParam和和lParam都是都是32位消息參數(shù),對位消息參數(shù),對message進(jìn)行補(bǔ)充。進(jìn)行補(bǔ)充。例如:例如:WM_LBUTTONDOWN:產(chǎn)生單擊鼠標(biāo)左鍵的

19、消息產(chǎn)生單擊鼠標(biāo)左鍵的消息lParam高字節(jié)包含當(dāng)前光標(biāo)的高字節(jié)包含當(dāng)前光標(biāo)的Y坐標(biāo)值坐標(biāo)值低字節(jié)包含當(dāng)前光標(biāo)的低字節(jié)包含當(dāng)前光標(biāo)的X坐標(biāo)值坐標(biāo)值wParam包含一整數(shù)值以標(biāo)識鼠標(biāo)鍵的包含一整數(shù)值以標(biāo)識鼠標(biāo)鍵的按下狀態(tài)按下狀態(tài)MK_LBUTTON按下鼠標(biāo)按下鼠標(biāo)MK_MBUTTON 按下鼠標(biāo)按下鼠標(biāo)MK_RBUTTON按下鼠標(biāo)按下鼠標(biāo)3. 圖形基礎(chǔ)圖形基礎(chǔ)(GDI)n圖形設(shè)備接口圖形設(shè)備接口(GDI)是是Windows的子系統(tǒng),的子系統(tǒng),負(fù)責(zé)在屏幕或打印機(jī)上輸出圖形。負(fù)責(zé)在屏幕或打印機(jī)上輸出圖形。nGDI函數(shù)調(diào)用函數(shù)調(diào)用獲取和釋放設(shè)備描述表函數(shù),如獲取和釋放設(shè)備描述表函數(shù),如GetDC等。等。

20、繪圖函數(shù),如繪圖函數(shù),如TextOut等。等。設(shè)置和獲取設(shè)備描述表參數(shù)的函數(shù),如設(shè)置和獲取設(shè)備描述表參數(shù)的函數(shù),如SetTextColor等。等。其它其它3. 圖形基礎(chǔ)圖形基礎(chǔ)(GDI)n設(shè)備描述表函數(shù)設(shè)備描述表函數(shù)(DC)包含包含GDI函數(shù)如何在設(shè)備上工作的屬性信息。函數(shù)如何在設(shè)備上工作的屬性信息。如:顯示文本信息時(shí),字體、文本顏色以及字如:顯示文本信息時(shí),字體、文本顏色以及字符間距等屬于設(shè)備描述表中的信息。符間距等屬于設(shè)備描述表中的信息。3.1 字體顯示字體顯示n字體顯示:在窗口過程中添加代碼字體顯示:在窗口過程中添加代碼case WM_PAINT: HDC hdc; PAINTSTRUC

21、T ps; hdc = BeginPaint(hwnd, &ps); SetTextColor(hdc, RGB(255,0,0); TextOut(hdc, 100, 100, Hello world!, 12); EndPaint(hwnd, &ps);break;3.2 圖形繪制圖形繪制n圖形繪制:橢圓圖形繪制:橢圓 case WM_PAINT: HDC hdc; PAINTSTRUCT ps; HBRUSH hBrush; hdc = BeginPaint(hwnd, &ps); hBrush = CreateSolidBrush(RGB(0,128,255); SelectObjec

22、t(hdc, hBrush); Ellipse (hdc, 250, 100, 450,250); EndPaint(hwnd, &ps); break;4. 控件類控件類n控件:一種特殊的窗口(子窗口)控件:一種特殊的窗口(子窗口)按鈕按鈕靜態(tài)靜態(tài)滾動(dòng)條滾動(dòng)條編輯編輯列表框等列表框等4.1 按鈕類按鈕類n子窗口的創(chuàng)建子窗口的創(chuàng)建HWND CreateWindow(類名,類名,/ “button”窗口文本,窗口文本,窗口風(fēng)格,窗口風(fēng)格,/BS_PUSHBUTTON | WS_CHILD | WS_VISIBLEx位置,位置,y位置,位置,寬度,高度,寬度,高度,父窗口,父窗口,子窗口子窗口ID

23、,程序?qū)嵗浔?,程序?qū)嵗浔?,額外參數(shù)額外參數(shù))4.1 按鈕類按鈕類n消息處理消息處理WM_COMMANDwParam(子窗口子窗口ID)4.2 編輯類編輯類n子窗口的創(chuàng)建子窗口的創(chuàng)建CreateWindow(類名,類名,/“edit”窗口文本,窗口文本,窗口風(fēng)格,窗口風(fēng)格,/ES_RIGHT|WS_BORDER| WS_CHILD | WS_VISIBLEx位置,位置,y位置,位置,寬度,高度,寬度,高度,父窗口,父窗口,子窗口子窗口ID,程序?qū)嵗浔?,程序?qū)嵗浔~外參數(shù)額外參數(shù))4.2 編輯類編輯類n消息處理消息處理WM_COMMANDwParam(子窗口子窗口ID)給編輯類發(fā)送消息給

24、編輯類發(fā)送消息nSendMessage(hwnd, WM_SETTEXT, 0,string);獲取編輯類文本信息獲取編輯類文本信息nGetWindowText(hwnd,buff,len);5. 應(yīng)用實(shí)例:簡易計(jì)算器的實(shí)現(xiàn)表達(dá)式求值類#include #include ExpCalc.hstring strExpression;CExpCalc expCalc;expCalc.Compute(strExpression);12.1808123+456-789*0.C/=xy命名12.1808123+456-789*0.C/=xyconst int ID_BTN_NUM0 = 10000;co

25、nst int ID_BTN_NUM1 = 10001;const int ID_BTN_NUM2 = 10002;const int ID_BTN_NUM3 = 10003;const int ID_BTN_NUM4 = 10004;const int ID_BTN_NUM5 = 10005;const int ID_BTN_NUM6 = 10006;const int ID_BTN_NUM7 = 10007;const int ID_BTN_NUM8 = 10008;const int ID_BTN_NUM9 = 10009;const int ID_BTN_OPTR_ADD = 1001

26、0;const int ID_BTN_OPTR_SUB = 10011;const int ID_BTN_OPTR_MUL = 10012;const int ID_BTN_OPTR_DIV = 10013;const int ID_BTN_OPTR_DOT = 10014;const int ID_BTN_OPTR_CLR = 10015;const int ID_BTN_OPTR_EQ = 10016;const int ID_EDIT_RESULT = 10017;布局12.1808123+456-789*0.C/=窗口大小:窗口大小:210*280結(jié)果顯示(編輯框):結(jié)果顯示(編輯框)

27、:190*48按鈕(按鈕(=除外):除外):40*28按鈕按鈕=尺寸:尺寸:190*28橫向間隔:橫向間隔:15縱向間隔:縱向間隔:10起始位置:起始位置:(10,10)xy布局12.1808123+456-789*0.C/=WinW=210; WinH=280;EdtW=190; EdtH=48;BtnW=40; BtnH=28;SBtnW=EdtW=190;SpaH=15;SpaW=10;SX=10; SY=10;xy布局12.1808123+456-789*0.C/=POINT EditPos= SX, SY;POINT BtnPos17;BtnPosID_BTN_NUM1-10000.x = SX;BtnPosID_BTN_NUM1-10000.y = SY+EdtH+SpaH;char *BtnCaption=0, 1, 2, 3, 4, 5, 6, 7, 8, 9,+, -, *, /, ., c, =;xy窗口句柄12.1808123+456-789*0.C/=static HWND hwndEdit;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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

提交評論