处理多个WM_USER消息(或实现相同的结果)

时间:2015-05-12 23:59:13

标签: c++ mfc windows-messages

我有一个WidgetController类来控制多个小部件(事实证明是电机,但它几乎可以是任何东西)。它有一个伴随UI类WidgetControllerUI来执行代表多个小部件的UI事物。

我想将WM_USER + 1000 + N实例中的WidgetController等消息发送到WidgetControllerUI实例,以指示小部件N发生了某些事情。这部分很简单:

// Somewhere inside WidgetController:
pWidgetUI->PostMessage( WM_USER + 1000 + N );

但是如何将所有这些(连续的)消息引导到我的WidgetControllerUI类中的单个消息处理程序中?从表面上看,ON_COMMAND_RANGEON_UPDATE_COMMAND_UI_RANGEON_CONTROL_RANGE似乎不合适。是吗?是否有更优雅的机制,可能根本不使用Windows消息?

1 个答案:

答案 0 :(得分:1)

是的,正如@Ross建议的那样,你可以将'N'作为[lParam,wParam]参数之一传递给PostMessage()。它们在32位和64位操作系统上都是指针大小。

请注意,带有N的恶作剧通常是不必要的。对于动态分配的对象(如GUI元素通常因为它们必须比创建它们的函数更长),通常将对象实例指针作为参数之一传递。可以使用另一个(例如,作为枚举)来命令消息处理函数(例如,使用开关/案例),以在传递实例的情况下执行某些特定操作。

无论哪种方式,您都需要进行一些投射,但我对此类机制一直没有任何问题。

唯一可能的问题是,在收到消息时,实例可能不存在,例如。因为用户通过与GUI的“正常”人工交互删除了它。这种可能性以及如何防范它是特定于应用程序的。

相关问题