




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第1章 Windows編程基礎C+語言基礎知識Windows編程的重要概念Windows編程基本方法Windows編程的主要特點1C+語言基礎數據類型常量、變量與指針控制語句函數類與對象類繼承(派生C+類)函數與操作符重載多態性與虛擬函數I/O流結構2數據類型(1)基本數據類型char、int、float、double、bool復合數據類型數組(一維/二維)結構體(struct)共用體(union)枚舉類型(enum)3數據類型(2)自定義數據類型(Win32數據類型) 數據類型 說明 數據類型 說明 BITMAP 位圖結構 MSG 消息結構 LOGBRUSH 畫刷結構 POINT 點結構 L
2、OGFONT 字體結構 RECT 矩形結構 LOGPEN 畫筆結構 WNDCLASS 窗口類結構4常量整型常量十進制表示(20)八進制表示(024)十六進制表示(0 x24)浮點型常量科學表示法(3e1)字符型常量轉義字符(r、n、t、0)5變量 前綴 數據類型 說明 ch char 字符 b bool 布爾值 n int 整數 w word 16位無符號數 l long 32位有符號數 dw dword 32位無符號數 h handle窗口對象句柄 lpsz LPTSTR指向字符串的32位指針匈牙利表示法(前綴)6指針與引用指針指針變量中存儲的是對象地址初始化時需要分配空間指針可被同類對象的
3、左值初始化引用引用是被引用對象的別名對引用的修改是對被引用對象的修改7控制語句(1)條件語句ifelse語句 if(expression) statement; else statement;switch語句 switch(expression) case constant:statement;break; default:statement;?條件操作符 expression1 ? expression2 : expression38控制語句(2)循環語句for語句 for(expression1;expression2;expression3) statement;while語句 whil
4、e(expression) statement;dowhile語句 do statement;while(expression) 9控制語句(3)轉移語句break - 強制退出循環或switchcontinue - 中止最內層循環goto - 跳轉到指定位置10函數函數定義類型標識符 函數名(形參列表) 函數體 函數調用函數名(實參列表)or 變量名=函數名(實參列表)11面向對象和Windows編程(1)面向過程編程傳統結構化語言采用的方法面向對象編程將數據與處理函數封裝在類中,使用類的變量稱為對象可維護性、易修改性、可重用性好12面向對象和Windows編程(2)封裝(encapsula
5、tion)封裝將邏輯上相關的數據聯系起來,數據訪問只能通過已定義的界面繼承(inheritance)繼承是一種聯系類的層次關系模型,通過類的添加、修改等操作實現類重用多態性(polymorphism)多態性是指允許不同類對象對同一消息作出響應,實現“一種接口、多種方法”13類與對象(1)類(class)將數據和函數封裝起來,像單個元素一樣使用。類可以嵌套定義類中包含2種類成員:數據成員和成員函數,成員函數可以訪問類數據成員 class 類名稱 type variables;/數據成員 public: type functions;/成員函數 14類與對象(2)類成員可定義為3種類型:私有類型(
6、private):只允許類本身聲明的函數對其進行存取公有類型(public):任何外部函數都能訪問公有類型數據保護類型(protected):只有派生類中的函數能訪問保護類型數據15類與對象(3)對象(object)是類的實例,通過對象可以訪問類成員對象的定義方法:類名稱 對象名類名稱 *p=new 類名稱 對象的使用方法:對象名.成員函數名(數據成員名)對象名-成員函數名(數據成員名)16類與對象(4)/聲明類exampleclass example int i;public: int j; void fun();void example:fun() i=10;/聲明類對象example o
7、bj;example *pp=new example;/使用類對象obj.j=12;pp-j=12;obj.fun();pp-fun();obj.i=100; /錯誤類與對象舉例例1-117類與對象(5)構造函數(constructor)特殊的成員函數,初始化對象或分配內存;構造函數名與類名相同,可以有多個構造函數,編譯器通過參數識別;如果類中沒指定構造函數,編譯器產生缺省構造函數析構函數(destructor)特殊的成員函數,用來釋放已分配的內存;析構函數名是類名前加“”;每個類只有一個析構函數,不帶任何參數,不返回任何值18類與對象(6)類中定義的函數是內聯函數,類外定義的函數是非內聯函數
8、編譯器在調用內聯函數的地方裝入函數代碼。內聯函數影響代碼大小和執行速度 Inline可用于強制定義內聯函數通常將較短函數定義在類中,將較長函數定義在類外19類與對象(7)靜態數據成員用static聲明,它的一個拷貝被類中所有對象維護class test public: static int count;靜態數據成員必須像全局變量一樣,在類外定義和初始化int test:count=0;20類與對象(8)靜態成員函數用static聲明,它的一個拷貝被類中所有對象維護 class test public: static int getcount();在類外可用類名和作用域調用靜態成員函數 int
9、count=test:getcount();靜態成員函數只能調用屬于該類的靜態數據成員和靜態成員函數21類與對象(9)友元函數可訪問類的私有和保護型數據 class 類名稱 type variables; /數據成員 public: friend type functions;/友元函數 22C+源文件的組織如果一個程序由多個C+源文件組成,通常將類定義單獨放在頭文件中,其中要包括在類外定義的內聯函數的定義,并將頭文件納入用該類的C+源文件中通常將非內聯函數的定義放在單獨的C+源文件中,稱為類實現文件。最后將編譯過的實現文件版本和主程序相鏈接23類繼承(1)C+提供類繼承的機制,通過增加、修改
10、類中的方法來擴充類被繼承的類稱為基類(base)或父類(parent),繼承的類稱為派生類(derived)或子類(child)派生類的聲明方式:class 派生類名稱:派生方式 基類名稱派生方式有public、protected與private, 默認方式為public24類繼承(2)無論哪種派生方式,基類的私有成員不能被派生類繼承,基類的保護成員和公有成員可繼承為派生類成員派生方式ProtectedPublic私有派生(private)PrivatePrivate保護派生(Protected)ProtectedProtected公有派生(Public)ProtectedPublic25類繼
11、承(3)基類與派生類舉例 class parent /基類 int i; protected:int x; public:void change() i+;x+; ; class son:public parent /派生類 public:void modify() x+; ;26類繼承(4)多重派生Student輸入學生姓名、英語和數學成績,并輸出相應內容Computer輸入并輸出計算機成績Physics輸入并輸出物理成績例1-227類繼承(5)多重繼承Price輸入起點、終點、距離和價格,并輸出相應內容Station輸入并輸出起點和終點Mile輸入并輸出距離例1-328類繼承(6)類的多繼
12、承性、多層性舉例MathAndComputer輸入并輸出數學系、計算機系學生成績Math輸入并輸出數學系學生成績Computer輸入并輸出計算機系學生成績Physics輸入并輸出物理系學生成績ComputerAndPhysics輸入并輸出計算機系、物理系學生成績StudentScore輸入學生姓名、英語成績,并輸出相應的內容例1-429函數重載函數重載允許程序中聲明多個同名函數,這些函數完成不同功能,并帶有不同類型、數量的參數及返回值/函數重載定義int doubleFun(int i) return(2*i);float doubleFun(float f) return(2*f);/函數重
13、載使用int a=1;float b=1.0;isum=doubleFun(a);fsum=doubleFun(b);30操作符重載(1)操作符重載將已有操作符賦予新功能,并與該操作符的本來含義不沖突操作符重載的聲明方式: 函數類型 operator#(形參)重載的操作符在使用時,根據操作符位置來判斷其具體執行的運算例1-531操作符重載(2)前置操作符重載 operator+()后置操作符重載 operator+(int)雙目操作符重載OperClass operator+(OperClass)32多態性與虛擬函數(1)多態性(polymorphism)是面向對象程序設計的重要特性虛擬函數是
14、基類中聲明為virtual,派生類中重新定義的函數。不修改基類的源代碼,可以修改基類的行為等于的零虛函數稱為純虛擬函數。有純虛函數的類稱為抽象類。抽象類不能聲明屬于此類的對象,并要有其它派生類存在例1-633多態性與虛擬函數(2)在函數重載中,函數名稱相同,各函數的返回值類型與傳遞的參數類型不同在虛擬函數中,各函數的類型和傳遞的參數類型相同,否則不能稱為虛擬函數34I/O流結構iostreamistream:輸入流 cin、get、getline、readostream:輸出流 cout、put、write35Windows應用程序、操作系統與計算機硬件的關系36面向對象的程序設計Visual
15、 C+是面向對象(Object-Oriented)的程序設計工具對象是指Windows規范部件,包括各種窗口、菜單、按鈕、對話框等大部分工作是對象創建與對象屬性賦值37窗口的概念(1)窗口(Window)是程序用戶界面,負責應用程序與用戶的交互菜單欄邊框標題欄客戶區38窗口的概念(2)客戶區與非客戶區客戶區非客戶區39事件驅動 (1)Windows程序圍繞事件產生,進而引發相應處理函數運行,稱為事件驅動消息是描述事件發生的信息,例如用戶按下鼠標鍵,Windows系統產生鼠標消息程序執行順序取決于事件發生順序,即是由順序產生的消息驅動40事件驅動 (2)事件1事件2事件341句柄的概念句柄(Ha
16、ndle)是Windows標識不同對象或實例而使用的整數值 句柄類型 說明 句柄類型 說明 HWND 窗口句柄 HDC 環境句柄 HINSTANCE 實例句柄 HBITMAP 位圖句柄 HCURSOR 光標句柄 HICON 圖標句柄 HFONT 字體句柄 HMENU 菜單句柄 HPEN 畫筆句柄 HFILE 文件句柄 HBRUSH 畫刷句柄42消息的概念(1)Windows程序用消息(Message)交換信息,消息結構為MSG typedef struct tagMSG HWND hwnd; /窗口句柄 UINT message; /消息的值 WPARAM wParam; /消息的附加信息 L
17、PARAM lParam; /消息的附加信息 DWORD time; /消息送至隊列的時間 POINT pt; /發送消息時光標位置 MSG;43消息的概念(2)系統定義的消息分類 消息前綴 說明 消息前綴 說明 BM 按鈕控件 LB 列表框控件 CB 組合框控件 SBM 滾動條控件 EM 編輯控件 WM 窗口44消息的概念(3)常用的Window系統消息 消息前綴 說明 消息前綴 說明 WM_LBUTTONDOWN 鼠標左鍵 WM_CLOSE 關閉窗口 WM_KEYDOWN 鍵盤按鍵 WM_DESTROY 銷毀窗口 WM_CHAR 非系統鍵 WM_QUIT 退出程序 WM_CREATE 創建
18、窗口 WM_PAINT 位置移動45Windows程序組成主要文件類型 文件擴展名 文件類型 .c或.cpp C語言源程序文件 .h 頭文件 .def 模塊定義文件 .rc 資源定義文件 .mak 項目文件46Windows程序框架(1)創建一個窗口設計一個窗口類注冊窗口類創建窗口顯示及更新窗口進行消息循環編寫窗口處理函數47Windows程序框架(2)WinMain函數所有Windows程序的入口函數WinMain函數功能注冊窗口類、建立窗口并初始化進入消息循環,根據消息隊列接收的消息,調用相應的處理過程接收WM_QUIT消息時,終止程序運行48Windows程序框架(3)WinMain函數
19、聲明 int WINAPI WinMain ( HINSTANCE hInstance, /當前實例 HINSTANCE hPrevInstance,/前一個實例 LPSTR lpCmdLine, /命令行指針 int nCmdShow /窗口顯示方式 )49Windows程序框架(4)WinMain函數初始化注冊窗口 - RegisterClass()創建窗口 - CreateWindow()顯示窗口 - ShowWindow()更新窗口 - UpdateWindow()加載圖標 - LoadIcon()加載光標 - LoadCursor()50Windows程序框架(5)設計窗口類 typ
20、edef struct _WNDCLASS UINT style; /窗口樣式 WNDPROC lpfnWndProc; /窗口處理函數 int cbClsExtra; /類附加內存 int cbWndExtra; /窗口附加內存 HANDLE hInstance; /程序實例句柄 HICON hIcon; /圖標句柄 HCURSOR hCursor; /光標句柄 HBRUSH hbrBackground; /背景畫刷句柄 LPCTSTR lpszMenuName; /菜單資源名 LPCTSTR lpszClassName; /窗口類名 WNDCLASS;51Windows程序框架(6)在窗口
21、類WNDCLASS中,lpfnWndProc成員指定窗口處理函數,又稱回調函數當程序收到給窗口的消息,它應該調用某個函數處理該消息。調用過程由操作系統完成,但回調函數代碼由應用程序完成操作系統對消息調用的函數,由接收消息的窗口的lpfnWndProc成員指定52Windows程序框架(7)CreateWindow函數 HWND CreateWindow ( LPCTSTR lpszClassName, /窗口類名 LPCTSTR lpszTitle, /窗口標題 DWORD dwStyle, /窗口樣式 int X,int Y, /窗口左上角坐標 int nWidth,int nHeight,
22、/窗口寬度高度 HWND hwndParent, /父窗口句柄 HMENU hMenu, /主菜單句柄 HINSTANCE hInstance, /當前程序實例 LPVOID lpParam ) /傳遞參數指針53Windows程序框架(8)窗口樣式窗口樣式 說明窗口樣式 說明WS_BORDER 帶邊框窗口WS_MINMIZE 最小化窗口WS_CAPTION 帶標題欄窗口WS_OVERLAPPED 帶邊框標題WS_CHILD 子窗口WS_VSCROLL 垂直滾動條WS_HSCROLL 水平滾動條WS_POPUP 彈出式窗口WS_MAXMIZEBOX 帶最大化按鈕WS_POPUPWINDOW 彈
23、出式窗口WS_MAXMIZE 最大化窗口WS_SYSMENU 帶系統菜單WS_MINMIZEBOX 帶最小化按鈕54Windows程序框架(9)消息循環GetMessage()從消息隊列取消息DispatchMessage()向消息隊列存消息 MSG msg; while(GetMessage(&msg,NULL,0,0) TranslateMessage(&msg); DispatchMessage(&msg); 55Windows程序框架(10)窗口處理函數LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wParam,LPAR
24、AM lParam) switch (message) /消息循環 case WM_LBUTTONDOWN: /鼠標左鍵消息 case WM_DESTROY: /退出程序消息 PostQuitMessage(0); default: return DefWindowsProc(hwnd,message,wParam,lParam) 56Windows數據結構POINT:點坐標結構RECT:矩形區域結構 typedef struct tagPOINT LONG x; LONG y; POINT; typedef struct tagRECT POINT x; POINT y; RECT;57編寫
25、Windows應用程序調用Windows提供的Win32 API大量程序代碼由用戶自己編寫使用MFC(微軟基礎類庫)直接編寫提供大量預先編好的類和支持代碼使用MFC和向導(Wizards)編寫生成Windows應用程序的框架結構58Windows API簡介Windows API是應用編程接口(Application Programming Interface)API提供Windows系統的各種處理函數,主要函數在Windows.h中定義Windows提供1000多種API,基本上是按功能來命名,例如CreateWindow、LoadIcon等MSDN是為開發人員提供的,包含大量的開發文檔與示
26、例代碼59調用Win32 API編程(1)#include #include int WINAPI WinMain( HINSTANCE hInstance, /handle to current instance HINSTANCE hPrevInstance, /handle to previous instance LPSTR lpCmdLine, /command line int nCmdShow) /show state WNDCLASS wndcls; wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hbrBackground=(
27、HBRUSH)GetStockObject(BLACK_BRUSH); wndcls.hCursor=LoadCursor(NULL,IDC_CROSS); wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); wndcls.hInstance=hInstance; wndcls.lpfnWndProc=WinSunProc; wndcls.lpszClassName=wuy; wndcls.lpszMenuName=NULL; wndcls.style=CS_HREDRAW|CS_VREDRAW; RegisterClass(&wndcls); HWND hwnd;
28、hwnd=CreateWindow(wuy,南開大學信息學院,WS_OVERLAPPEDWINDOW, 400,300,500,400,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOWNORMAL); UpdateWindow(hwnd); MSG msg; while(GetMessage(&msg,NULL,0,0) TranslateMessage(&msg);DispatchMessage(&msg); return 0;LRESULT CALLBACK WinSunProc( HWND hwnd, /handle to window
29、 UINT uMsg, /message identifier WPARAM wParam, /first message parameter LPARAM lParam) /second message parameter switch(uMsg) case WM_LBUTTONDOWN: MessageBox(hwnd,單擊鼠標左鍵!,窗口事件1,0); HDC hdc; hdc=GetDC(hwnd); TextOut(hdc,0,0,單擊鼠標左鍵!,strlen(單擊鼠標左鍵!); ReleaseDC(hwnd,hdc); break; case WM_CLOSE: if(IDYES=MessageBox(hwnd,是否關閉窗口?,窗口事件2, MB_YESNO) DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); return 0;例1-760調用Win32 API編程(2)程序執行過程第1步:鼠標左鍵事件 第2步:窗口關閉事件61MFC簡介
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 如何制定有效的復習計劃試題及答案
- 軟件設計師考試實踐項目的價值與經驗總結試題及答案
- 軟件設計師考試全方位解析及試題與答案
- 機電工程團隊協作考核試題及答案
- 機電工程教材更新信息試題及答案
- 2024年農產品加工專用設備資金籌措計劃書代可行性研究報告
- 探索西方政治制度與人文關懷的結合試題及答案
- 軟件設計師團隊合作試題及答案
- 機電工程中的自動控制理論試題及答案
- 軟件設計師考試細節把控試題及答案
- 北京小升初試題及答案
- 北京市事業單位退役大學生士兵定向招聘筆試真題2024
- 2025安全生產月主題宣講課件十:主要負責人安全公開課
- 大數據在醫療領域的應用研究與實踐案例分享
- 大學生職業規劃大賽《服裝與服飾設計專業》生涯發展展示
- 2025年高考語文備考之古詩文名句名篇默寫(共80題含答案)
- T-CCMA 0113-2021 高空作業車 檢查與維護規程
- 社會學概論知識點梳理與復習指南
- 校園禁煙宣傳抵制煙草誘惑拒絕第一支煙課件
- 動畫劇本創作考試模擬題與答案
- 醫學資料 頸部脊髓損傷后遺癥護理查房 學習課件
評論
0/150
提交評論