OSDN Git Service

サンプルレート変換処理を組み込んだ。しかしモノラルのWAVファイルを読み込むと落ちる。
[winaudioj/async.git] / async / toplevel_window.cpp
index 21f4969..992853f 100644 (file)
@@ -226,7 +226,7 @@ struct toplevel_window::impl : public base_win32_dialog_t
   };
 
 
-
+  
   // -------------------------------------------------------------------
   // ウィンドウプロシージャ
   // -------------------------------------------------------------------
@@ -357,7 +357,7 @@ struct toplevel_window::impl : public base_win32_dialog_t
       break;
     case WM_PLAY_PLAY:
       play_();
-      break;
+      return TRUE;
     case WM_PLAY_STOP:
       stop_();
       return TRUE;
@@ -396,15 +396,29 @@ struct toplevel_window::impl : public base_win32_dialog_t
      SendMessage(GetDlgItem(hwnd_,IDC_SLIDER), TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 30000));
   }
 
+  void ready()
+  {
+    // プレイボタンは有効化
+    enable_control(IDC_PLAY,true);
+    focus(IDC_PLAY);
+    highlight(IDC_PLAY);
+    // その他のボタンは無効化
+    enable_control(IDC_PAUSE,false);
+    enable_control(IDC_SLIDER,true);
+    enable_control(IDC_STOP,false);
+  }
+
   void play()
   {
-    send_message(WM_PLAY_PLAY,0,0);
+    post_message(WM_PLAY_PLAY,0,0);
   }
   
   void play_()
   {
     enable_control(IDC_PLAY,false);
     enable_control(IDC_STOP,true);
+    focus(IDC_STOP);
+    highlight(IDC_STOP);
     enable_control(IDC_PAUSE,true);
     ::SetWindowText(GetDlgItem(hwnd_,IDC_PAUSE),L"一時停止");
     enable_control(IDC_SLIDER,true);
@@ -412,15 +426,17 @@ struct toplevel_window::impl : public base_win32_dialog_t
 
   void stop()
   {
-    send_message(WM_PLAY_STOP,0,0);
+    post_message(WM_PLAY_STOP,0,0);
   }
 
   void stop_()
   {
     enable_control(IDC_PLAY,true);
+    focus(IDC_PLAY);
+    highlight(IDC_PLAY);
     enable_control(IDC_STOP,false);
     enable_control(IDC_PAUSE,false);
-    enable_control(IDC_SLIDER,false);
+    enable_control(IDC_SLIDER,true);
   }
   
   void pause()
@@ -433,8 +449,10 @@ struct toplevel_window::impl : public base_win32_dialog_t
     enable_control(IDC_PLAY,false);
     enable_control(IDC_STOP,false);
     enable_control(IDC_PAUSE,true);
+    focus(IDC_PAUSE);
+    highlight(IDC_PAUSE);
     ::SetWindowText(GetDlgItem(hwnd_,IDC_PAUSE),L"再開");
-    enable_control(IDC_SLIDER,false);
+    enable_control(IDC_SLIDER,true);
   }
   virtual void create(){
     create_device_independent_resources();
@@ -451,7 +469,7 @@ struct toplevel_window::impl : public base_win32_dialog_t
 
   void create_dialog()
   {
-    hwnd_ = ::CreateDialog(HINST_THISCOMPONENT,MAKEINTRESOURCE(IDD_MAINDIALOG),0,thunk_proc_);
+    hwnd_ = ::CreateDialog(HINST_THISCOMPONENT,MAKEINTRESOURCE(IDD_MAINDIALOG),::GetDesktopWindow(),thunk_proc_);
     // ::DialogBox(HINST_THISCOMPONENT,MAKEINTRESOURCE(IDD_MAINDIALOG),0,thunk_proc_);
   }
 
@@ -609,16 +627,7 @@ struct toplevel_window::impl : public base_win32_dialog_t
       }
     }
   }
-  void ready()
-  {
-    // プレイボタンは有効化
-    enable_control(IDC_PLAY,true);
-
-    // その他のボタンは無効化
-    enable_control(IDC_PAUSE,false);
-    enable_control(IDC_SLIDER,false);
-    enable_control(IDC_STOP,false);
-  }
 
   void create_window()
   {
@@ -704,6 +713,19 @@ struct toplevel_window::impl : public base_win32_dialog_t
   {
     ::EnableWindow(GetDlgItem(hwnd_,id),enable?TRUE:FALSE);
   }
+
+  void focus(uint32_t id)
+  {
+    //::PostMessage(GetDlgItem(hwnd_,id),WM_SETFOCUS,NULL,NULL);
+    ::SetFocus(GetDlgItem(hwnd_,id));
+    //::PostMessage(hwnd_,WM_COMMAND,MAKEWPARAM(id,BN_SETFOCUS),(LPARAM)GetDlgItem(hwnd_,id));
+  }
+
+  void highlight(uint32_t id)
+  {
+    //Button_SetState(GetDlgItem(hwnd_,id),TRUE);
+  }
+
 private:
 
   void read_start() {};