Visual C++ MFC 中常用宏的含義

來源:互聯網
上載者:User
   AND_CATCHAND_CATCH

  AND_CATCH(exception_class,exception _object_point_name)

  說明:

 
 定義一個代碼塊,它用於擷取廢除當前TRY塊中的附加異常類型。使用CATCH宏以獲得一個異常類型,然後使用AND_CATCH宏獲得隨後的異常處理
代碼可以訪問異常對象(若合適的話)已得到關於異常的特別原因的更多訊息。在AND_CATCH塊中調用THROW_LAST宏以便把處理過程移到下個外
部異常架構。AND_CATCH可標記CATCH或AND_CATCH塊的末尾。

  注釋:

  AND_CATCH塊被定義成為一個C++範圍(由花括弧來描述)。若使用者在此
範圍定義變數,那麼記住他們只在此範圍中可以訪問。他也用於exception_object_pointer_name變數。

  ASSERT

  ASSERT(booleanExpression)

  說明:

 
 計算變數的值。如果結構的值為0,那麼此宏便列印一個診斷訊息並且成訊運行失敗。如果條件為非0,那麼什麼也不做。 診斷訊息的形式為:
assertion failed in file in line 其中name是元檔案名稱,num是源檔案中運行失敗的中斷號。
在Release版中,ASSERT不計算運算式的值也就不中斷程式。如果必須計算此運算式的值且不管環境如何那麼用VERIFY代替ASSERT。

  注釋:

  ASSERT只能在Debug版中用

  ASSERT_VAILD

  ASSERT_VAILD(pObject)

  說明:

 
 用於檢測關於對象的內部狀態的有效性。ASSERT_VALID調用此對象的AssertValid成員函數(把它們作為自己的變數來傳遞)。在
Release版中ASSERT_VALID什麼也不做。在DEBUG版中,他檢查指標,以不同於NULL的方式進行檢查,並調用對象自己的
AssertValid成員函數。如果這些檢測中有任何一個失敗的話,那麼他會以與ASSERT相同的方法顯示一個警告的訊息。

  注釋:

  此函數只在DEBUG版中有效。

  BEGIN_MESSAGE_MAP

  BEGIN_MESSAGE_MAP(the class,baseclass)

  說明:

  使用BEGIN_MESSAGE_MAP開始使用者訊息映射的定義。在定義使用者類函數的工具(.cpp)檔案中,以BEGIN_MESSAGE_MAP宏開始訊息映射,然後為每個訊息處理函數增加宏項,接著以END_MESSAGE_MAP宏完成訊息映射。

  CATCH

  CATCH(exception_class,exception_object_pointer_name)

  說明:

 
 使用此用定義一個代碼塊,此代碼用來擷取當前TRY塊中都一個異常類型。異常處理代碼可以訪問異常對象,如何合適的話,就會得到關於異常的特殊原因的更
多訊息。調用THROW_LAST宏以把處理過程一下一個外部例外狀況架構,如果exception-class是類CExceptioon,那麼會擷取所有
異常類型。使用者可以使用CObject::IsKindOf成員函數以確定那個特別異常被排除。一種擷取異常的最好方式是使用順序的AND_CATCH語
句,每個帶一個不同的異常類型。此異常類型的指標由宏定義,使用者不必定義。

  注釋:

  此CATCH塊被定義作一個C++範圍(由花括弧描述)。如使用者在此範圍定義變數,那麼它們只在吃範圍內可以訪問。他還可以用於異常對象的指標名。

  DEBUG_NEW

  #define new DEBUG_NEW

  說明:

 
 協助尋找記憶體錯誤。使用者在程式中使用DEBUG_NEW,使用者通常使用new運算子來從堆上分配。在Debug模式下(但定義了一個DEBUG符號),
DEBUG_NEW為它分配的每個對象記錄檔案名稱和行號。然後,在使用者使用CMemoryState::DumpAllObjectSince成員函數
時,每個以DEBUG_NEW分配的對象分配的地方顯示出檔案名稱和行號。 為了使用DEBUG_NEW,應在使用者的資源檔中插入以下指令:
#define new DEBUG_NEW
一旦使用者插入本指令,預先處理程式將在使用new的地方插入DEBUG_NEW,而MFC作其餘的工作。但使用者編譯自己的程式的一個發行版時,
DEBUG_NEW便進行簡單的new操作,而且不產生檔案名稱和行號訊息。

  DECLARE_DYNAMIC

  DECLARE_DYNAMIC(class_name)

  說明:

 
 但從CObject派生一個類時,此宏增加關於一個對象類的訪問已耗用時間功能。把DECLARE_DYNAMIC宏加入類的標頭檔中,然後在全部需要訪
問詞類對象的.CPP檔案中都包含此模組。如果像所描述那樣使用DELCARE_DYNAMIC和IMPLEMENT_DYNAMIC宏,那麼使用者便可使
用RUNTIME_CLASS宏和CObject::IsKindOf函數以在已耗用時間決定對象類。如果DECLARE_DYNAMIC包含在類定義中,
那麼IMPLEMETN_DYNAMIC必須包含在類工具中。

  DECLARE_DYNCREATE

  DECLARE_DYNCREATE(class_name)

  說明:

 
 使用DECLARE_DYNCRETE宏以便允許CObject衍生類別的對象在運行時刻自動建立。主機使用此功能自動建立新對象,例如,但它在序列化過
程中從磁碟讀一個對象時,檔案及視圖和架構窗應該支援動態建立,因為架構需要自動建立它。把DECLARE_DYNCREATE宏加入類的.H檔案中,然
後在全部需要訪問此類對象的.CPP檔案中包含這一模式。如果DECLARE_DYNCREATE包含在類定義中,那麼
IMPLEMENT_DYNCREATE必須包含在類工具中。

  DECLARE_MESSAGE_MAP

  DECLARE_MESSAGE_MAP()

  說明:

 
 使用者程式中的每個CCmdTarget衍生類別必須提供訊息映射以處理訊息。在類定義的末尾使用DECLARE_MESSAGE_MAP宏。接著,在定義
類成員函數的.CPP檔案中,使用BEGIN_MESSAGE_MAP宏,每個使用者訊息處理函數的宏項下面的列表以及END_MESSAGE_MAP宏。

  注釋:

  如果在DECLARE_MESSAGE_MAP之後定義任何一個成員,那麼必須為他們指定一個新存取類型(公用的,私人的,保護的)。

  DECLARE_SERIAL

  DECLARE_SERIAL(class_name)

  說明:

 
 DECLARE_SERIAL為一個可以序列化的CObject衍生類別產生必要的C++標題代碼。序列化是把某個對象的內容從一個檔案讀出和寫入一文
件。在.H檔案中使用DECLARE_SERIAL宏,接著在需要訪問此類對象的全部.CPP檔案中包含此檔案。如果DECLARE_SERIAL包含在
類定義中,那麼IMPLEMENT_SERIAL必須包含在類工具中。DECLARE_SERIAL宏包含全部DECLARE_DYNAMIC,
IMPLEMENT_DYCREATE的功能。


  END_CATCH

  END_CATCH

  說明:

  標識最後的CATCH或AND_CATCH塊的末尾。

  END_MESSAGE_MAP

  END_MESSAGE_MAP

  說明:

  使用END_MESSAGE_MAP宏結束使用者的訊息映射定義

  IMPLEMENT_DYNAMIC

  IMPLEMENT_DYNAMIC(class_name,base_class_name)

  說明:

  通過運行時在串列結構中為動態CObject衍生類別訪問類名和位置來產生必要的C++代碼。在.CPP檔案中使用IMPLEMENT_DYNAMIC宏,接著一次連結結果對象代碼

  IMPLEMENT_DYNCREATE

  IMPLEMENT_DYNCREATE(class_name,base_class_name)

  說明:

 
 通過DECLARE_DYNCREATE宏來使用IMPLEMENT_DYNCREATE宏,以允許CObject衍生類別對象在運行時自動建立。主機使
用此功能自動建立對象,例如,但它在序列化過程中從磁碟讀去一個對象時,他在類工具裡加入IMPLEMENT_DYNCREATE宏。若使用者使用
DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏,那麼接著使用RUNTIME_CLASS宏和CObject::
IsKindOf成員函數以在運行時確定對象類。若declare_dyncreate包含在定義中,那麼IMPLEMENT_DYNCREATE必須包
含在類工具中。

  IMPLEMENT_SERIAL

  IMPLEMENT_SERIAL(class_name,base_class_name,wSchema)

  說明:

  通過運行時在串列結構中動態CObject衍生類別訪問類名和位置來建立必要的C++代碼。在.CPP檔案中使用IMPLEMENT_SERIAL宏,然後一次連結結果對象代碼。

  ON_COMMAND

  ON_COMMAND(id,memberFxn)

  說明:

 
 此宏通過ClassWizard或手工插入一個訊息映射。它表明那個函數將從一個命令使用者介面(例如一個功能表項目或toolbar按鈕)處理一個命令消
息。當一個命令對象通過指定的ID接受到一個Windows
WM_COMMAND訊息時,ON_COMMAND將調用成員函數memberFxn處理此訊息。在使用者的訊息映射中,對於每個菜單或加速器命令(必須被
映射到一個訊息處理函數)應該確實有一個ON_COMMAND宏語句。

  ON_CONTROL

  ON_CONTROL(wNotifyCode,id,memberFxn)

  說明:

  表明哪個函數將處理一個常規控製表示訊息。控制標識訊息是那些從一個控制夫發送到母視窗的訊息。

  ON_MESSAGE

  ON_MESSAGE(message,memberFxn)

  說明:

 
 指明哪個函數將處理一使用者定義訊息。使用者定義訊息通常定義在WM_USER到0x7FF範圍內。使用者定義訊息是那些不是標準Windows
WM_MESSAGE訊息的任何訊息。在使用者的訊息映射中,每個必須被映射到一個訊息處理函數。使用者定義訊息應該有一個ON_MESSAGE宏語句。

  ON_REGISTERED_MESSAGE

  ON_REGISTERED_MESSAGE(nmessageVarible,memberFxn)

  說明:

  Windows的RegisterWindowsMesage函數用於定義一個新視窗訊息,此訊息保證在整個系統中是唯一的。此宏表明哪個函數處理登入訊息。變數nMessageViable應以NEAR修飾符來定義。

  ON_UPDATE_COMMAND_UI

  ON_UPDATE_COMMAND_UI(id,memberFxn)

  說明:

  此宏通常通過ClassWizard被插入一個訊息映射,以指明哪個函數將處理一個使用者介面個更改命令訊息。在使用者的訊息映射中,每個使用者介面更改命令(比訊被映射到一個訊息處理函數)應該有一個ON_UPDATE_COMMAND_UI宏語句。

  ON_VBXEVENT

  ON_VBXEVENT(wNotifyCode,memberFxn)

  說明:

  此宏通常通過ClassWizard被插入一個訊息映射,以指明哪個函數將處理一個來自VBX控制的訊息。在使用者的訊息映射中每個被映射到一訊息處理函數的VBX控制訊息應該有一個宏語句。

  RUNTIME_CLASS

  RUNTIME_CLASS(class_name)

  說明:

 
 使用此宏從c++類民眾擷取運行時類結構。RUNTIME_CLASS為由class_name指定的類返回一個指標到CRuntimeClass結
構。只有以DECLARE_DYNAMIC,DECLARE_DYNCREATE或DECLARE_SERIAL定義的CObject衍生類別才返回到一個
CRuntimeClass結構的指標。

  THROW

  THROW(exception_object_pointer)

  說明:

  派出指定的異常。THROW中斷程式的運行,把控制傳遞給使用者程式中的相關的CATCH塊。如果使用者沒有提供CATCH塊,那麼控制被傳遞到一個MFC模組,他列印出一個錯誤並終止運行。

  THROW_LAST

  THROW_LAST()

  說明:

  此宏允許使用者派出一個局部建立的異常。如果使用者試圖排除一個剛發現的異常,那麼一般此異常將溢出並被刪除。使用THROW_LAST,此異常被直接傳送到下一個CATCH處理常式。

  TRACE

  TRACE(exp)

  說明:

 
 把一個格式化字串送到傾印裝置,例如,檔案或調試監視器,而提供與printf相似的功能。同MS_DOS下C程式的printf一樣,TRACE宏
是一個在程式運行時跟蹤變數值的方便形式。在DEBUG環境中,TRACE宏輸出到afxDump。在Release版中他不做任何工作。

  注釋:

  此宏只在MFC的DEBUG版中有效。

  TRACE0

  TRACE0(exp)

  說明:

 
 與TRACE相似,但他把跟蹤字串放在程式碼片段中,而不是DGROUP,因此使用少的DGROUP空間。TRACE0是一組跟蹤宏的一個變體,這些宏可
用於調試輸出。這一組包括TRACE0,TRACE1,TRACE2和TRACE3,這些宏不同在於所取參數的數目不同。TRACE0隻取一個格式化字元
串並可用於簡單簡訊。TRACE1取一格式化字串加上一個變數——一個將轉儲的變數。同樣,TRACE2,TRACE3分別取2個或3個參數(在格
式化字串之後)。如果使用者以便以了應用程式的發行版,那麼它只把資料轉儲到afxDump。

  注釋:

  此宏只在MFC的DEBUG中有效。

  TRACE1

  TRACE1(exp,param1)

  說明:

  參見TRACE0

  TRACE2

  TRACE2(exp,param1,param2)

  說明:

  參見TRACE0

  TRACE3

  TRACE3(exp,param1,param2,param3)

  說明:

  TRY

  TRY

  說明:

  使用此宏建立一TRY塊。一個TRY識別一個可排除異常的代碼塊。這些異常在隨後的CATCH和AND_CATCH塊處理。傳遞是允許的:異常可以傳遞一個外部TRY塊,或者忽略它們或者使用THROW_LAST宏。

  VERIFY

  VERIFY(booleanExpression)

  說明:

 
 在MFC的DEBUG版中,VERIFY宏計算它的變數值。
如果結果為0,那麼宏列印一個診斷訊息並中止程式。如果條件不為0,那麼什麼工作也不作。 診斷有如下形式: assertion failed in
file in line
其中name是源檔案的名字,num是在源檔案中失敗的中止行號。在MFC的Release版中,VERIFY計算運算式值但不列印或中止程式。例如:如
果運算式是個函數調用,那麼調用成功。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.