我有 Windows 事件值,例如DefWindowsProc()获取 - 即hWnd, MsgId, wParam, lParam。是否可以区分WM_COMMAND带有通知代码的事件BN_CLICKED是来自push button还是来自复选框(或可能来自其他一些)?
动机:我正在一个更大的应用程序中重写 GUI 实现和消息处理。最终的目标是wxWidgets,但我必须循序渐进。我确实模仿BEGIN_EVENT_TABLE/END_EVENT_TABLE宏和相关的EVT_BUTTON, EVT_CHECKBOX(..., EVT_SIZE,EVT_PAINT等等)。我也在模仿类似的类wxCommandEvent,并且我想将其类型设置为等价于wxEVT_COMMAND_BUTTON_CLICKED或wxEVT_COMMAND_CHECKBOX_CLICKED当事件被原始代码捕获时。
例如: 我有一个这样的宏
#define EVT_CHECKBOX(id, func) \
if (uMsg == WM_COMMAND && id == LOWORD(wParam)) \
{ \
CAppCommandEvent evt(hWnd, uMsg, wParam, lParam); \
ATLASSERT(evt.GetEventType() == appEVT_COMMAND_CHECKBOX_CLICKED); \
func(evt); \
lResult = evt.GetLResult(); \
if (!evt.GetSkipped()) \
return TRUE; \
}
被wxEVT_COMMAND_CHECKBOX_CLICKED故意重命名为appEVT_.... 我希望能够检查EVT_CHECKBOX宏是否未(错误地)用于按钮。如果是,则断言命令必须使其对程序的调试版本可见。