共用方式為


訊息對應範圍的處理常式

本文說明如何將訊息範圍加入至單一訊息處理常式 (Message Handler) 函式 (而不是只有一個函式的對應訊息)。

這是當您需要類似處理多個訊息或控制項告知的時間。 在這種情況下,您可能想要將所有訊息傳送至單一處理常式函式。 訊息對應範圍可讓您執行此訊息的連續範圍的:

  • 您可以將命令 ID 的範圍:

    • 命令處理常式函式。

    • 更新命令處理常式函式。

  • 您可以將控制項 ID 的範圍的控制項告知訊息至訊息處理常式函式。

在此文件中包含的主題:

  • 將訊息對應項目

  • 宣告處理常式函式。

  • 命令 ID 的範圍的範例

  • 控制 ID 的範圍的範例

將訊息對應項目

如下列範例所示,在 .CPP 檔案中,加入您的訊息對應項目,如下所示:

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

訊息對應項目包括下列項目:

  • 訊息對應範圍巨集:

  • 對巨集的參數:

    前兩個巨集採用三個參數:

    • 開始這個範圍的命令 ID。

    • 結束這個範圍的命令 ID。

    • 訊息處理常式函式的名稱。

    命令 ID 的範圍必須是連續的。

    第三個巨集,則為 ON_CONTROL_RANGE,並將額外的第一個參數:一個控制項通知訊息,例如 EN_CHANGE

宣告處理常式函式。

將事件處理常式函式宣告。H 檔案。 下列程式碼顯示這項處理的樣子,如下所示:

public:
   afx_msg void OnDoSomething(UINT nID);

單一命令的處理常式函式通常沒有參數。 除了更新處理函式外,訊息對應範圍的處理函式需要額外的參數,則為 nID,型別 UINT。 這個參數是第一個參數。 額外的參數符合必要的額外的命令 ID 指定命令使用者實際選取。

如需更新處理函式的參數要求的詳細資訊,請參閱 命令 ID 的範圍的範例。

命令 ID 的範圍的範例

時可以使用範圍? 一個例子像在縮放命令的處理順序 MFC HIERSVR範例。 這個命令縮放檢視, VSPackage 會在 25% 和 300% 其正常大小之間。 HIERSVR 的檢視類別使用一個範圍處理與類似於的訊息對應項目的縮放命令:

ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)

當您將訊息對應項目時,您指定:

  • 兩個命令 ID、開始和結束連續範圍。

    在此處其 ID_VIEW_ZOOM25 和 ID_VIEW_ZOOM300。

  • 命令行的處理常式函式名稱。

    在此處為 OnZoom。

函式宣告將如下列所示:

public:
   afx_msg void OnZoom(UINT nID);

表示更新處理函式多個類似和可能很有用。 它相當常見適用於許多命令寫入 ON_UPDATE_COMMAND_UI 處理常式和找到自己文字,或複製,相同多次程式碼。 解決方案是將命令 ID 的範圍為更新處理函式使用 ON_UPDATE_COMMAND_UI_RANGE 巨集。 命令 ID 必須形成連續範圍。 如需範例,請參閱 OnUpdateZoom 處理常式及其 ON_UPDATE_COMMAND_UI_RANGE 訊息對應項目在 HIERSVR 範例的檢視類別。

更新單一命令的處理常式函式通常會採用單一參數,則為 pCmdUI,型別 CCmdUI*。 不同於處理常式函式,更新訊息對應範圍的處理函式不需要額外的參數,則為 nID,型別 UINT。 命令 ID,需要指定命令使用者實際選取,在 CCmdUI 中找到物件。

控制 ID 的範圍的範例

另一個有趣的大小寫對應控制項 ID 的範圍的控制項告知訊息給單一處理常式。 假設使用者可以按一下 10 個按鈕中的任一個。 將所有 10 個按鈕加入至處理常式,您的訊息對應項目如下所示::

ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)   

當您在訊息對應時寫入 ON_CONTROL_RANGE 巨集,您指定:

  • 特定控制項通知訊息。

    在此處它 BN_CLICKED

  • 控制項 ID 值與控制項關聯的連續範圍。

    這些是 IDC_BUTTON1 和 IDC_BUTTON10。

  • 訊息處理常式函式的名稱。

    在此處為 OnButtonClicked。

當您撰寫處理函式時,如下所示,請指定額外 UINT 參數,例如:

void CRangesView::OnButtonClicked( UINT nID )
{
    int nButton = nID - IDC_BUTTON1;
    ASSERT( nButton >= 0 && nButton < 10 );
    // ...
}

單一 BN_CLICKED 訊息的 OnButtonClicked 處理常式沒有參數。 按鈕的範圍內以相同的處理常式並將 UINT。 額外參數允許識別特定控制項負責產生 BN_CLICKED 訊息。

在這個範例顯示的程式碼是典型的:將值傳遞至訊息範圍和判斷提示內的 int 是這種情況。 您可以接受按鈕的其他動作。

請參閱

概念

宣告訊息處理函式