MFC知識點(DDX_Control 與 DDX_Text ,ON_COMMAND和ON_MESSAGE)


1.DDX_Control 與 DDX_Text 區別

DDX_TEXT()的作用可以理解為把字符串變量和控件的文本(WindowText)關聯起來, 
DDX_Control()
的作用可以理解為把變量和控件本身關聯起來, 
DoDataExchange(pDX)
就是處理所有變量與其關聯控件交換數據的函數。

void CView::DoDataExchange(CDataExchange* pDX)

CFormView::DoDataExchange(pDX);
DDX_Text(pDX, IDC_ID_VALUE, m_strID);
DDX_Control(pDX, IDC_ID_VALUE, m_editID);

在程序中
通過update(TRUE)取得控件上的值到m_strID,處理修改后通過update(FALSE)傳回控件,界面顯示
通過m_editID.GetWindText(str),取得值,處理后,通過m_editID.SetWindText(str)傳回控件界面顯示

2.MFC BEGIN_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CpassApp, CWinApp)
    ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()

這些都是宏定義,不是函數。 
在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之間添加你的消息響應函數,為每個消息處理函數加入一個入口

BEGIN_MESSAGE_MAP( theClass, baseClass )

參數:

theClass 指定消息映射所屬的類的名字。
baseClass 指定theClass的基類的名字。


說明:
使用BEGIN_MESSAGE_MAP宏開始你的消息映射的定義。
在你的類的成員函數的實現文件(.CPP)中,使用BEGIN_MESSAGE_MAP宏開始消息映射,然后為每個消息處理函數加入一個入口,最后用END_MESSAGE_MAP宏結束消息映射。

每個消息映射入口的格式如下:
  ON_Notification(id, memberFxn)
  其中id指定了發送通知的控件的子窗口的ID,而memberFxn指定了處理該通知的父對象中的成員函數名。
  父對象的函數原型格式如下:
  afx_msg void memberFxn( );

  可能的消息映射入口如下:

 

映射入口 何時向父對象發送消息
ON_BN_CLICKED   用戶單擊按鈕時
ON_BN_DOUBLECLICKED 用戶雙擊按鈕時

3.ON_COMMAND和ON_MESSAGE的區別

      在MFC應用程序中傳輸的消息有三種類型:窗口消息、命令消息和控件通知。
窗口消息(Window Message)
一般與窗口的內部運作有關,如創建窗口、繪制窗口和銷毀窗口等。通常,消息是從系統發送到窗口,或從窗口發送到窗口。若需要窗口消息的完全的列表,請參考MFC文檔。
命令消息
命令消息一般與處理用戶請求相關,當用戶單擊一個菜單項或工具欄時,命令消息產生,並被發送到能處理該請求的類對象(如,裝載文件、編輯文本和保存選項等)。
控件通知
通常,控件通知在某些重要事件發生時,由控件窗口發送到父窗口,如打開一個組合框。控件通知為父窗口進一步控制子窗口提供了機會。例如,打開一個組合框時,父窗口可以用組合框初建時得不到的消息填充它。
      ON_COMMAND 和ON_MESSAGE都是將消息處理函數加入消息路由表中,但是ON_COMMAND對應的消息ID一直都是WM_COMMAND,而ON_MESSAGE的消息ID為ON_COMMAND的第一個參數
在MFC中,ON_COMMAND, ON_MESSAGE, ON_NOTIFY它們的區別。
ON_NOTIFY是控件向其父窗口發送消息處理的宏,ON_COMMAND是菜單和工具欄項處理消息的宏,ON_MESSAGE是處理自定義消息的宏
ON_COMMAND用來處理WM_COMMAND消息。老式的windows控件發送WM_COMMAND作為對父窗口的通知消息。另外,菜單,工具欄也向框架窗口發送WM_COMMAND消息。
ON_MESSAGE主要用來處理用戶自定義消息。
對於某些新型的windows控件(如ListCtrl等),向父窗口發送通知消息時需要包含大量的信息,WM_COMMAND已不適應這種要求(因為WM_COMMAND的wparam和lparam都已經填滿了),ON_NOTIFY主要用來處理這些新型的windows控件向父窗口的發送的WM_NOTIFY通知消息。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM