2012-08-31 107 views
1

我有一個函數根據它接收到的std :: string值執行特定的操作。如何將值傳遞給MFC消息映射函數on_command

例如:

空隙performTaskOnStringValue(的std :: string);

現在我有一組功能區按鈕(CMFCRibbonButton)需要通過將各自的文本作爲值傳遞給按鈕單擊來調用此函數。

我已經將這些按鈕的ID映射到消息映射宏on_command與按鈕ID。所有的按鍵共享一個公共ID - EG -

ID_RIBBON_BUTTON_ID

消息映射是如下

ON_COMMAND(ID_RIBBON_BUTTON_ID,& MyClass的:: performTaskOnStringValue);

如何將按鈕文本作爲參數傳遞給ButtonClick上的此功能?

回答

5

當他們都具有相同的ID時,您不能讓按鈕執行不同的操作。命令處理程序不會指示哪個按鈕被按下。

如果您可以將連續的ID分配給按鈕,則可以改爲使用ON_COMMAND_RANGE。這將傳遞給您按鈕的ID,您可以將其傳遞給GetDlgItemText以從按鈕中獲取文本。

+0

由於添加的按鈕發生在飛行中,我不知道我需要創建多少個按鈕。我需要知道的原因是將ID與ON_COMMAND_RANGE關聯,並將它們插入資源文件中,以便將它們識別爲有效的ID。 –

+0

@EternalLearner,如果您正在動態創建按鈕,則不需要在資源文件中包含它們。只需定義一個允許使用的最小和最大值,並跟蹤當前值,每次創建新按鈕時遞增。 –

+0

除了GetDlgItemText以外的所有工作,因爲我添加的元素是CMFCRibbonButton類型。我使用了FindByID(uint ID)方法。謝謝。 –

2

首先,給每個按鈕在一個連續的範圍內不同的ID。

其次,使用ON_COMMAND_RANGE將所有按鈕映射到一個接收該id作爲參數的處理程序。

第三,在該處理程序中使用id來獲取按鈕文本。然後你可以調用你的performTaskOnStringValue方法。