我在我的項目設置中有一個窗口的構造函數,使它看起來像這樣。我的項目中有很多窗口,我經常添加或刪除東西。預處理器宏自動生成窗口消息循環
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()
處理每一條消息都是一個非常糟糕的主意,所以我正在尋找一個簡單的替代方案,它不會在用戶不斷增加/刪除事件定義。
使用C++,不會使用通用基類和虛函數是一個明顯的想法嗎? –