我有一些按钮,我想为它们编写一个消息处理程序。有什么方法可以找出哪个按钮被点击?在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