Я, вероятно, объявил бы карту и использовал бы функторы для каждого сообщения:
typedef std::map<UINT, boost::function<int (HWND, WPARAM, LPARAM) > > messageFuncs_t;
messageFuncs_t messageFuncs;
Затем, когда класс окна создан, просто добавьте новую функцию для каждого сообщения:
messageFuncs[WM_LBUTTONDOWN] = &onMouseDownEvent;
... А затем реализовать цикл сообщений следующим образом:
messageFuncs_t::iterator fun = messageFuncs.find(msg);
if(fun != messageFuncs.end())
return (*fun)(hWnd, wparam, lparam);
else
return DefWindowProc(hWnd, msg, wp, lp);
... или как там работает. Тогда легко добавлять новые сообщения, и работа для каждого делегируется функции. Чистый, лаконичный и понятный.