1.MFC宏概述以及常用宏及作用
MFC宏是MFC類庫的一個(gè)重要組成部分。在MFC應(yīng)用程序中經(jīng)常出現(xiàn)。根據(jù)用途,大致辭可分為消息映射宏,運(yùn)行時(shí)類型識別宏,調(diào)試宏和異常處理宏等。
MFC中常用宏及其作用如下:
名稱 功能
RUNTIME_CLASS 獲得運(yùn)行時(shí)類的CRuntimeClass結(jié)構(gòu)指針 RUNTIME_CLASS( class_name )
DECLARE_DYNAMIC 提供基本的運(yùn)行時(shí)類型識別(聲明) DECLARE_DYNAMIC( class_name )
IMPLEMENT_DYNAMIC 提供基本的運(yùn)行時(shí)類型識別(實(shí)現(xiàn)) IMPLEMENT_DYNAMIC (class_name, base_class_name )
DECLARE_DYNCREATE 動態(tài)創(chuàng)建(聲明) DECLARE_DYNCREATE( class_name )
IMPLEMENT_DYNCREATE 動態(tài)創(chuàng)建(實(shí)現(xiàn)) IMPLEMENT_DYNCREATE( class_name,base_class_name )
DECLARE_SERIAL 對象序列化(聲明) DECLARE_SERIAL( class_name )
IMPLEMENT_SERIAL 對象序列化(實(shí)現(xiàn))IMPLEMENT_SERIAL(class_name,base_class_name,wSchema)
DECLARE_MESSAGE_MAP 聲明消息映射表 DECLARE_MESSAGE_MAP()
BEGIN_MESSAGE_MAP 開始建立消息映射表 BEGIN_MESSAGE_MAP( theClass, baseClass )
END_MESSAGE_MAP 結(jié)構(gòu)建立消息映射表 END_MESSAGE_MAP()
ON_COMMAND 命令消息映射宏
ON_MESSAGE 自定義消息映射宏
ON_WM_... MFC預(yù)定義消息映射宏
ON_BN_...,ON_EN_...等 控件通知消息映射宏
2.部分宏說明:
a.RUNTIME_CLASS宏使程序能實(shí)時(shí)創(chuàng)建類的實(shí)例。為了讓這個(gè)宏起作用,定義的類必須從CObject類派生而來,并且在派生類的定義中必須使用宏DECLARE_DYNAMIC,DECLARE_DYNCREATE或DECLARE_SERIAL,在派生類的實(shí)現(xiàn)文件中必須使用宏IMPLEMENT_DYNAMIC,IMPLEMENT_DYNCREATE或IMPLEMENT_SERIAL。
b.DECLARE_DYNAMIC只能使CObject派生類對象具有基本的類型識別功能,可以通過CObject::IsKindOf(ClassName)測試對象與給定類ClassName的關(guān)系。
c.DECLARE_DYNCREATE包括了DECLARE_DYNAMIC的功能。DECLARE_SERIAL包括了DECLARE_DYNAMIC和 DECLARE_DYNCREATE的功能。
3.MFC調(diào)試宏
a.跟蹤宏:TRACE(<表達(dá)式>)
b.斷言宏:ASSERT(<表達(dá)式>)
當(dāng)ASSERT宏的參數(shù)不為真時(shí),暫停程序的執(zhí)行。Examda提示:如果表達(dá)式的值為真,則不做任何事情。如果參數(shù)為假時(shí),則暫停程序的執(zhí)行并彈出一個(gè)對話框,告訴用戶程序暫停運(yùn)行的行以及所在文件信息。用戶可以根據(jù)情況選擇終止程序運(yùn)行,調(diào)試程序或繼續(xù)運(yùn)行。
c.斷言有效宏 ASSERT_VALID ASSERT_VALID(<指針>)
該宏用于檢查指針和對象的用效性。對于一般指針,只檢查指針是否為空。對于MFC對象指針,Examda提示:還調(diào)用CObject::AssertValid()成員含數(shù)判斷對象是否合法。
ASSERT_VALID與ASSERT類似,也是使用對話框提示用戶指針或?qū)ο笫菬o效的。如果對象有效,則不做任何事情.
MFC宏是MFC類庫的一個(gè)重要組成部分。在MFC應(yīng)用程序中經(jīng)常出現(xiàn)。根據(jù)用途,大致辭可分為消息映射宏,運(yùn)行時(shí)類型識別宏,調(diào)試宏和異常處理宏等。
MFC中常用宏及其作用如下:
名稱 功能
RUNTIME_CLASS 獲得運(yùn)行時(shí)類的CRuntimeClass結(jié)構(gòu)指針 RUNTIME_CLASS( class_name )
DECLARE_DYNAMIC 提供基本的運(yùn)行時(shí)類型識別(聲明) DECLARE_DYNAMIC( class_name )
IMPLEMENT_DYNAMIC 提供基本的運(yùn)行時(shí)類型識別(實(shí)現(xiàn)) IMPLEMENT_DYNAMIC (class_name, base_class_name )
DECLARE_DYNCREATE 動態(tài)創(chuàng)建(聲明) DECLARE_DYNCREATE( class_name )
IMPLEMENT_DYNCREATE 動態(tài)創(chuàng)建(實(shí)現(xiàn)) IMPLEMENT_DYNCREATE( class_name,base_class_name )
DECLARE_SERIAL 對象序列化(聲明) DECLARE_SERIAL( class_name )
IMPLEMENT_SERIAL 對象序列化(實(shí)現(xiàn))IMPLEMENT_SERIAL(class_name,base_class_name,wSchema)
DECLARE_MESSAGE_MAP 聲明消息映射表 DECLARE_MESSAGE_MAP()
BEGIN_MESSAGE_MAP 開始建立消息映射表 BEGIN_MESSAGE_MAP( theClass, baseClass )
END_MESSAGE_MAP 結(jié)構(gòu)建立消息映射表 END_MESSAGE_MAP()
ON_COMMAND 命令消息映射宏
ON_MESSAGE 自定義消息映射宏
ON_WM_... MFC預(yù)定義消息映射宏
ON_BN_...,ON_EN_...等 控件通知消息映射宏
2.部分宏說明:
a.RUNTIME_CLASS宏使程序能實(shí)時(shí)創(chuàng)建類的實(shí)例。為了讓這個(gè)宏起作用,定義的類必須從CObject類派生而來,并且在派生類的定義中必須使用宏DECLARE_DYNAMIC,DECLARE_DYNCREATE或DECLARE_SERIAL,在派生類的實(shí)現(xiàn)文件中必須使用宏IMPLEMENT_DYNAMIC,IMPLEMENT_DYNCREATE或IMPLEMENT_SERIAL。
b.DECLARE_DYNAMIC只能使CObject派生類對象具有基本的類型識別功能,可以通過CObject::IsKindOf(ClassName)測試對象與給定類ClassName的關(guān)系。
c.DECLARE_DYNCREATE包括了DECLARE_DYNAMIC的功能。DECLARE_SERIAL包括了DECLARE_DYNAMIC和 DECLARE_DYNCREATE的功能。
3.MFC調(diào)試宏
a.跟蹤宏:TRACE(<表達(dá)式>)
b.斷言宏:ASSERT(<表達(dá)式>)
當(dāng)ASSERT宏的參數(shù)不為真時(shí),暫停程序的執(zhí)行。Examda提示:如果表達(dá)式的值為真,則不做任何事情。如果參數(shù)為假時(shí),則暫停程序的執(zhí)行并彈出一個(gè)對話框,告訴用戶程序暫停運(yùn)行的行以及所在文件信息。用戶可以根據(jù)情況選擇終止程序運(yùn)行,調(diào)試程序或繼續(xù)運(yùn)行。
c.斷言有效宏 ASSERT_VALID ASSERT_VALID(<指針>)
該宏用于檢查指針和對象的用效性。對于一般指針,只檢查指針是否為空。對于MFC對象指針,Examda提示:還調(diào)用CObject::AssertValid()成員含數(shù)判斷對象是否合法。
ASSERT_VALID與ASSERT類似,也是使用對話框提示用戶指針或?qū)ο笫菬o效的。如果對象有效,則不做任何事情.