我有 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
宏是否未(错误地)用于按钮。如果是,则断言命令必须使其对程序的调试版本可见。