ラッパライブラリのベースクラスの実装はとりあえず終わったものの、戻り値の処理についてどうしようかなと思っている。今のところイベントハンドラ側でboolで返させてOSにはLRESULTもしくはBOOL似変換して返すようにしている。
/** window ベースクラス */
template <typename ProcType = WNDPROC>
struct base_win32_window : public base_window
{
.
.(中略)
.
// デフォルトウィンドウメッセージハンドラ
virtual bool on_nccreate(CREATESTRUCT *p) { return false ;}
virtual bool on_create(CREATESTRUCT *p) { return false;}
virtual bool on_size(uint32_t flag,uint32_t width,uint32_t height) {return false;}
virtual bool on_paint() {return false;}
virtual bool on_display_change(uint32_t bpp,uint32_t h_resolution,uint32_t v_resolution) { return false;}
virtual bool on_erase_backgroud(HDC dc) {return false;}
virtual bool on_left_mouse_button_down(uint32_t mouse_key,int x,int y ) { return false; }
virtual bool on_left_mouse_button_up(uint32_t mouse_key,int x,int y) { return false; }
virtual bool on_left_mouse_button_double_click(uint32_t mouse_key,int x,int y) { return false; }
.
.(中略)
.
};
// ウィンドウプロシージャの実装
template <typename ProcType>
LRESULT base_win32_window<ProcType>::window_proc(HWND hwnd,uint32_t message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_NCCREATE:
return on_nccreate(reinterpret_cast<CREATESTRUCT*>(lParam)) ? RETURN_TYPE_TRUE : RETURN_TYPE_FALSE;
case WM_CREATE:
return on_create(reinterpret_cast<CREATESTRUCT*>(lParam)) ? RETURN_TYPE_TRUE : RETURN_TYPE_FALSE;
case WM_SIZE:
return on_size(wParam,LOWORD(lParam),HIWORD(lParam)) ? RETURN_TYPE_TRUE : RETURN_TYPE_FALSE;
case WM_PAINT:
return on_paint() ? RETURN_TYPE_TRUE : RETURN_TYPE_FALSE;
case WM_DISPLAYCHANGE:
return on_display_change(wParam,LOWORD(lParam),HIWORD(lParam)) ? RETURN_TYPE_TRUE : RETURN_TYPE_FALSE;
case WM_ERASEBKGND:
return on_erase_backgroud(reinterpret_cast<HDC>(wParam)) ? RETURN_TYPE_TRUE : RETURN_TYPE_FALSE;
case WM_LBUTTONDOWN:
return on_left_mouse_button_down(
wParam,dpi_.scale_x(
GET_X_LPARAM(lParam)),dpi_.scale_y(GET_Y_LPARAM(lParam)))
? RETURN_TYPE_TRUE : RETURN_TYPE_FALSE;
;
.
.
.
しかしWM_NCCREATEとかWM_CREATEとかは特殊な値を返すのでやっぱりLRESULTの方がいいかなとか。要するにイベントによってはbool以外の値も返却しなくてはいけないかも...とか考えている。イベントの戻り値全てを調べればいいのだが面倒くさいね。。