我有Windows事件值,例如DefWindowsProc()
獲得 - 即hWnd, MsgId, wParam, lParam
。 是否有可能(從一些其他的或可能)區分的WM_COMMAND
事件與通知代碼BN_CLICKED
是否到來從從複選框按鈕,或?如何區分Windows上的按鈕和複選框消息?
動機:我正在重寫更大的應用程序中的GUI實現和消息處理。最終目標是wxWidgets,但我必須逐步完成。我確實模仿了宏和相關的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
宏是否沒有被用於(錯誤地)按鈕。如果是,則assert命令必須使該程序的調試版本可見。
我想我們在這裏有一個贏家。好好考慮那個。 – chris
雖然我沒有設置方便的測試來確認它的工作原理。這就是我在理論上說的原因。所以,牢記這一點。 – irobot
我必須說的唯一的事情就是'GetWindowLong'在x64的'GetWindowLongPtr'中被棄用。它在文章的頂部。 – chris