イベントハンドラの戻り値は結局LRESULTで統一することにした。WNDPROCもDLGPROCも。boolで返すのはやめにした。メッセージによっては真偽の2値以外の値を返す必要があるので。
template <typename ProcType = WNDPROC>
struct base_win32_window : public base_window
{
typedef ProcType proc_t;
.
.(中略)
.
virtual LRESULT other_window_proc(HWND hwnd,uint32_t message, WPARAM wParam, LPARAM lParam)
{
return def_wnd_proc<ProcType>(hwnd,message,wParam,lParam);
};
// デフォルトウィンドウメッセージハンドラ
virtual LRESULT on_nccreate(CREATESTRUCT *p) { return std::is_same<proc_t,WNDPROC>::value?1:FALSE;}
virtual LRESULT on_create(CREATESTRUCT *p) { return std::is_same<proc_t,WNDPROC>::value?0:FALSE;}
virtual LRESULT on_init_dialog(HWND default_focus_ctrl,LPARAM data) {return TRUE;}
virtual LRESULT on_size(uint32_t flag,uint32_t width,uint32_t height) {return std::is_same<proc_t,WNDPROC>::value?0:FALSE;}
.
.(後略)
デフォルトウィンドウメッセージハンドラのデフォルトの戻り値はWNDPROCとDLGPROCで異なるので、std::is_sameを使っている。