ラッパライブラリの改良 - イベントハンドラとか

公開:2012-01-18 05:29
更新:2020-02-15 04:37
カテゴリ:c++,dawもどきの作成,windows,audio

ラッパライブラリのベースクラスの実装はとりあえず終わったものの、戻り値の処理についてどうしようかなと思っている。今のところイベントハンドラ側で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以外の値も返却しなくてはいけないかも...とか考えている。イベントの戻り値全てを調べればいいのだが面倒くさいね。。