面向?qū)ο蟪绦蛟O(shè)計(jì)與Visual99_第1頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)與Visual99_第2頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)與Visual99_第3頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)與Visual99_第4頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)與Visual99_第5頁(yè)
已閱讀5頁(yè),還剩90頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Windows消息

●Windows消息通常指以WM開(kāi)頭的消息,但WM_COMMAND除外。●鍵盤(pán)消息和鼠標(biāo)消息都屬于Windows消息,Windows消息由窗口和視圖進(jìn)行處理?!馱indows消息通常帶有若干個(gè)參數(shù)傳遞給消息處理函數(shù),這些參數(shù)為處理函數(shù)正確地處理消息提供了充分的信息。6/5/20236《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●控件通知消息是指當(dāng)控件的狀態(tài)發(fā)生改變時(shí),控件向其父窗口發(fā)送的消息?!馦FC對(duì)控件通知消息的傳遞方式與其他以WM開(kāi)頭的Windows消息一樣,但BN_CLICKED例外,該消息的傳遞方式與命令消息的傳遞機(jī)制相同。●對(duì)于Windows消息和控件通知消息,MFC將消息傳遞給相應(yīng)的窗口處理。

控件通知消息

6/5/20237《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》定時(shí)消息●定時(shí)消息也是Windows的一類(lèi)重要消息?!癞?dāng)需要應(yīng)用程序每隔一個(gè)指定的時(shí)間間隔便執(zhí)行某一特定操作時(shí),就需要使用定時(shí)消息WM_TIMER?!裨谶M(jìn)行定時(shí)操作時(shí),用戶(hù)需要調(diào)用SetTimer函數(shù)創(chuàng)建一個(gè)定時(shí)器,并設(shè)置定時(shí)器的事件標(biāo)志nIDEvent及時(shí)間間隔nElapse,然后編寫(xiě)消息WM_TIMER的消息處理函數(shù)OnTimer(),實(shí)現(xiàn)定時(shí)操作。6/5/20238《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》命令消息●命令消息是來(lái)自于用戶(hù)界面對(duì)象的WM_COMMAND消息。●包括菜單、工具欄按鈕和加速鍵都屬于命令消息等。即每當(dāng)用戶(hù)選擇一個(gè)菜單項(xiàng)、單擊一個(gè)按鈕或需要告訴操作系統(tǒng)應(yīng)當(dāng)執(zhí)行什么操作時(shí),則發(fā)送一條WM_COMMAND命令消息?!馱M_COMMAND消息的消息映射宏為OnCommand()。所有命令消息都包含有一個(gè)相同類(lèi)型的參數(shù),即該命令消息需要操作的資源ID值,由ID值映射消息處理函數(shù)。6/5/20239《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》2MFC消息映射機(jī)制

●消息映射是指將消息與處理函數(shù)相聯(lián)系,即當(dāng)系統(tǒng)產(chǎn)生一條消息時(shí),它能找到處理該消息的函數(shù)?!裣⒂成涫荳indows基于消息映射的事件驅(qū)動(dòng)機(jī)制的重要內(nèi)容之一。6/5/202310《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》VisualC++的消息映射宏

消息映射宏功能DECLARE_MESSAGE_MAP在頭文件中使用,用于聲明在源文件中存在消息映射BEGIN_MESSAGE_MAP表示消息映射的開(kāi)始,用于源代碼文件中END_MESSAGE_MAP表示消息映射的結(jié)束,用于源代碼文件中ON_COMMAND將特定的命令消息映射到類(lèi)的成員函數(shù),即使用該成員函數(shù)處理消息ON_COMMAND_RANGE將一組特定的命令消息映射到類(lèi)的成員函數(shù)6/5/202311《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》VisualC++的消息映射分為兩個(gè)方面:●一是在頭文件.h中處理●一是在實(shí)現(xiàn)文件.cpp中處理消息映射宏6/5/202312《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》消息映射舉例以上一章所創(chuàng)建的應(yīng)用程序MyWinP為例,打開(kāi)該應(yīng)用程序源代碼,其中有以下關(guān)于消息映射的代碼(見(jiàn)下頁(yè))。6/5/202313《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》在頭文件MyWinp.h中的消息映射代碼

//{{AFX_MSG(CMyWinPApp) afx_msgvoidOnAppAbout(); //NOTE-theClassWizardwilladdandremovememberfunctionshere.

//DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG

DECLARE_MESSAGE_MAP()6/5/202314《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》在實(shí)現(xiàn)文件中的消息映射代碼

BEGIN_MESSAGE_MAP(CMyWinPApp,CWinApp) //{{AFX_MSG_MAP(CMyWinPApp) ON_COMMAND(ID_APP_ABOUT,OnAppAbout)

//NOTE-theClassWizardwilladdandremovemappingmacroshere.

//DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG_MAP //Standardfilebaseddocumentcommands ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen) //Standardprintsetupcommand ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp::OnFilePrintSetup)END_MESSAGE_MAP()6/5/202315《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》消息映射宏的使用●宏DECLARE_MESSAGE_MAP用于類(lèi)聲明文件的結(jié)束處,即在.h文件的結(jié)束處?!窈闎EGIN_MESSAGE_MAP和END_MESSAGE_MAP用于類(lèi)的實(shí)現(xiàn)文件(.cpp)中實(shí)現(xiàn)消息映射,而且這兩個(gè)宏必須配合使用。6/5/202316《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●在BEGIN_MESSAGE_MAP與END_MESSAGE_MAP中間列出了消息映射的各個(gè)入口。例如,以下消息映射語(yǔ)句:ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen)表示當(dāng)用戶(hù)單擊了菜單項(xiàng)File|Open時(shí),則發(fā)送WM_COMMAND消息,該消息找到此語(yǔ)句,發(fā)現(xiàn)資源ID值與資源ID_FILE_OPEN匹配,則執(zhí)行該語(yǔ)句中指定的成員函數(shù)CWinApp::OnFileOpen()。消息映射宏的使用(續(xù))6/5/202317《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》向?qū)ppWizard生成的單文檔應(yīng)用程序一般包括四個(gè)基本類(lèi):●應(yīng)用程序類(lèi)●主框架窗口類(lèi)●文檔類(lèi)和●視圖類(lèi)12.2應(yīng)用程序分析6/5/202318《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》1.AppWizard向?qū)傻念?lèi)和文件●單擊項(xiàng)目工作區(qū)的ClassView標(biāo)簽,則顯示CMainFrame、CMyWinPApp、CMyWinPDoc和CMyWipView等,這是應(yīng)用程序MyWinP的全部類(lèi)?!窭肁ppWizard向?qū)?chuàng)建應(yīng)用程序框架時(shí),產(chǎn)生的各派生類(lèi)將被創(chuàng)建單獨(dú)的源文件。●單擊某一類(lèi)名(如CMyWinPView)前的“+”號(hào),則列出該類(lèi)的成員函數(shù),雙擊類(lèi)名或成員函數(shù)名(如GetDocument),則源代碼編輯區(qū)顯示出該類(lèi)或該成員函數(shù)的實(shí)現(xiàn)代碼。6/5/202319《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》觀察應(yīng)用程序MyWinP的類(lèi)和文件6/5/202320《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●MyWinP程序的應(yīng)用程序類(lèi)名為CMyWinPApp,由CwinApp類(lèi)派生而來(lái)。●該類(lèi)的每一個(gè)對(duì)象代表一個(gè)應(yīng)用程序,程序中默認(rèn)定義一個(gè)全局對(duì)象theApp?!馛MyWinPApp類(lèi)的功能是管理整個(gè)應(yīng)用程序,負(fù)責(zé)程序的啟動(dòng)、初始化、窗口的創(chuàng)建以及從Windows中獲取消息并將消息分發(fā)到適當(dāng)?shù)哪康牡亍MyWinPApp類(lèi)的聲明在頭文件MyWinPApp.h中,類(lèi)的實(shí)現(xiàn)在CMyWinPApp.cpp中。(1)應(yīng)用程序類(lèi)

6/5/202321《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●CMyWinP應(yīng)用程序的主框架窗口類(lèi)名為CMainFrame,它由CWnd的一個(gè)子類(lèi)派生而來(lái),該子類(lèi)即CFrameWnd?!馛MainFrame類(lèi)的聲明在頭文件MainFrame.h中,類(lèi)的實(shí)現(xiàn)在文件MainFrame.cpp中。●CMainFrame類(lèi)管理主框架窗口,并擁有一些如菜單、工具欄和狀態(tài)欄等控件,同時(shí),它還扮演轉(zhuǎn)發(fā)菜單和工具欄消息的角色。(2)主框架架窗口類(lèi)

6/5/202322《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●CMyWinP應(yīng)用程序的文檔類(lèi)名為CMyWinPDoc,從MFC的CDocument類(lèi)派生而來(lái)。其類(lèi)的聲明在頭文件CMyWinPDoc.h中,類(lèi)的實(shí)現(xiàn)在文件CMyWinPDoc.cpp中。●文檔類(lèi)的主要作用是保存應(yīng)用程序的數(shù)據(jù),并提供磁盤(pán)文件操作?!裼脩?hù)需要修改文檔類(lèi),增加成員變量以存儲(chǔ)應(yīng)用程序的數(shù)據(jù)、增加成員函數(shù)以獲得和修改數(shù)據(jù),然后為應(yīng)用程序服務(wù)。(3)文檔類(lèi)

6/5/202323《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●CMyWinP應(yīng)用程序的視圖類(lèi)名為CMyWinPView,類(lèi)的聲明在頭文件MyWinPView.h中,而類(lèi)的實(shí)現(xiàn)在文件MyWinPView.cpp中。●視圖類(lèi)主要管理視圖窗口,負(fù)責(zé)用戶(hù)數(shù)據(jù)的輸入和數(shù)據(jù)的輸出顯示?!裨趧?chuàng)建一個(gè)單文檔應(yīng)用程序時(shí),也可以選擇將視圖類(lèi)從非CView類(lèi)的其他子類(lèi)派生出來(lái),例如,在BaseClass中選擇CEditView作為基本視圖類(lèi),則可以很方便的得到一個(gè)簡(jiǎn)易的字處理程序。(4)視圖類(lèi)

6/5/202324《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》(5)其他文件

●除以上主要類(lèi)之外,AppWizard還自動(dòng)生成Stdafx.cpp和stdafx.h兩個(gè)文件。這兩個(gè)文件是每個(gè)基于MFC程序所必需的,●用于建立一個(gè)預(yù)編譯頭文件*.pch和一個(gè)預(yù)定義的類(lèi)型文件stdafx.obj?!馦FC包含很多頭文件,如果每次都編譯則比較費(fèi)時(shí),將afxwin.h、afxext.h、afxcmn.h、afxdisp.h都放在stdafx.h文件中,這樣編譯系統(tǒng)可以識(shí)別哪些文件已經(jīng)編譯過(guò),以加速應(yīng)用程序的編譯過(guò)程。6/5/202325《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》2.應(yīng)用程序的運(yùn)行機(jī)制

Windows應(yīng)用程序的執(zhí)行過(guò)程如下:●自動(dòng)調(diào)用應(yīng)用程序框架內(nèi)的WinMain函數(shù)。WinMain()自動(dòng)查找由CWinApp派生類(lèi)構(gòu)造函數(shù)創(chuàng)建的全局對(duì)象theApp。●WinMain函數(shù)調(diào)用調(diào)用Initlnstance成員函數(shù),完成應(yīng)用程序?qū)嵗某跏蓟??!馱inMain函數(shù)調(diào)用Run成員函數(shù),進(jìn)入消息循環(huán)?!馱inMain函數(shù)退出,調(diào)用有關(guān)成員函數(shù)進(jìn)行必要的清理工作,程序運(yùn)行中止。6/5/202326《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》12.3輸入/輸出處理程序

●輸入輸出處理是幾乎所有Windows應(yīng)用程序最基本的功能之一●Windows應(yīng)用程序通過(guò)對(duì)鍵盤(pán)消息和鼠標(biāo)消息的響應(yīng)完成對(duì)用戶(hù)輸入的處理●通過(guò)GDI提供的繪圖函數(shù)在窗口的客戶(hù)區(qū)輸出信息。6/5/202327《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》1.文本輸出程序

文本輸出指在窗口客戶(hù)區(qū)特定位置輸出用戶(hù)指定的相關(guān)文本信息。在MFC中,CDC類(lèi)實(shí)現(xiàn)了對(duì)設(shè)備環(huán)境的封裝,CDC類(lèi)有許多成員函數(shù),完成各種與設(shè)備環(huán)境有關(guān)的操作。6/5/202328《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》DrawText函數(shù)

DrawText函數(shù)是CDC類(lèi)用于文本輸出的成員函數(shù)之一,它的作用是在指定矩形區(qū)域內(nèi)以當(dāng)前字體、顏色等屬性及指定的顯示方式顯示字符串。DrawText函數(shù)的格式如下:形式一:virtualintDrawText(LPCTSTRlpszString,intnCount,LPRECTlpRect,UINTnFormat);形式二:intDrawText(constCString&str,LPRECTlpRect,UINTnFormat);6/5/202329《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》參數(shù)含義●參數(shù)1pszString是指向輸出字符串的指針;●參數(shù)nCount指定字符串的長(zhǎng)度,如果為-1,則1pszString是一個(gè)指向以null結(jié)尾的字符串的長(zhǎng)指針;●參數(shù)lpRect是指向RECT結(jié)構(gòu)的指針;●參數(shù)nFormat用于指定輸出格式;●str表示存儲(chǔ)字符串的CString對(duì)象。6/5/202330《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》TextOut函數(shù)

●TextOut函數(shù)也是CDC類(lèi)用于文本輸出的成員函數(shù),它的作用是在指定的起點(diǎn)坐標(biāo)上,以當(dāng)前字體、顏色等屬性顯示字符串?!馮extOut函數(shù)格式:形式一:virtualintTextOut(intx,inty,LPCTSTRlpszString,intnCount);形式二:BOOLTextOut(intx,inty,constCString&str);6/5/202331《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》參數(shù)含義●參數(shù)x,y表示欲顯示字符串起點(diǎn)坐標(biāo);●參數(shù)lpszString指向要顯示字符串的指針;●參數(shù)nCount指定字符串的長(zhǎng)度;●str存儲(chǔ)字符串的CString對(duì)象。6/5/202332《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》OnDraw函數(shù)

voidOnDraw(CDC*pDC)

●OnDraw函數(shù)是視圖類(lèi)的一個(gè)重要成員函數(shù)?!癯蓡T函數(shù)OnDraw管理文檔類(lèi)成員變量的顯示,即OnDraw函數(shù)主要用于更新視圖窗口。6/5/202333《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》GetDocument函數(shù)

●GetDocument函數(shù)返回一個(gè)指向關(guān)聯(lián)文檔對(duì)象的指針?!裢ㄟ^(guò)GetDocument函數(shù)返回的文檔對(duì)象指針,視圖對(duì)象可以調(diào)用文檔類(lèi)及其派生類(lèi)的成員函數(shù)或直接讀取文檔對(duì)象的公有數(shù)據(jù)成員,獲取應(yīng)用程序的數(shù)據(jù)。●GetDocument函數(shù)的格式如下:CDocument*GetDocument()const

6/5/202334《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》2鍵盤(pán)輸入處理程序

●鍵盤(pán)是Windows應(yīng)用程序一個(gè)非常重要的輸入手段,當(dāng)用戶(hù)按下或釋放一個(gè)按鍵時(shí),鍵盤(pán)驅(qū)動(dòng)程序KEYBOARD.DRV中的鍵盤(pán)中斷程序?qū)?duì)按鍵進(jìn)行編碼,并由用戶(hù)模塊USER.EXE生成鍵盤(pán)消息,最終發(fā)送到消息隊(duì)列中等待處理,而處理鍵盤(pán)消息則是由應(yīng)用程序的窗口來(lái)具體完成的?!裨赪indows系統(tǒng)下,鍵盤(pán)由所有運(yùn)行的應(yīng)用程序共享,但不管用戶(hù)打開(kāi)了多少個(gè)應(yīng)用程序,任何情況下只有一個(gè)窗口能接受到按鍵消息?!馱indows環(huán)境下接受到按鍵消息的窗口稱(chēng)為“有輸入焦點(diǎn)”的窗口。

6/5/202335《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》鍵盤(pán)消息

在Windows應(yīng)用程序運(yùn)行時(shí)若用戶(hù)按下一個(gè)鍵,就會(huì)產(chǎn)生一個(gè)鍵盤(pán)消息,如:●WM_KEYDOWN●WM_KEYUP●WM_SYSKEYDOWN●WM_SYSKEYUP其中WM_SYSKEYDOWN、WM_SYSKEYUP中的SYS表示系統(tǒng)按鍵消息,由Windows處理,應(yīng)用程序只需處理WM_KEYDOWN和WM_KEYUP等非系統(tǒng)按鍵消息。6/5/202336《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》afx_msgvoidOnChar(UNITnChar,UINTnRepCnt,UINTnFlags)WM_CHAR的消息處理函數(shù):

●nChar表示按鍵的字符代碼值;●nRepCnt表示按鍵的重復(fù)次數(shù),因此若用戶(hù)按下某鍵不放,該參數(shù)值將不斷增加;●nFlags用于傳遞按鍵的掃描碼、轉(zhuǎn)換碼、鍵的先前狀態(tài)、上一次按鍵狀態(tài)等相關(guān)信息。6/5/202337《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》虛擬鍵代碼

●鍵盤(pán)上每一個(gè)有意義的鍵都對(duì)應(yīng)著一個(gè)惟一的標(biāo)識(shí)值,即鍵盤(pán)掃描碼,當(dāng)用戶(hù)按下或釋放一個(gè)按鍵時(shí),都會(huì)產(chǎn)生掃描碼?!駫呙璐a是依賴(lài)于具體設(shè)備的。Windows應(yīng)用程序中一般使用與具體設(shè)備無(wú)關(guān)的虛擬碼?!裉摂M碼是Windows系統(tǒng)內(nèi)部定義的與設(shè)備無(wú)關(guān)的鍵盤(pán)標(biāo)識(shí),從而有效避免了鍵盤(pán)對(duì)應(yīng)用程序的影響,提高了應(yīng)用程序的通用性。6/5/202338《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》部分常用的虛擬鍵代碼

虛擬鍵代碼對(duì)應(yīng)功能鍵虛擬鍵代碼對(duì)應(yīng)功能鍵VK_INSERTInsert漿VK_DOWN↓(箭頭向下)VK_LEFT←(左箭頭)VK_NEXTPageDown鍵VK_RIGHT→(右箭頭)VK_BACKBackSpace鍵VK_UP↑(箭頭向上)VK_RETURNEnter鍵VK_A~Z字母A~ZVK_TABTab鍵6/5/202339《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》顯示鍵盤(pán)輸入字符程序的實(shí)現(xiàn)方法●利用AppWizard向?qū)身?xiàng)目名為MyWinKey的應(yīng)用程序框架?!裨趹?yīng)用程序框架中添加保存字符的數(shù)據(jù)成員(既可以利用向?qū)砑?,也可以手工添?。●在應(yīng)用程序框架中通過(guò)ClassWizard向?qū)砑酉⑻幚砗瘮?shù)。●編譯并運(yùn)行應(yīng)用程序即可實(shí)現(xiàn)將鍵盤(pán)輸入的字符在窗口客戶(hù)區(qū)顯示。

這僅僅是實(shí)現(xiàn)步驟,詳細(xì)實(shí)現(xiàn)方法應(yīng)在VisualC++6.0環(huán)境下,具體講授。6/5/202340《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》3.鼠標(biāo)處理程序

●鼠標(biāo)是一種得到廣泛應(yīng)用的定位輸入設(shè)備?!裢ㄟ^(guò)鼠標(biāo)的單擊、雙擊和拖動(dòng)功能,用戶(hù)可以方便的操作Windows的圖形界面應(yīng)用程序?!馱indows應(yīng)用程序的鼠標(biāo)消息,可以被任何窗口接受,只要鼠標(biāo)移動(dòng)到該窗口并有鼠標(biāo)按鍵消息,該窗口就可以接受到鼠標(biāo)消息,而與該窗口是否活動(dòng)窗口或是否帶有輸入焦點(diǎn)沒(méi)有關(guān)系。

6/5/202341《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》鼠標(biāo)消息

●windows操作系統(tǒng)通過(guò)鼠標(biāo)驅(qū)動(dòng)程序接受鼠標(biāo)輸入消息,由鼠標(biāo)設(shè)備驅(qū)動(dòng)程序捕捉Windows的任何鼠標(biāo)事件。●當(dāng)用戶(hù)移動(dòng)鼠標(biāo)釋放鼠標(biāo)按鍵時(shí),將產(chǎn)生鼠標(biāo)消息。鼠標(biāo)消息可以分為客戶(hù)區(qū)鼠標(biāo)消息和非客戶(hù)區(qū)鼠標(biāo)消息。●鼠標(biāo)在窗口客戶(hù)區(qū)移動(dòng)時(shí)產(chǎn)生WM_MOUSEMOVE消息.鼠標(biāo)在客戶(hù)區(qū)產(chǎn)生的消息由Windows應(yīng)用程序處理,而在窗口邊界、菜單、標(biāo)題欄和滾動(dòng)條等非客戶(hù)區(qū)產(chǎn)生的鼠標(biāo)消息一般由Windows系統(tǒng)處理。

6/5/202342《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●鼠標(biāo)消息屬于Windows消息●鼠標(biāo)消息均可直接利用VisualC++6.0的ClassWizard向?qū)砑邮髽?biāo)消息處理函數(shù)●與鼠標(biāo)消息對(duì)應(yīng)的消息處理函數(shù)如表12-3所示。消息處理函數(shù)

6/5/202343《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》常用鼠標(biāo)消息處理函數(shù)表

鼠標(biāo)消息消息處理函數(shù)備注WM_MOUSEMOVEvoidOnMouseMove(UINTnFlags,CPointpoint)鼠標(biāo)移動(dòng)WM_LBUTTONDOWNvoidOnLButtonDown(UINTnFlags,CPointpoint)單擊鼠標(biāo)左鍵WM_MBUTTONDOWNvoidOnMButtonDown(UINTnFlags,CPointpoint)單擊鼠標(biāo)中鍵WM_RBUTTONDOWNvoidOnRButtonDown(UINTnFlags,CPointpoint)單擊鼠標(biāo)右鍵WM_LBUTTONUPvoidOnLButtonUp(UINTnFlags,CPointpoint)鼠標(biāo)左鍵釋放6/5/202344《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》鼠標(biāo)消息處理函數(shù)表(續(xù))WM_MBUTTONUPvoidOnMButtonUp(UINTnFlags,CPointpoint)鼠標(biāo)中鍵釋放WM_RBUTTONUPvoidOnRButtonUp(UINTnFlags,CPointpoint)鼠標(biāo)右鍵釋放WM_LBUTTONDBLICKvoidOnLButtonDblClk(UINTnFlags,CPointpoint)雙擊鼠標(biāo)左鍵WM_MBUTTONDBLICKvoidOnMButtonDblClk(UINTnFlags,CPointpoint)雙擊鼠標(biāo)中鍵WM_RBUTTONDBLICKvoidOnRButtonDblClk(UINTnFlags,CPointpoint)雙擊鼠標(biāo)右鍵6/5/202345《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》畫(huà)筆的使用方法

●先定義自己的畫(huà)筆對(duì)象,取代默認(rèn)的畫(huà)筆●將自定義畫(huà)筆選入設(shè)備環(huán)境,用指針變量保存默認(rèn)的畫(huà)筆;●用設(shè)備環(huán)境中的畫(huà)圖工具繪圖●銷(xiāo)毀自定義畫(huà)筆,恢復(fù)設(shè)備環(huán)境的默認(rèn)畫(huà)筆6/5/202346《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》12.4菜單應(yīng)用程序設(shè)計(jì)

●創(chuàng)建友好的用戶(hù)界面是開(kāi)發(fā)應(yīng)用程序的一項(xiàng)重要任務(wù)?!癫藛危∕enu)是windows應(yīng)用程序不可缺少的重要組成部分,它是應(yīng)用程序命令項(xiàng)的列表。菜單是用戶(hù)與應(yīng)用程序進(jìn)行交互的主要方式之一。

●VisualC++可以方便的得到美觀、適用、友好的用戶(hù)界面。6/5/202347《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》1.菜單簡(jiǎn)介

●菜單主要包括下拉式和彈出式兩種?!駨棾鍪讲藛问菫榱隧憫?yīng)單擊鼠標(biāo)右鍵而激活的彈出的菜單,可以出現(xiàn)在屏幕的任何位置?!裣吕讲藛斡缮蠈铀搅斜眄?xiàng)以及與其相連的彈出式菜單組成,當(dāng)用戶(hù)選擇了上層某個(gè)列表項(xiàng)時(shí),與之關(guān)聯(lián)的彈出式菜單就會(huì)出現(xiàn),而且可以形成級(jí)聯(lián)菜單?!馦FC類(lèi)庫(kù)將菜單操作封裝在CMenu類(lèi)中,所有關(guān)于菜單的操作都可以通過(guò)CMenu類(lèi)的成員函數(shù)實(shí)現(xiàn)。6/5/202348《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》菜單的基本屬性●菜單的基本屬性主要包括標(biāo)識(shí)符(ID)、標(biāo)題(Caption)和提示(Prompt)三大要素。●標(biāo)識(shí)符用來(lái)在程序中唯一標(biāo)識(shí)菜單項(xiàng)?!駱?biāo)題是實(shí)際顯示在菜單上的文字信息,用戶(hù)選擇菜單時(shí)首先看到的就是標(biāo)題,提示是用戶(hù)在查看某個(gè)菜單時(shí),顯示在窗口底端的文字信息。

6/5/202349《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》2.菜單資源編輯器

●VisualC++為用戶(hù)提供了一個(gè)便捷的菜單編輯器(

MenuEditor)?!癞?dāng)用戶(hù)使用AppWizard創(chuàng)建單文檔(SDI)或多文檔(MDI)應(yīng)用程序時(shí),系統(tǒng)將為應(yīng)用程序自動(dòng)生成默認(rèn)的菜單欄。●用戶(hù)打開(kāi)菜單編輯器,進(jìn)行適當(dāng)修改,再編寫(xiě)各菜單項(xiàng)相應(yīng)的消息處理函數(shù)即可。6/5/202350《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●在項(xiàng)目工作區(qū)(Workspace)窗口中選擇ResourceView選項(xiàng)卡●雙擊項(xiàng)目名,則應(yīng)用程序所有的資源以樹(shù)狀形式顯示出來(lái)●雙擊Menu文件夾,列出所有菜單的標(biāo)識(shí)符,對(duì)于單文檔應(yīng)用程序則只有唯一的菜單資源IDR_MAINFRAME,雙擊該標(biāo)識(shí)符,就打開(kāi)了菜單編輯器。如下頁(yè)圖所示:

菜單資源編輯器:6/5/202351《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》菜單資源編輯器界面6/5/202352《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●具有當(dāng)前焦點(diǎn)的菜單條四周擁有一個(gè)灰色的邊框,是用戶(hù)正在編輯的菜單條。●如果用戶(hù)想在當(dāng)前菜單條前添加一個(gè)新的菜單條,按下Insert鍵,在該菜單條前將會(huì)出現(xiàn)一個(gè)新的空白菜單條,然后為其設(shè)置屬性。●刪除菜單時(shí),用戶(hù)應(yīng)將當(dāng)前焦點(diǎn)移至該菜單處,使用Delete鍵進(jìn)行刪除操作。如果此菜單條是菜單選項(xiàng),則系統(tǒng)將直接將其刪除;而當(dāng)此菜單條是一個(gè)下拉菜單時(shí),系統(tǒng)會(huì)提示用戶(hù)是否刪除整個(gè)下拉菜單,若回答“是”,則系統(tǒng)將該菜單條所包含的所有菜單項(xiàng)全部刪除。菜單資源編輯器的使用6/5/202353《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●若菜單項(xiàng)的首字母都帶有下劃線(xiàn),表示該字母是一個(gè)快捷鍵,用戶(hù)可以通過(guò)快捷鍵打開(kāi)該菜單項(xiàng)。●加速鍵是指用戶(hù)通過(guò)按一組組合鍵的方式直接執(zhí)行該菜單命令,而不用先打開(kāi)該菜單項(xiàng)?!窨旖萱I作用是打開(kāi)菜單但并沒(méi)有執(zhí)行菜單命令●加速鍵的作用是執(zhí)行菜單命令(如Ctrl+C直接執(zhí)行復(fù)制功能)但卻沒(méi)有打開(kāi)菜單項(xiàng)。加速鍵與快捷鍵6/5/202354《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》形式一:BOOLRectangle(LPCRECTlpRect);

形式二:

BOOLRectangle(intx1,inty1,intx2,inty2);參數(shù)lpRect是指向RECT結(jié)構(gòu)或Crect對(duì)象的指針

參數(shù)x1,y1用于指定矩形區(qū)域左上角坐標(biāo),參數(shù)x2,y2用于指定矩形區(qū)域右下角坐標(biāo)。

Rectangle繪圖函數(shù)

6/5/202355《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》形式一:BOOLEllipse(LPCRECTlpRect);

形式二:

BOOLEllipse(intx1,inty1,intx2,inty2);參數(shù)x1,y1用于指定矩形區(qū)域左上角坐標(biāo),參數(shù)x2,y2用于指定矩形區(qū)域右下角坐標(biāo)。

Ellipse繪圖函數(shù)6/5/202356《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》12.5工具欄應(yīng)用程序設(shè)計(jì)

●工具欄也是Windows應(yīng)用程序中常見(jiàn)的用戶(hù)界面。●Windows應(yīng)用程序中,為方便用戶(hù)使用,通常將常用的菜單項(xiàng)提取出來(lái),例如常用的文件菜單項(xiàng)(New、Open等)、編輯菜單項(xiàng)(Copy、Cut、Paste等)組成工具欄?!袢绻f(shuō)菜單是Windows程序常用的界面元素,那么在很多情況下,工具欄可以更快捷、更方便、更有效、更直觀的進(jìn)行某些操作。6/5/202357《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》1.工具欄簡(jiǎn)介

●工具欄是應(yīng)用程序中一組提供快捷操作的工具,通常將常用的命令放在工具欄中?!窆ぞ邫谟啥鄠€(gè)工具欄按鈕組成,其中每一個(gè)按鈕代表一個(gè)功能選項(xiàng),這樣對(duì)于常用的命令可以直接進(jìn)行操作,而不用每次都打開(kāi)菜單欄進(jìn)行選擇,從而可以方便用戶(hù)操作。6/5/202358《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》工具欄按鈕形式●工具欄按鈕有命令按鈕和復(fù)選框按鈕等形式。如Word中的打開(kāi)文件、保存文件、打印等都是命令按鈕形式?!駥?duì)于復(fù)選按鈕,第一次單擊后,保持選中狀態(tài),同時(shí)可以選擇其他按鈕來(lái)配合產(chǎn)生一定的效果,Word中使用的加黑(B)、下劃線(xiàn)(U)和斜體(I)就是標(biāo)準(zhǔn)的復(fù)選按鈕,當(dāng)再次單擊時(shí),則按鈕恢復(fù)初始狀態(tài)。6/5/202359《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》2.使用資源編輯器創(chuàng)建工具欄

●CToolBar類(lèi)封裝了工具欄的功能。●AppWizard向?qū)г趧?chuàng)建的應(yīng)用程序的主框架窗口類(lèi)CMainFrame中添加一個(gè)CToolBar類(lèi)的數(shù)據(jù)成員m_wndToolBar,并在主框架窗口類(lèi)CMainFrame的成員函數(shù)OnCreate中創(chuàng)建工具欄。

6/5/202360《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●AppWizard向?qū)樗鶆?chuàng)建的應(yīng)用程序加入了系統(tǒng)預(yù)定義的工具欄。●應(yīng)用中應(yīng)根據(jù)應(yīng)用程序的具體要求,通過(guò)工具欄編輯器,修改預(yù)定義的工具欄或生成新的工具欄?!裣到y(tǒng)預(yù)定義工具欄具有停靠功能,主框架窗口能夠接受工具欄的???。●通常情況下,工具欄中的按鈕對(duì)應(yīng)于菜單中的選項(xiàng),所以,在定義工具欄的按鈕時(shí),也會(huì)定義相應(yīng)的菜單項(xiàng)。使用資源編輯器創(chuàng)建工具欄(續(xù))6/5/202361《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》

●創(chuàng)建新工具欄時(shí),可以選擇菜單項(xiàng)Insert|Resource,彈出如下頁(yè)圖所示的添加工具欄(InsertResource)對(duì)話(huà)框。

●在該對(duì)話(huà)框中雙擊Toolbar資源類(lèi)型(或選擇Toolbar并單擊New按鈕)即可進(jìn)入工具欄資源編輯器創(chuàng)建新的工具欄資源。創(chuàng)建新工具欄6/5/202362《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》InsertResource對(duì)話(huà)框界面

6/5/202363《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●編輯已有的工具欄資源,可以選擇項(xiàng)目工作區(qū)的ResourceView選項(xiàng)卡,單擊Toolbar●雙擊所需要編輯的工具欄資源(如IDR_MAINFRAME)即可,如下頁(yè)圖所示工具欄資源編輯器6/5/202364《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》工具欄資源編輯器界面

6/5/202365《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》工具欄資源編輯器中有兩個(gè)視圖窗口:●一個(gè)是預(yù)覽窗口,其中顯示正常大小的工具欄,包含用戶(hù)已經(jīng)添加的工具欄按鈕,用戶(hù)可以從這個(gè)窗口中預(yù)覽當(dāng)前工具欄的外觀,并且可以在其中選擇當(dāng)前編輯的工具欄按鈕,當(dāng)前編輯的工具欄按鈕處于明顯凹狀態(tài)。●另一個(gè)視圖窗口是編輯窗口,顯示當(dāng)前工具欄按鈕的放大位圖,用戶(hù)可以利用資源編輯器中的Graphics圖形工具欄來(lái)創(chuàng)建或編輯工具欄按鈕的位圖資源。工具欄資源編輯器的應(yīng)用6/5/202366《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●當(dāng)創(chuàng)建完一個(gè)工具欄按鈕后,已有的按鈕之后將會(huì)出現(xiàn)一個(gè)新的空白按鈕,用戶(hù)可以按照順序依次創(chuàng)建工具欄按鈕?!褚部梢愿淖児ぞ邫谏习粹o的排列順序:在預(yù)覽窗口中選中第一個(gè)按鈕,然后用鼠標(biāo)將其拖放至另一個(gè)按鈕處,即可交換這兩個(gè)按鈕的順序。●更新按鈕的位圖:則需先選中此按鈕,按下Delete鍵即可刷新其位圖資源?!駝h除按鈕:用戶(hù)只須在預(yù)覽窗口中選中該按鈕,按下鼠標(biāo)左鍵不放,將此按鈕拖出預(yù)覽窗口區(qū)域即可。工具欄資源編輯器的應(yīng)用(續(xù))6/5/202367《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》12.6狀態(tài)欄應(yīng)用程序設(shè)計(jì)

●狀態(tài)欄的作用是在程序的控制下,顯示當(dāng)前程序的執(zhí)行狀態(tài)或簡(jiǎn)要的說(shuō)明信息,例如,當(dāng)選取某工具或菜單項(xiàng)時(shí),在狀態(tài)欄中顯示說(shuō)明文字?!駹顟B(tài)欄既不接受用戶(hù)輸入也不產(chǎn)生命令消息。●狀態(tài)欄可支持兩種類(lèi)型的文本窗口,分別是信息行窗口和狀態(tài)指示器窗口。6/5/202368《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》

狀態(tài)欄的實(shí)現(xiàn)

●一般情況下,狀態(tài)欄位于Windows應(yīng)用程序窗口的底部,通常由一系列的面板(Pane)組成。●狀態(tài)欄用于文本輸出或指示器,其中常見(jiàn)的指示符有CapsLock、NumLock、ScrollLock等?!袢绻贏ppWizard向?qū)У腟tep4對(duì)話(huà)框中選擇了Initialstatusbar項(xiàng),那么AppWizard向?qū)傻膽?yīng)用程序就擁有一個(gè)默認(rèn)的狀態(tài)欄。6/5/202369《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》創(chuàng)建狀態(tài)欄的目的是提供一個(gè)輸出區(qū)域,定義提示信息,建立特定狀態(tài)和提示信息的聯(lián)系。CStatusBar類(lèi)封裝了狀態(tài)欄的功能。通過(guò)AppWizard向?qū)?chuàng)建應(yīng)用程序時(shí):●向?qū)г趹?yīng)用程序的主框架窗口類(lèi)CMainFrame中定義了一個(gè)CStatusBar類(lèi)的數(shù)據(jù)成員mwndStatusBar。●在主框架程序MainFram.cpp中定義狀態(tài)欄指示器標(biāo)識(shí)符數(shù)組IndicatorIDs?!裨谥骺蚣艽翱陬?lèi)的成員函數(shù)OnCreate中創(chuàng)建狀態(tài)欄。狀態(tài)欄的實(shí)現(xiàn)(續(xù))6/5/202370《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》12.7對(duì)話(huà)框應(yīng)用程序

●對(duì)話(huà)框是程序與用戶(hù)之間的交互的工具。例如打開(kāi)文件、查詢(xún)以及進(jìn)行其他數(shù)據(jù)交換時(shí)都需要使用對(duì)話(huà)框,從最簡(jiǎn)單的詢(xún)問(wèn)“是”與“否”的消息框,到復(fù)雜的數(shù)據(jù)處理框,都可以用對(duì)話(huà)框來(lái)完成?!駥?duì)話(huà)框是一個(gè)窗口,它繼承于MFC的CWnd類(lèi),它具備了窗口的很多屬性,不僅可以接受消息、可以被移動(dòng)和關(guān)閉,而且還可以在它的客戶(hù)區(qū)中進(jìn)行繪圖操作。●在設(shè)計(jì)對(duì)話(huà)框時(shí)可以把控件直接粘到對(duì)話(huà)框,以實(shí)現(xiàn)各種操作。6/5/202371《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》1.對(duì)話(huà)框的分類(lèi)

對(duì)話(huà)框按其動(dòng)作模式分為:●模式對(duì)話(huà)框●無(wú)模式對(duì)話(huà)框6/5/202372《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》模式對(duì)話(huà)框

●MFC的對(duì)話(huà)框類(lèi)(CDialog)既支持模式對(duì)話(huà)框也支持無(wú)模式對(duì)話(huà)框?!駥?duì)于模式對(duì)話(huà)框,如OpenFile對(duì)話(huà)框,在同一個(gè)應(yīng)用程序中,只有該對(duì)話(huà)框被關(guān)閉后,才能對(duì)程序的其他功能進(jìn)行操作?!衲J綄?duì)話(huà)框被打開(kāi)之后,對(duì)話(huà)框就接管了父窗口的輸入控制權(quán),并掌握了控制權(quán)。只有當(dāng)用戶(hù)關(guān)閉了該對(duì)話(huà)框之后,對(duì)話(huà)框才會(huì)把控制權(quán)交給父窗口。6/5/202373《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》無(wú)模式對(duì)話(huà)框

無(wú)模式對(duì)話(huà)框:●對(duì)話(huà)框與父窗口共享控制權(quán)●用戶(hù)可以在主窗口和對(duì)話(huà)框之間來(lái)回切換●在對(duì)話(huà)框仍保留在屏幕上的同時(shí),用戶(hù)還可以在應(yīng)用程序的其他窗口中進(jìn)行操作6/5/202374《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》2.常用對(duì)話(huà)框類(lèi)

所有對(duì)話(huà)框類(lèi)的基類(lèi)是CDialog常用對(duì)話(huà)框類(lèi)包括:●文件存取對(duì)話(huà)框類(lèi)●顏色設(shè)定對(duì)話(huà)框類(lèi)●字型設(shè)定對(duì)話(huà)框類(lèi)●打印設(shè)定對(duì)話(huà)框類(lèi)●字符串搜索與替換對(duì)話(huà)框類(lèi)6/5/202375《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》3.對(duì)話(huà)框的常用函數(shù)

函數(shù)功能Cdialog::Create創(chuàng)建無(wú)模式對(duì)話(huà)框CWnd::UpdateData設(shè)定對(duì)話(huà)框控制項(xiàng)的數(shù)據(jù)或取得控制項(xiàng)數(shù)據(jù)CWnd::GetDlgltem獲得子窗口或?qū)υ?huà)框內(nèi)部控制項(xiàng)對(duì)象的指針CWnd::GetDlgltemText獲得控制項(xiàng)的標(biāo)題或字符串內(nèi)容CWnd::GetDlgltemInt獲得控制項(xiàng)的文本內(nèi)容,并轉(zhuǎn)換為整數(shù)CWnd::SetDlgltemText設(shè)定控件顯示的文本內(nèi)容CWnd::SetDlgltemInt將整數(shù)轉(zhuǎn)換為文本并賦予控件CWnd::DlgDirSelect獲得列表框當(dāng)前選定項(xiàng)的字符串內(nèi)容6/5/202376《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》CWnd::DlgDirList將指定路徑下符合文件屬性和描述的所有文件加到列表框中CWnd::CheckDlgButton設(shè)置/取消按鈕的標(biāo)記符或更改一個(gè)三態(tài)按鈕的狀態(tài)CWnd::CheckRadioButton標(biāo)記指定的圓形按鈕,同時(shí)刪除同組的其他圓形按鈕的標(biāo)記符CWnd::GetCheckRadioButton獲得指定組群中標(biāo)記了的圓形按鈕代碼CscrollBar::SetScrollRange設(shè)定滾動(dòng)條的范圍(最大最小位置值)CscrollBar::SetScrollPos設(shè)定滾動(dòng)條的位置CscrollBar::GetScrollRange獲得滾動(dòng)條的滾動(dòng)范圍CscrollBar::GetScrollPos獲得滾動(dòng)條的當(dāng)前位置對(duì)話(huà)框的常用函數(shù)(續(xù))6/5/202377《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》對(duì)話(huà)框的創(chuàng)建一般可以按以下步驟進(jìn)行:●對(duì)話(huà)框界面設(shè)計(jì)●生成管理對(duì)話(huà)框的新類(lèi)●定義數(shù)據(jù)成員●定義消息及消息處理函數(shù)●對(duì)話(huà)框的顯示等相關(guān)工作創(chuàng)建對(duì)話(huà)框的一般步驟

6/5/202378《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》12.8控件應(yīng)用程序設(shè)計(jì)

●Windows應(yīng)用程序中控件的應(yīng)用隨處可見(jiàn),任意打開(kāi)一個(gè)窗口或?qū)υ?huà)框,一般都具有各種各樣的控件,如命令按鈕、靜態(tài)文本、編輯框、列表框等?!窨丶且环N子窗口,應(yīng)用程序用它來(lái)與其他窗口一起完成簡(jiǎn)單的輸入輸出操作。●在Windows應(yīng)用程序中,窗口和對(duì)話(huà)框是框架或容器,控件是靈魂。6/5/202379《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》1.控件簡(jiǎn)介

●控件是一種特殊的對(duì)象,是Windows應(yīng)用程序和用戶(hù)進(jìn)行交互的重要手段?!窨丶氖褂煤芎玫捏w現(xiàn)了Windows系統(tǒng)面向?qū)ο蟮奶攸c(diǎn)?!窨丶ǔ?梢猿霈F(xiàn)在對(duì)話(huà)框或工具欄中,也可以出現(xiàn)在窗口中?!馰isualC++6.0提供了各種控件來(lái)實(shí)現(xiàn)直觀、方便、快捷的交互。6/5/202380《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》在VisualC++中,控件可以分為:●Windows常用控件●ActiveX控件●其他MFC類(lèi)庫(kù)所支持的控件控件的分類(lèi)6/5/202381《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》Windows常用控件

Windows常用控件包括使用頻率最高的標(biāo)準(zhǔn)控件和用戶(hù)自定義控件,如:

●靜態(tài)文本控件●命令按鈕控件●編輯框控件●列表框控件●復(fù)選框控件●組合框控件●滾動(dòng)條控件6/5/202382《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》ActiveX控件

ActiveX控件又稱(chēng)為OLE控件,常用于Windows應(yīng)用程序的對(duì)話(huà)框中,或用于WWW的網(wǎng)頁(yè)中。6/5/202383《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》其他MFC類(lèi)庫(kù)所支持的控件

除Windows常用控件和ActiveX控件之外,MFC類(lèi)庫(kù)還支持:●CBitmapButton控件●CCheckListBox控件●CDragListBox控件●CProgressCtr控件●CStatusBar控件等6/5/202384《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》2.常用控件類(lèi)

控件MFC類(lèi)簡(jiǎn)要說(shuō)明靜態(tài)文本控件CStatic用于為其他控件顯示文本標(biāo)簽圖形控件CStatic用于顯示圖標(biāo)編輯框控件CEdit用于文本輸入的控件組框控件CComboBox將列表框和編輯框控件有機(jī)組合按鈕控件CButton用于執(zhí)行命令單選按鈕CButton用于對(duì)互相排斥的選項(xiàng)進(jìn)行選擇復(fù)選框CButton用于選擇多個(gè)獨(dú)立的選項(xiàng)水平滾動(dòng)條控件CScrollBar提供水平滾動(dòng)功能垂直滾動(dòng)條控件CScrollBar提供垂直滾動(dòng)功能列表框控件CListBox以列表的方式給用戶(hù)提供選擇6/5/202385《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》3.創(chuàng)建控件

一般情況下,利用VisualC++資源編輯器創(chuàng)建控件的步驟如下:●打開(kāi)資源編輯器,利用控件工具欄可視化地向?qū)υ?huà)框或窗口中添加所需要的控件?!駱?gòu)造對(duì)話(huà)框?qū)ο蟆!裾{(diào)用該對(duì)象的成員函數(shù)Create()或DoModal,系統(tǒng)自動(dòng)創(chuàng)建相應(yīng)控件并將其放入對(duì)話(huà)框窗口中。6/5/202386《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》12.9數(shù)據(jù)庫(kù)應(yīng)用程序

VisualC++提供了以下多種數(shù)據(jù)庫(kù)訪問(wèn)技術(shù):

●ODBC●DAO●ADO6/5/202387《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》1.ODBC技術(shù)概述

●ODBC即開(kāi)放數(shù)據(jù)庫(kù)連接?!馩DBC為各種類(lèi)型的數(shù)據(jù)庫(kù)管理系統(tǒng)提供了統(tǒng)一的編程接口,用戶(hù)可以輕松自如地在應(yīng)用程序中進(jìn)行跨數(shù)據(jù)庫(kù)的操作?!馩DBC結(jié)構(gòu)是分層管理的,ODBC包含了一組動(dòng)態(tài)鏈接庫(kù)(DLL),擁有一個(gè)獨(dú)特的DLL結(jié)構(gòu)?!馩DBC系統(tǒng)完全實(shí)現(xiàn)了模塊化,這些動(dòng)態(tài)鏈接庫(kù)提供了標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)接口,通過(guò)它可以實(shí)現(xiàn)對(duì)所有含有ODBC驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)的訪問(wèn)。6/5/202388《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》ODBC技術(shù)概述(續(xù))●MFC類(lèi)庫(kù)的CRecordset和CDatabase封裝了基于ODBC的數(shù)據(jù)庫(kù)操作?!馛Database類(lèi)的對(duì)象代表了與數(shù)據(jù)源ODBC的連接,而Crecordset類(lèi)的對(duì)象則代表了記錄集。●ODBC是基于SQL結(jié)構(gòu)化查詢(xún)語(yǔ)言而開(kāi)發(fā)的,并且它還定義了C/C++語(yǔ)言與SQL數(shù)據(jù)庫(kù)之間的接口。6/5/202389《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》●通過(guò)ODBC技術(shù),用戶(hù)在編程時(shí)不用關(guān)心數(shù)據(jù)庫(kù)的類(lèi)型以及數(shù)據(jù)的存儲(chǔ)格式,用同樣的ODBC數(shù)據(jù)庫(kù)訪問(wèn)函數(shù)就可以實(shí)現(xiàn)對(duì)各種數(shù)據(jù)庫(kù)進(jìn)行操作?!袢绻脩?hù)需要在程序中訪問(wèn)實(shí)際數(shù)據(jù),首先需要建立一個(gè)ODBC數(shù)據(jù)源,然后再通過(guò)ODBC接口對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)。ODBC技術(shù)概述(續(xù))6/5/202390《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》2.ADO技術(shù)●ADO(ActiveDataObject)即活動(dòng)數(shù)據(jù)對(duì)象,是Microsoft為數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)推出的新的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)?!馎DO實(shí)際上一種基于組件對(duì)象模型的自動(dòng)化接口技術(shù),它以對(duì)象鏈接和嵌入的數(shù)據(jù)庫(kù)(OLEDB)為基礎(chǔ),利用它可以快速的創(chuàng)建數(shù)據(jù)庫(kù)應(yīng)用程序。●利用ADO技術(shù)訪問(wèn)數(shù)據(jù)庫(kù),無(wú)需首先在Windows的ODBC數(shù)據(jù)管理器中注冊(cè)數(shù)據(jù)源,在程序設(shè)計(jì)過(guò)程中就可以完成與數(shù)據(jù)庫(kù)的連接工作。

6/5/202391《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》參加課內(nèi)外討論6/5/202392《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》本章結(jié)束6/5/202393《面向?qū)ο蟪绦蛟O(shè)計(jì)與VisualC++6.0教程》VnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7IaMdPh

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論