MFC编程基础
MFC編程基礎(chǔ)
一、MFC類(lèi)庫(kù)概述
MFC(Microsoft Foundation class)微軟基本類(lèi)(庫(kù)),有時(shí)候也有人叫做微軟基本類(lèi)庫(kù),因?yàn)樗_實(shí)是一個(gè)類(lèi)庫(kù)(物理上講),而且非常龐大;它也是一個(gè)面向?qū)ο蟮膽?yīng)用程序架構(gòu)(邏輯上),程序員利用它可以很方便搭建應(yīng)用程序框架。MFC結(jié)合了面向?qū)ο蟮木幊碳夹g(shù)和WINDOWS消息驅(qū)動(dòng)的編程技術(shù),并封裝了WIN32API,其設(shè)計(jì)好處:消除了WIN32API的復(fù)雜性,封裝了WIN32API,統(tǒng)一了程序的概念,而且可擴(kuò)展。MFC由AFX項(xiàng)目小組進(jìn)化而來(lái),還有一些AFX代碼,如AfxMessageBox,AFxGetApp等。編寫(xiě)MFC類(lèi)庫(kù)的主要目的是為了軟件的復(fù)用。
查閱MSDN,簡(jiǎn)單介紹CString類(lèi)。
三、MFC基礎(chǔ)類(lèi)簡(jiǎn)介
MFC框架圖(太大,略,見(jiàn)MSDN)
1. 根類(lèi):CObject類(lèi)
是大多數(shù)MFC中大多數(shù)類(lèi)和用戶(hù)自定義類(lèi)的根類(lèi),為程序員提供了進(jìn)入所編寫(xiě)程序的許多公用操作如:對(duì)象的建立和刪除,序列化支持,對(duì)象的診斷輸出等。
2. 應(yīng)用程序結(jié)構(gòu)類(lèi):
命令發(fā)送類(lèi)(CCmdTarget):該類(lèi)是CObject類(lèi)的子類(lèi),是MFC中具有消息映射屬性類(lèi)的基類(lèi)。當(dāng)對(duì)象接收到消息以后,消息映射調(diào)用相關(guān)聯(lián)的函數(shù)對(duì)消息進(jìn)行處理。從他派生的類(lèi)有:窗口類(lèi)(CWnd)、應(yīng)用程序類(lèi)(CWinApp)、文檔類(lèi)(CDoc)、視圖類(lèi)(CView)以及框架窗口類(lèi)(CFrameWnd)。
窗口應(yīng)用程序類(lèi)(CWinApp):每個(gè)應(yīng)用程序只有一個(gè)應(yīng)用程序?qū)ο螅谶\(yùn)行程序中該對(duì)象和其他對(duì)象相互協(xié)調(diào)。
文檔/視圖類(lèi):文檔對(duì)象由文檔模板創(chuàng)建,管理應(yīng)用程序的數(shù)據(jù)。視窗對(duì)象表示一個(gè)窗口的客戶(hù)區(qū),顯示文檔數(shù)據(jù)并允許用戶(hù)與之交互。
文檔模板類(lèi)(CDocTemplate):文檔模板協(xié)調(diào)文檔、視圖和框架窗口的創(chuàng)建。
線程支持類(lèi)(CWinThread):所有線程的基類(lèi),可直接使用。應(yīng)用程序類(lèi)(CWinApp)就是由他派生來(lái)的。
3. 可視對(duì)象類(lèi)
窗口類(lèi)(CWnd):提供了MFC所有窗口類(lèi)的基本功能。創(chuàng)建窗口要分兩部分進(jìn)行:首先引入構(gòu)造函數(shù),構(gòu)造一個(gè)CWnd對(duì)象;調(diào)用Create函數(shù)建立Windows窗口并將它連接到CWnd對(duì)象上。由他派生的子類(lèi)有:框架窗口類(lèi):SDI應(yīng)用程序主框架的基類(lèi)、多文檔框架窗口類(lèi)(CMDIFrameWnd):MDI應(yīng)用程序主框架的基類(lèi)、多文檔子對(duì)象類(lèi)(CMDIChildWnd):MDI應(yīng)用程序框架的基類(lèi)。
視圖類(lèi)(CView):管理框架窗口客戶(hù)區(qū)和顯示文檔數(shù)據(jù)并接收輸入的客戶(hù)區(qū)。由他派生的子類(lèi)有:CScrollView類(lèi):具有滾動(dòng)功能的視圖類(lèi)、 CFormView類(lèi) :在對(duì)話(huà)資源中定義的滾動(dòng)視圖類(lèi)、CEditView 類(lèi):具有文本編輯,查找,替換和滾動(dòng)功能的視圖類(lèi)、CListView類(lèi):包含Windows列表控件的視圖類(lèi)、 CTreeView類(lèi):包含樹(shù)形察看控件的視圖類(lèi)。
菜單類(lèi)(CMenu):Cobject的子類(lèi),用于管理菜單。
對(duì)話(huà)框類(lèi)(CDialog):因?yàn)閷?duì)話(huà)框是一個(gè)特殊的窗口,所以該類(lèi)是從CWnd的派生類(lèi)。由他派生出來(lái)的子類(lèi)有:CFileDialog類(lèi):提供打開(kāi)或保存一個(gè)文件所使用的對(duì)話(huà)框;CColorDialog 類(lèi):提供選擇顏色的標(biāo)準(zhǔn)對(duì)話(huà)框;CFontDialog類(lèi):同樣,它是用來(lái)提供選擇一種字體的標(biāo)準(zhǔn)對(duì)話(huà)框;CPrintDialog 類(lèi):提供打印一個(gè)文件的標(biāo)準(zhǔn)對(duì)話(huà)框;CFindReplaceDialog類(lèi):提供查找或替換的標(biāo)準(zhǔn)對(duì)話(huà)框;
4. 控件類(lèi)
包括如下類(lèi),使用這些類(lèi)可建立靜態(tài)文本、命令按鈕、位圖按鈕、列表框等。
CStatic類(lèi):靜態(tài)文本空間窗口,用于標(biāo)注、分隔對(duì)話(huà)框和窗口中的其他控件;
CButton類(lèi):按鈕空間窗口,為對(duì)話(huà)框或窗口中的按鈕、檢查框或者單選框提供接口;
CEdit類(lèi):文本編輯對(duì)話(huà)窗口,用于接受用戶(hù)的文本輸入;
CScrollBar類(lèi):滾動(dòng)條控件窗口,提供控制條的功能,用于對(duì)話(huà)框或窗口中的一個(gè)控件,通過(guò)它實(shí)現(xiàn)在一定范圍內(nèi)定位;
CRichEditCtrl類(lèi):多信息編輯控件;
CProgressCtrl類(lèi):進(jìn)程指示控件窗口;
CCombBox類(lèi):組合框,由一個(gè)文本編輯控件和一個(gè)列表框組成;
CBitmapButton類(lèi):帶有位圖而非文字標(biāo)題的按鈕;
CSpinButtonCtrl類(lèi):帶有雙箭頭按鈕,點(diǎn)擊某個(gè)箭頭用于增大或減小某個(gè)值;
CAnimateCtrl類(lèi):動(dòng)畫(huà)顯示,用于顯示簡(jiǎn)單的video圖像;
CToolTip類(lèi):一個(gè)小的彈出式窗口,用于提示應(yīng)用程序中某個(gè)工具的作用;
CHotKeyCtrl類(lèi):使用戶(hù)創(chuàng)建一熱鍵,迅速地執(zhí)行某項(xiàng)操作;
CTreeCtrl類(lèi):樹(shù)形察看控件;
CListCtrl類(lèi):管理由圖標(biāo)和標(biāo)簽組成的列表項(xiàng);
CHeaderCtrl類(lèi):顯示列標(biāo)題或標(biāo)簽。
5. 控件條類(lèi)
指的是連接在主窗口框架頂部或底部的小窗口。他有以下相關(guān)的派生類(lèi):
CStatusBar類(lèi):狀態(tài)條控件窗口的基類(lèi);
CToolBar類(lèi):包含非基于HWND的位圖式命令按鈕的工具條控件窗口;
CDialogBar類(lèi):控制條形式的非模式對(duì)話(huà)框。
6. 繪圖工具類(lèi)CDdiObject
包括一下派生類(lèi):
CBitmap類(lèi):封裝一個(gè)GDI位圖,提供操作位圖的接口;
CBrush類(lèi):封裝一個(gè)GDI畫(huà)刷,可被選擇為設(shè)備描述表的當(dāng)前畫(huà)刷;
CFont類(lèi):封裝一個(gè)GDI字體,可被設(shè)備描述表的當(dāng)前字體;
CPalate類(lèi):封裝一個(gè)GDI調(diào)色板,可被設(shè)備描述表的當(dāng)前調(diào)色表;
CPen類(lèi):封裝一個(gè)GDI畫(huà)筆,可被設(shè)備描述表的當(dāng)前畫(huà)筆;
7. 設(shè)備情景對(duì)象類(lèi)CDC
是Cobject類(lèi)的子類(lèi),和它的派生類(lèi)支持設(shè)備情景對(duì)象。它的子類(lèi)有:
CPaintDC類(lèi):設(shè)備情景對(duì)象類(lèi);
CClientDC類(lèi):窗口客戶(hù)區(qū)設(shè)備情景對(duì)象類(lèi),如響應(yīng)鼠標(biāo)點(diǎn)擊進(jìn)行繪圖等;
CWindowsDC類(lèi):整個(gè)窗口的設(shè)備情景對(duì)象類(lèi);
CMetaFileDC類(lèi):元文件設(shè)備情景對(duì)象類(lèi)。
8. 數(shù)據(jù)類(lèi)型類(lèi)
CString類(lèi):字符串類(lèi);
CTime類(lèi):存放絕對(duì)日期時(shí)間類(lèi);
COleDateTime類(lèi):封裝OLE自動(dòng)化中使用的DATE數(shù)據(jù)類(lèi)型,包含日期和時(shí)間;
CPoint類(lèi):存放坐標(biāo)(x,y);
CSize類(lèi):存放距離或者相對(duì)位置;
CRect類(lèi):存放矩形區(qū)域的坐標(biāo),類(lèi)似與windows的RECT;
9. 通用類(lèi)
文件輸入/輸出類(lèi):CFile類(lèi)和CArchive類(lèi)
CFile類(lèi):提供訪問(wèn)磁盤(pán)二進(jìn)制文件的接口;
CMemFile類(lèi):提供訪問(wèn)內(nèi)存文件的接口;
CStudioFile類(lèi):提供訪問(wèn)緩存磁盤(pán)文件的接口;
CArchive類(lèi):與CFile類(lèi)一起通過(guò)序列化實(shí)現(xiàn)對(duì)象的永久存儲(chǔ);
10. 模板集合類(lèi)
CArray類(lèi):提供任意的類(lèi)型數(shù)組的模板類(lèi);
CList類(lèi):任意類(lèi)型的列表模板類(lèi);
CMap類(lèi):映射任意關(guān)系類(lèi)型的模板類(lèi);
CTypedPtrList類(lèi):負(fù)責(zé)將對(duì)象指針存入列表中;
CTypedPtrArray類(lèi):負(fù)責(zé)將對(duì)象指針存入數(shù)組中;
11. 異常類(lèi)
是所有異常子類(lèi)的基類(lèi)。派生類(lèi)有:
CArchiveException類(lèi):表示文檔序列化異常;
CFileException類(lèi):有關(guān)文件的異常;
CMemException類(lèi):內(nèi)存不足產(chǎn)生的異常;
CNotSupportedException類(lèi):使用不支持特性產(chǎn)生的異常;
CUseException類(lèi):停止用戶(hù)初始化操作的異常;
COleException類(lèi):表示于OLE有關(guān)的異常;
12. 調(diào)試支持類(lèi)
CDumpContext類(lèi):提供診斷轉(zhuǎn)儲(chǔ)(diagnostic dump)目標(biāo);
CMemoryState類(lèi):表示內(nèi)存的使用狀態(tài)。
13. ODBC數(shù)據(jù)庫(kù)類(lèi)
包括以下子類(lèi):
CDatabase類(lèi):封裝與數(shù)據(jù)源的鏈接,通過(guò)此鏈接應(yīng)用程序可以在數(shù)據(jù)源上進(jìn)行操作;
CRecordSet類(lèi):封裝一組從數(shù)據(jù)源選出的記錄集;
CRecordView類(lèi):提供直接鏈接記錄集對(duì)象的格式視圖;
14. OLE類(lèi)
九個(gè)類(lèi)組成層次結(jié)構(gòu)分為三類(lèi)
a、 OLE容器類(lèi)
COleDocument類(lèi):用于實(shí)現(xiàn)復(fù)合文檔,是容器文檔的基類(lèi);
COleItem類(lèi):文檔項(xiàng)的基類(lèi);
COleException類(lèi):表示與OLE操作有關(guān)的異常情況;
COleClientDoc類(lèi)和COleClientItem類(lèi)為支持OLE的客戶(hù)類(lèi)。
b、 OLE服務(wù)器類(lèi)
COleServerDoc類(lèi):服務(wù)器應(yīng)用程序文檔類(lèi)基類(lèi);
COleServerItem類(lèi):表示與COleServerDoc類(lèi)的接口;
COleTemplateServer類(lèi):創(chuàng)建由OLE可視編輯服務(wù)器、自動(dòng)化服務(wù)器和鏈接容器使用的文檔。
c、 ActiveX控件類(lèi)
COleControlModule類(lèi):用于開(kāi)發(fā)ActiveX控件模塊對(duì)象,提供成員函數(shù)來(lái)初始化ActiveX控件模塊;
COleControl類(lèi):用于開(kāi)發(fā)ActiveX控件;
CConnectionPoint類(lèi):用于定義與其它ActiveX對(duì)象通信的接口類(lèi)型。
MFC的這些類(lèi)本質(zhì)上都是對(duì)Win32對(duì)象的封裝,很多Win32對(duì)象都有對(duì)應(yīng)的MFC類(lèi)與之對(duì)應(yīng)。如:
|
Win32對(duì)象 |
MFC類(lèi) |
Win32對(duì)象 |
MFC類(lèi) |
|
|
HWND |
CWnd |
HBRUSH |
CBrush |
|
|
RECT |
CRect |
HPEN |
CPen |
|
|
POINT |
CPoint |
HFONT |
CFont |
|
|
SIZE |
CSize |
HBITMAP |
CBitmap |
|
可以使用FromHandle函數(shù)將一個(gè)Win32對(duì)象轉(zhuǎn)換成MFC類(lèi)對(duì)象。如:
static CWnd* PASCAL CWnd ::FromHandle( HWND hWnd );
static CDC* PASCAL CDC ::FromHandle( HDC hDC );
static CBrush* PASCAL CBrush::FromHandle( HBRUSH hBrush );
static CFont* PASCAL CFont::FromHandle(HFONT hFont);
Windows資源
凡是提供給Windows應(yīng)用程序運(yùn)行時(shí),所使用到的東西統(tǒng)稱(chēng)為資源。包括加速鍵、位圖、光標(biāo)、對(duì)話(huà)框、圖標(biāo)、菜單、字符串等等。在VC編寫(xiě)相關(guān)Windows應(yīng)用程序的時(shí)候在資源文件(Resource File)中都要對(duì)他們進(jìn)行編輯,定義。
以下對(duì)四種比較常用的資源添加、使用舉例說(shuō)明:
1、 加速鍵資源:也叫快捷鍵。方便用戶(hù)進(jìn)行比較常見(jiàn)的應(yīng)用程序操作。應(yīng)用程序在進(jìn)入消息循環(huán)之前調(diào)用LoadAccelerator(hInstance,(LPCTSTR)strTablename)加載加速鍵表(簡(jiǎn)單的進(jìn)行翻譯:某組合鍵在該應(yīng)用程序中代表什么含義。)TranslateAccelerator(msg.hwnd, hAccelTable, &msg)
其中的ID代表某一個(gè)菜單的資源ID號(hào),Key代表用戶(hù)自定義的組合鍵:Ctrl+?,Alt+?等。
2、 字符串資源:應(yīng)用程序所使用到的字符串標(biāo)識(shí)符,如對(duì)話(huà)框標(biāo)題,提示給用戶(hù)的文本信息等等。使用方法:在字符串表(String Table)中定義相應(yīng)的字符串資源,可以使用程序員需要的任何序言,在需要用到的時(shí)候使用LoadString加載他們既可。
3、 菜單資源:應(yīng)用程序提供給用戶(hù)主要功能的體現(xiàn),也是應(yīng)用程序窗口的重要組成部分。程序設(shè)計(jì)者可以根據(jù)需要進(jìn)行訂制。使用方法:使用VC界面Resouce File界面中Menu項(xiàng),進(jìn)行菜單編輯并添加菜單處理函數(shù)。
4、 圖標(biāo)資源:代表應(yīng)用程序的位圖,可以進(jìn)行繪制,在窗口的注冊(cè)函數(shù)中進(jìn)行加載。
5、 對(duì)話(huà)框資源:特殊的窗口,放置控件等基本元素,方便用戶(hù)和應(yīng)用程序進(jìn)行交互。使用方法:添加對(duì)話(huà)框,放置控件以及編寫(xiě)相關(guān)控件功能處理函數(shù)。
總結(jié)
- 上一篇: 网页中的flash动画怎样下载?网页fl
- 下一篇: 和硕董事长:下半年不会再受到过多库存的影