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