我的项目设置中有一个窗口的构造函数,它看起来像这样。我的项目中有很多窗口,我不断地添加或删除东西。
LRESULT CPicture::Msg(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_CREATE, OnCreate);
HANDLE_MSG(hWnd, WM_PAINT, OnPaint);
HANDLE_MSG(hWnd, WM_SIZE, OnSize);
HANDLE_MSG(hWnd, WM_CLOSE, OnDestroy);
default:
return (DefWindowProc(hWnd, uMsg, wParam, lParam));
}
}
这是所有有效事件的示例;
// Csx / Dsx
virtual BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct) {return FALSE;};
virtual void OnDestroy(HWND hWnd){};
// Painting
virtual void OnPaint(HWND hWnd){};
virtual BOOL OnEraseBkgnd(HWND hWnd, HDC hDC) {return FALSE;};
// Movement / Sizing
virtual void OnMove(HWND hWnd, int x, int y) {};
virtual void OnSize(HWND hWnd, UINT state, int nWidth, int nHeight){};
virtual void OnGetMinMaxInfo(HWND hWnd, LPMINMAXINFO lpMinMaxInfo){};
// Focus
virtual void OnSetFocus(HWND hWnd, HWND hWndOldFocus){};
virtual void OnKillFocus(HWND hWnd, HWND hWndNewFocus){};
……还有更多。是否可以使用预处理器宏来检测这些函数之一何时在子类中被覆盖并自动为它添加一个处理程序到消息循环中?
有人告诉我Msg()
,即使未定义每条消息,对我来说处理每条消息也是一个非常糟糕的主意,因此我正在寻找一种简单的替代方案,该替代方案在不断添加/删除事件定义时不会对用户造成太大影响。