Visual C++ 編程基礎(chǔ)課件_第1頁
Visual C++ 編程基礎(chǔ)課件_第2頁
Visual C++ 編程基礎(chǔ)課件_第3頁
Visual C++ 編程基礎(chǔ)課件_第4頁
Visual C++ 編程基礎(chǔ)課件_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2024/8/151MFC編程

VisualC++編程基礎(chǔ)132WindowsAPI編程Windows程序運(yùn)行機(jī)制

內(nèi)容提要2024/8/1527.1Windows程序運(yùn)行機(jī)制7.1.1Windows中的事件驅(qū)動(dòng)與消息循環(huán)

Windows是一種典型的事件驅(qū)動(dòng)運(yùn)行機(jī)制;

DOS應(yīng)用程序顯式地運(yùn)用一個(gè)函數(shù)(比如gets)來取得輸入;Windows應(yīng)用程序是等待Windows系統(tǒng)將輸入傳遞給Windows應(yīng)用程序的窗口,當(dāng)窗口有輸入時(shí),窗口過程函數(shù)處理輸入后將控制返回給Windows系統(tǒng);

Windows系統(tǒng)以消息的形式將輸入傳給窗口過程;2024/8/153

例7.1分析通過鼠標(biāo)在Windows的畫圖程序窗口中畫一個(gè)矩形的消息傳遞和消息處理過程;

Windows應(yīng)用程序在運(yùn)行時(shí)就是不斷地等待消息,處理消息,又等待消息這個(gè)過程循環(huán)往復(fù)直到程序運(yùn)行結(jié)束時(shí)為止,一般稱這個(gè)過程為消息循環(huán)。7.1Windows程序運(yùn)行機(jī)制2024/8/1547.1.2消息和消息處理:消息的結(jié)構(gòu)MSG:

typedef

struct

tagMSG

{ HWNDhwnd; UINTmessage; WPARAMwParam; LPARAMlParam; DWORDtime; POINTpt; }MSG,*PMSG;7.1Windows程序運(yùn)行機(jī)制2024/8/155

MSG數(shù)據(jù)成員含義: 1、hwnd:消息要發(fā)送到的應(yīng)用程序窗口的句柄,如果是在一個(gè)有多個(gè)窗口的應(yīng)用程序中用此數(shù)據(jù)成員可決定讓哪個(gè)窗口接收消息;

2、message:是一個(gè)數(shù)值用于惟一標(biāo)識(shí)一種消息類型;

3、wParam:是一個(gè)32位的消息數(shù)據(jù)成員它的確切意義取決于消息本身; 4、lParam:也是一個(gè)32位的消息數(shù)據(jù)成員它的確切意義也取決于消息本身;

5、time:消息放入消息隊(duì)列中的時(shí)間,在這個(gè)數(shù)據(jù)成員中寫入的并不是日期而是從Windows啟動(dòng)后所測(cè)量的時(shí)間值用于保持消息正確的順序; 6、pt:消息被放入消息隊(duì)列時(shí)的鼠標(biāo)坐標(biāo);7.1Windows程序運(yùn)行機(jī)制2024/8/156

被送往應(yīng)用程序的消息將被應(yīng)用程序窗口的窗口過程函數(shù)所接收,如程序員編寫有相應(yīng)的函數(shù)窗口過程函數(shù)將執(zhí)行對(duì)應(yīng)的函數(shù);

一個(gè)消息函數(shù)只對(duì)應(yīng)一個(gè)消息,每個(gè)消息都有一個(gè)專門的函數(shù)來處理;回顧例7.1;7.1Windows程序運(yùn)行機(jī)制2024/8/1577.1.3消息映象機(jī)制:消息映像指MFC類中將消息與消息處理函數(shù)聯(lián)系起來形成一一對(duì)應(yīng)的機(jī)制;任何一個(gè)從類CCmdTarget派生的類都能處理消息都有相應(yīng)的消息映像;7.1Windows程序運(yùn)行機(jī)制VC中源文件宏BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之間的代碼為消息映像代碼如象下面程序片段:BEGIN_MESSAGE_MAP(Cstep,CView)//{{AFX_MSG_MAP(CCircleView)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONLOCK()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()//}}AFX_MSG_MAPEND_MESSAGE_MAP()利用ClassWizard2024/8/1587.2WindowsAPI編程7.2.1API和SDK

WindowsAPI(WindowsApplicationProgrammingInterface)是所有Windows應(yīng)用程序的基礎(chǔ);

Windows應(yīng)用程序通過調(diào)用API來請(qǐng)求操作系統(tǒng)完成一些低級(jí)服務(wù);應(yīng)用程序的窗口圖標(biāo)菜單和對(duì)話框等都是由API來進(jìn)行管理和維護(hù)的;

WindowsAPI具有兩種基本類型:Win16API和Win32API;2024/8/1597.2WindowsAPI編程

WindowsSDK(WindowsSoftwareDevelopmentKit)是一套幫助C++語言程序員創(chuàng)建Windows應(yīng)用程序的工具,它包含: 1)大量的在線幫助幫助描述了Windows編程用到的函數(shù)消息結(jié)構(gòu)宏及其他資源; 2)各種編程工具比如對(duì)話框編輯器及圖標(biāo)編輯器等;3)Windows庫及頭文件; 4)使用C++語言編寫的示例程序。

Win32API可以獲得更高的效率,使用MFC更方便。2024/8/15107.2.2WindowsAPI應(yīng)用程序的組成

WindowsAPI應(yīng)用程序主要由入口函數(shù)WinMain和窗口函數(shù)構(gòu)成,其中還包括各種數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)與函數(shù);入口函數(shù)WinMain():

WinMain函數(shù)是所有Windows應(yīng)用程序的入口,與一般C語言方式運(yùn)行程序的main()函數(shù)類似,功能為完成初始化操作,并產(chǎn)生消息循環(huán);

WinMain()函數(shù)有3個(gè)基本組成部分:函數(shù)說明,初始化及消息循環(huán);

7.2WindowsAPI編程2024/8/15111、函數(shù)說明:

intWINAPIWinMain( HINSTANCEhInstance,//程序?qū)嵗浔?HINSTANCEhPrevInstance,//為保持與 Win16兼容的句柄 LPSTRlpCmdLIne,//命令行參數(shù)

int

nCmdShow//初始化窗口顯示方式 )2、初始化: 通常是為窗口類的成員變量賦初值,以便創(chuàng)建窗口。7.2WindowsAPI編程2024/8/15127.2WindowsAPI編程3、消息循環(huán):

采用消息循環(huán)接收消息在API編程中消息循環(huán)一般采用while循環(huán)語句來實(shí)現(xiàn)的:while(GetMessage(&msgTmp,NULL,0,0)) //消息循環(huán){

TranslateMessage(&msgTmp); //翻譯消息

DispatchMessage(&msgTmp); //將消息傳遞給處理函數(shù)}

2024/8/15137.2WindowsAPI編程GetMessage(&msgTmp,NULL,0,0)第一個(gè)參數(shù)是要接收消息的MSG結(jié)構(gòu)的地址第二個(gè)參數(shù)表示窗口句柄NULL則表示要獲取該應(yīng)用程序創(chuàng)建的所有窗口的消息后三個(gè)參數(shù)被設(shè)置為默認(rèn)值表示接收發(fā)送到屬于這個(gè)應(yīng)用程序的任何一個(gè)窗口的所有消息;在接收到除WM_QUIT之外的任何一個(gè)消息后GetMessage()都返回TRUE,如果CetMessage收到一個(gè)WM_QUIT消息則返回FALSE結(jié)束消息循環(huán)TranslateMessage()函數(shù)進(jìn)行翻譯它主要是轉(zhuǎn)換成一些鍵盤消息并為窗口產(chǎn)生相應(yīng)的ASCII字符消息;2024/8/15147.2WindowsAPI編程DispatchMessage()函數(shù)要求Windows將消息傳送給在MSG結(jié)構(gòu)中為窗口所指定的窗口過程函數(shù);窗口過程函數(shù)WndProc():

窗口過程函數(shù)用來處理消息,此函數(shù)的聲明如下: LRESULTCALLBACKWndProc( HWNDhWnd,//窗口句柄 UINTnMessage,//所發(fā)出的消息 WPARAMwParam,//參數(shù)1 LPARAMlParam//參數(shù)2 )如果消息處理成功,WndProc返回值為0;2024/8/1515WndProc()函數(shù)中采用switch實(shí)現(xiàn)消息的處理7.2WindowsAPI編程2024/8/15167.2WindowsAPI編程7.2.3API的程序?qū)嵗豪?.2用API編程實(shí)現(xiàn)應(yīng)用程序窗口要求在窗口中響應(yīng)鼠標(biāo)左鍵,鼠標(biāo)右鍵,窗口生成和窗口關(guān)閉的四個(gè)消息;2024/8/1517用VC++6.0開發(fā)API應(yīng)用程序有兩種方法:在任何文本編輯器中編輯源程序文件和頭文件然后再加入VisualC++6.0的工程中;VC++6.0的工程中添加源程序文件和頭文件,然后再利用VC++6.0的編輯器進(jìn)行編輯,最后再進(jìn)行編譯和運(yùn)行;7.2WindowsAPI編程2024/8/15187.2WindowsAPI編程第二種方法的具體操作步驟:1、創(chuàng)建Win32Application:2024/8/15192、選擇“Anemptyproject”;3、加入源文件smain7_2.cpp,smain7_2.h,sstdafx7_2.cpp、stdafx7_2.h;

結(jié)果:7.2WindowsAPI編程2024/8/15207.3MFC編程

7.3.1MFC(MicrosoftFoundationClassLibrary)簡(jiǎn)介:

MFC是C++的類集,MFC提供面向?qū)ο罂蚣?,程序員可使用這一框架容易地創(chuàng)建Windows應(yīng)用程序;MFC按照面向?qū)ο蟮挠^點(diǎn)以類的層次形式進(jìn)行組織。高層類提供一般功能而低層類實(shí)現(xiàn)更具體的行為;每一個(gè)低層類都是從高層類中派生而來并且繼承了高層類的行為;

2024/8/15217.3MFC編程

CWnd類是實(shí)現(xiàn)了Windows窗口中的大多數(shù)常用功能的高層類具備的功能包括打印文本繪制圖形以及跟蹤鼠標(biāo)指針的移動(dòng);2024/8/1522MFC可以實(shí)現(xiàn)消息循環(huán)并提供易學(xué)易用的成員函數(shù)。如OnLButtonDown()能插入代碼,處理窗口消息;MFC還提供應(yīng)用程序開發(fā)模型之一的文檔/視圖模型。將應(yīng)用程序數(shù)據(jù)與用戶界面元素分離MFC采用了WindowsAPI中的一些功能并有對(duì)程序員更友好的C++類使之更易于使用;

MFC由很多C++類組成,其中有些類例如CWnd或CWinThread是整個(gè)框架中大部分內(nèi)容的基礎(chǔ),這些基類封裝了基本功能,如大多數(shù)Windows應(yīng)用程序都需要的打開窗口功能,還有其他更專門化的類例如CSplitterWnd是從這些基類中派生而來的;7.3MFC編程

2024/8/15237.3MFC編程7.3.2MFC的主要類

MFC類庫主要類1)根類CObject類:

CObject類是MFC的抽象基類,是MFC中大多數(shù)類及用戶自定子類的根類,為程序員提供了許多公共操作,這些操作包括對(duì)象的建立和刪除,對(duì)象診斷,輸出運(yùn)行時(shí)信息等;2024/8/15242)應(yīng)用程序體系結(jié)構(gòu)類:這些類用于構(gòu)造出應(yīng)用程序的結(jié)構(gòu),提供多數(shù)應(yīng)用程序共用的功能,這樣便實(shí)現(xiàn)了編寫程序的任務(wù),就是填充框架,添加應(yīng)用程序?qū)S玫墓δ?,?jiǎn)化了應(yīng)用程序的開發(fā);命令相關(guān)類CCmdTarget類:

CCmdTarget是CObject的子類是MFC庫中所有具有消息映像屬性的類的基類; 一般都是從CCmdTarget的子類中派生出新類,如窗口類(CWnd)應(yīng)用程序類(CWinApp)文檔模板類(CDocTemplate)文檔類(Cdocument)及視圖類(Cview)等;7.3MFC編程2024/8/1525窗口應(yīng)用程序類CWinApp類: 每個(gè)應(yīng)用程序有且只有一個(gè)應(yīng)用程序?qū)ο?用于運(yùn)行程序時(shí)此對(duì)象與其他對(duì)象相互協(xié)調(diào),應(yīng)用程序?qū)ο髲腃WinApp類中派生出來; 窗口應(yīng)用程序類封裝了初始化運(yùn)行終止應(yīng)用程序的代碼;文檔/視圖類: 文檔對(duì)象是由文檔模板對(duì)象所創(chuàng)建的用于管理應(yīng)用程序的數(shù)據(jù); 視圖對(duì)象表示一個(gè)窗口的用戶區(qū)顯示文檔數(shù)據(jù)并允許用戶與其交互;

7.3MFC編程2024/8/1526文檔/視圖類包括以下子類或模板: 1)CDocTemplate文檔模板的基類文檔模板,用于協(xié)調(diào)文檔視圖和框架窗口的創(chuàng)建;2)CSingleDocTemplate單文檔界面SDI的文檔模板;

3)CMultiDocTemplate多文檔界面MDI的文檔模板; 4)CDocument應(yīng)用程序?qū)S梦臋n的基類;

5)CView用于顯示文檔數(shù)據(jù)的應(yīng)用程序?qū)S幸晥D的基類;7.3MFC編程2024/8/1527可視對(duì)象類:窗口類CWnd:

CWnd類提供了MFC中所有窗口類的基本功能,是CCmdTarget類的子類; 創(chuàng)建一個(gè)Windows窗口要分兩步進(jìn)行: 1)構(gòu)造一個(gè)CWnd對(duì)象; 2)調(diào)用Create建立Windows窗口并將它連到CWnd對(duì)象上;7.3MFC編程2024/8/15287.3MFC編程

MFC中還包括從CWnd類派生出來的進(jìn)一步的窗口類型以完成更具體的窗口創(chuàng)建工作,這些派生類有: 1)CFrameWnd框架窗口類是SDI應(yīng)用程序主框架窗口的基類;2)CMDIFrameWnd多文檔框架窗口類是MDI應(yīng)用程序主框架窗口的基類; 3)CMDIChildWnd多文檔子窗口類是MDI應(yīng)用程序文檔框架窗口的基類;2024/8/15297.3MFC編程視圖類CView:

CView類用于表示框架窗口的客戶區(qū)以及顯示文檔數(shù)據(jù);

CView類包括以下子類: 1)CScrollView具有滾動(dòng)功能的視圖的基類; 2)CEditView具有文本編輯查找替換和滾動(dòng)功能的視圖的基類;2024/8/1530菜單類CMenu類:

CMenu類是CObject類的子類用于管理菜單,提供了與窗口有關(guān)的菜單資源,建立修改跟蹤及刪除功能的成員函數(shù);對(duì)話框類CDialog:

CDialog類是從CWnd類中派生出來的對(duì)話框類;包括如下一些子類:CFileDialog提供用于打開或保存文件的標(biāo)準(zhǔn)對(duì)話框;CColorDialog提供用于選擇顏色的標(biāo)準(zhǔn)對(duì)話框;CFontDialog提供用于選擇字體的標(biāo)準(zhǔn)對(duì)話框;CPrintDialog提供用于打印文件的標(biāo)準(zhǔn)對(duì)話框;CFindReplaceDialog提供用于刪除查找并替換的標(biāo)準(zhǔn)對(duì)話框;

7.3MFC編程2024/8/15317.3MFC編程控制類: 控制類子層次結(jié)構(gòu)為Windows應(yīng)用程序提供了各種輸入和顯示界面的控件類,這時(shí)控件指放在窗口中可視對(duì)象;Cstatic:常用于標(biāo)注分隔窗口中其他控件;Cbutton:為對(duì)話框或窗口中的按鈕復(fù)選框或單選按鈕提供一個(gè)總的接口;Cedit:用于接收用戶的文字輸入;CRichEditCtrl:除了提供文本編輯控件的功能外還支持字符和圖形格式等功能;CSrollBar:提供控制條的功能用做對(duì)話框或窗口中的一個(gè)控件用戶可通過它在某一范圍內(nèi)進(jìn)行定位;2024/8/1532CProgressCtrl:用于指示操作的進(jìn)度;CSliderCtrl:包括一個(gè)可移動(dòng)的滑標(biāo)用戶可移動(dòng)滑標(biāo)來選擇一個(gè)值或一個(gè)范圍;CListBox:用于顯示一組列表項(xiàng)用戶可以進(jìn)行觀察和選擇;CComboBox:組合框控件類由一個(gè)編輯控制加一個(gè)列表框組成;CBitmapButton:位圖按鈕控件類是帶有位圖而非文字標(biāo)題的按鈕;CSpinButtonCtrl:帶有一個(gè)雙向箭頭按鈕的控件類用戶單擊某個(gè)箭頭按鈕將增大值或減小值;CAnimateCtrl:動(dòng)畫顯示控件類用于顯示一個(gè)簡(jiǎn)單的視頻圖像;

7.3MFC編程2024/8/15337.3MFC編程控制條類CControlBar:

控制條類是如下兩個(gè)子類的基類:

CToolBar工具條控件類,

CStatusBar狀態(tài)條控件類;設(shè)備描述表類CDC類: CDC類及其子類支持設(shè)備描述表對(duì)象,是CObject類的子類,通過CDC對(duì)象的成員函數(shù)可以完成所有的繪畫工作;CDC包括的子類有:

CPaintDC:用于窗口的OnPaint成員函數(shù)和視圖的OnDraw成員函數(shù)中自動(dòng)調(diào)用BeginPaint進(jìn)行構(gòu)造,調(diào)用EndPaint進(jìn)行析構(gòu);

CClientDC:用于窗口客戶區(qū)的顯示描述表;

CWindowDC:用于在整個(gè)窗口的顯示描述表包括用戶區(qū)和框架區(qū);2024/8/15347.3MFC編程繪畫對(duì)象類CGdiObject類: 圖形繪畫對(duì)象子層次結(jié)構(gòu)以CGdiObject類為根類,用于建立繪畫對(duì)象模型,如畫筆刷子字體位圖調(diào)色板等,包括有如下一些子類:

CBitmap封裝有GDI位圖提供了一個(gè)操作位圖的接口;

CBrush封裝有GDI畫刷可選擇設(shè)備描述表的當(dāng)前畫刷;

CFont封裝有GDI字體可選擇設(shè)備描述表的當(dāng)前字體;

CPalette封裝有GDI調(diào)色板是應(yīng)用程序和彩色輸出設(shè)備如顯示器之間的接口;

CPen封裝有GDI畫筆可選擇設(shè)備描述表的當(dāng)前畫筆;

CRgn封裝GDI區(qū)域用于操作窗口內(nèi)的橢圓區(qū)域或多邊形區(qū)域該類應(yīng)與CDC類的裁剪成員函數(shù)起使用;2024/8/15357.3MFC編程7.3.3MFC的消息與消息處理方法:在MFC類中使用消息映像機(jī)制將消息與消息處理聯(lián)系起來;程序員不必編寫WinMain()函數(shù),發(fā)送消息到WndProc()函數(shù);程序員只需直接編寫對(duì)應(yīng)消息響應(yīng)函數(shù)而消息和消息處理將由VC6內(nèi)部自動(dòng)添加一個(gè)消息映像關(guān)系進(jìn)行對(duì)應(yīng);例7.3,利用MFC的消息映像機(jī)制編程,其步驟為:

1)創(chuàng)建工程,工程類型為MFCAppWizard(exe); 2)選擇Singledocument;

3)使用ClassWizard為WM_CREATE及WM_DESTROY創(chuàng)建消息響應(yīng)代碼;2024/8/15367.3MFC編程AppWizard的啟動(dòng)和界面介紹:文件類型:2024/8/15377.3MFC編程文件類型續(xù):2024/8/15387.3MFC編程工程類型:2024/8/15397.3MFC編程工程類型,續(xù):2024/8/15407.3MFC編程AppWizard的使用:AppWizard生成的應(yīng)用程序結(jié)構(gòu):1、應(yīng)用程序包含的類

AppWizard生成的應(yīng)用程序共派生了五個(gè)類打開例7.3的s7_3在工程的工作區(qū)窗口中選擇ClassView選項(xiàng)卡從中可看到工程的五個(gè)類如下圖所示:2024/8/15417.3MFC編程1)應(yīng)用程序類CS7_3App: 從CWinApp類中派生出來,功能是為應(yīng)用程序的所有對(duì)象包括文檔視圖和邊框窗口進(jìn)行初始化,在應(yīng)用程序中有且僅有一個(gè)應(yīng)用程序?qū)ο蟊粍?chuàng)建;2)文檔類CS7_3Doc: 從CDocument類派生出來,主要用于存放應(yīng)用程序的數(shù)據(jù),同時(shí)實(shí)現(xiàn)數(shù)據(jù)的保存和裝載功能;3)視圖類CS7_3View: 從CView類中派生出來主要用于顯示儲(chǔ)存在文檔對(duì)象中的數(shù)據(jù);2024/8/15424)對(duì)話框類CAboutDlg:從Cdialog派生出來的用于顯示關(guān)于…對(duì)話框;5)主框架窗口類CMainFrame:它是CSDIFrameWnd類中派生出來的主框架窗口,主要用于管理應(yīng)用程序窗口,顯示菜單欄,標(biāo)題欄,工具欄,狀態(tài)欄控制菜單和控制按鈕等; 注意:對(duì)于多文檔應(yīng)用程序?qū)⒂兄骺蚣艽翱陬怌MainFrame和子窗口框架類CchildFrame主框架窗口類;CmainFrame是從CMDIFrameWnd類中派生出來的,CchildFrame是從CMDIChildWnd類中派生出來的主要用于管理在MDI主框架窗口中打開的各個(gè)文檔;7.3MFC編程2024/8/15437.3MFC編程2.應(yīng)用程序的文件說明:

2024/8/1544ClassWizard

類向?qū)Чぞ逤lassWizard用于對(duì)應(yīng)用程序框架進(jìn)行修改,編輯或補(bǔ)充,所以ClassWizard是對(duì)應(yīng)用程序中的類進(jìn)行管理的重要工具;ClassWizard的啟動(dòng)和界面介紹:(1)

溫馨提示

  • 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)論