我有一些按鈕,我想爲它們編寫一個消息處理程序。有什麼方法可以找出哪個按鈕被點擊?在C#中,有一個參數(sender),MFC有類似的東西嗎?還是必須爲所有按鈕分別編寫相同的消息處理程序?如何在MFC中爲多個按鈕編寫一個消息處理程序?
回答
最好的選擇是給所有的按鈕連續的ID號,然後使用ON_COMMAND_RANGE(FIRST_BUTTON_ID,LAST_BUTTON_ID,HandlerFunction)。然後HandlerFunction將採用一個UINT nID,它將是調用處理程序的按鈕的ID號。更多信息here
對於典型的WM_COMMAND消息,消息的lParam成員應該保存發件人的HWND - 如果發件人是窗口。正如@Redeye所回答的那樣,你可以將所有的按鈕放在一個範圍內,並在消息表和一個OnCommand(UINT nCmd)(或者任何你命名的)中寫入一個ON_COMMAND_RANGE()條目作爲窗口,對話框,視圖的成員函數,框架或文檔類。按鈕不一定必須在一個範圍內。您可以將每個按鈕ID的單個條目作爲ON_COMMAND_RANGE(IDC_BUTTON1, IDC_BUTTON1)
- 或任何標識符。 Thjust ere對於那個宏來說並不是一個規則,即開始和結束範圍必須不同。你可以編寫自己的消息破解宏,它基本上做ON_COMMAND_RANGE()所做的事情,但只需要一個條目。
您也可以在您的處理程序中調用CWnd :: GetCurrentMessage(),並在處理程序中將其檢索以檢索該命令。消息的wParam成員的LOWORD持有控制標識符。消息的lParam成員擁有發送控件HWND - 如果它是一個窗口。對於類似於工具欄的東西,工具欄按鈕不是真正的按鈕,而是由工具欄繪製,這樣lParam將始終是工具欄的HWND。
如果我正確理解了這個問題,那很簡單:在屬性編輯器中分配OnCommand事件時,不要再次單擊(並讓該向導添加另一個消息處理程序,而是選擇其中一個現有處理程序。無法完成這項工作(不知道你的VStudio版本和設置),你可以手動完成:通常創建新的處理程序,保存,然後到達.cpp和.h文件,刪除類頭中的聲明和.cpp文件中的實現,轉到消息映射並更改ON_COMMAND條目,以便它使用現有的(old/common)處理程序。對於ON_UPDATE_UI處理程序也非常有用,其中幾個UI對象(菜單項,工具欄按鈕等等)可以基於相同的條件啓用/禁用/檢查/等(因此可以將它們分組並且具有一個處理程序,每個處理程序有一個處理程序)
編輯:也許我錯了,如果問題是關於未解決的外部唯一,是OnSignButton()作爲CTabTwo的成員實現?如果您發佈的實現(代碼)不在類聲明中,則不是。將它聲明爲void CTabTwo :: OnSignButton(UINT ID)...
恰好碰巧看到這篇文章。 這是另一種方式嗎? 使用虛函數OnCommand。
BOOL CKeyboard::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
//
if (HIWORD(wParam)==BN_CLICKED)
{
switch(LOWORD(wParam))
{
case IDC_BUTTON1:
break;
case IDC_BUTTON2:
break;
case IDC_BUTTON3:
break;
}
}
return CView::OnCommand(wParam, lParam);
}
- 1. MFC單選按鈕組消息處理程序
- 2. 如何爲多個按鈕創建事件處理程序?
- 3. jquery中的一個按鈕多個點擊處理程序
- 4. 一個片段中的多個按鈕的OnClick處理程序
- 5. 在手機Flex編程中創建一個事件處理多個按鈕的處理程序
- 6. 使用NServiceBus如何處理多個消息作爲批處理?
- 7. 一個用於多個按鈕的.click事件處理程序
- 8. 跟蹤MFC消息處理
- 9. C++ MFC消息處理
- 10. 一鍵處理程序中的StackPanel多個按鈕
- 11. 如何爲處理程序編寫teamplate
- 12. 如何使用一個點擊事件處理程序的多個按鈕
- 13. 在.NET中爲多個按鈕設置單個事件處理程序?
- 14. Javafx:按鈕處理程序中的按鈕處理程序
- 15. 如何在NServicebus消息處理程序中注入多個存儲庫?
- 16. 如何在動態表中插入JQuery中的多個按鈕處理程序
- 17. 如何爲多個按鈕分配一個通用程序?
- 18. 如何在adb shell中編寫按鈕的事件處理程序?
- 19. 滷麪 - 遞延信息,只有一個消息處理程序
- 20. 如何爲多個對象使用一個處理程序?
- 21. 多個表單在一個頁面上,如何處理後退按鈕行爲?
- 22. 如何在一個處理程序中處理多個主幹模型更改
- 23. 如何在一個處理程序中處理多個更改事件?
- 24. 如何處理mfc中的同一個按鈕上的單擊和雙擊?
- 25. 如何在CWnd中處理wm_print消息(使用MFC)?
- 26. 如何在Katana中編寫多個身份驗證處理程序?
- 27. 有序多線程消息處理
- 28. 如何在ROS中編寫多個Twist消息
- 29. 一個ajax處理程序或多個處理程序?
- 30. 如何爲多個類似的控件編寫事件處理程序?
感謝康斯坦丁爲你的答案,你救了我,我不是爲什麼我犯了這個錯誤!非常感謝。 – 2012-07-23 12:17:38