Volume Class

公開:2004-05-28 07:02
更新:2020-02-15 04:36
カテゴリ:psycle wtl,windows,audio,tracker

Volumeクラスが取り扱う値の型を変更可能にするためにテンプレートクラス化することにしました。
しかしテンプレートクラスを .hと.cpp ファイルで分離するところでちょっとはまりました。解決策は↓
http://www.fides.dti.ne.jp/~oka-t/cpplab-template-3.html

それでテンプレートクラスってヘッダファイルにまとめてあるんですね。

今のところのVolume.h

000001  #pragma once
000002  /* @file
000003   
  @brief Volume UI 
000004     $Date: 2004/05/16 08:42:08 $
000005   
  $Revision: 1.1 $
000006   */

000007  namespace SF {
000008      namespace UI {
000009          template < class ValueT >
000010          class Volume : public ATL::CWindowImpl<Volume< ValueT > >
000011          {
000012          public:
000013              DECLARE_WND_SUPERCLASS(_T("Volume"),GetWndClassName())
000014              /// Constructor
000015              Volume();
000016              /// Destructor
000017              ~Volume();
000018              
000019              /// Create
000020              HWND Create(HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName,
000021                  DWORD dwStyle, DWORD dwExStyle, _U_MENUorID MenuOrID, LPVOID lpCreateParam);
000022              
000023              // メッセージマップ
000024              BEGIN_MSG_MAP_EX(Volume<ValueT> )
000025                  MSG_WM_HSCROLL(OnHScroll)
000026                  MSG_WM_CREATE(OnCreate)
000027                  MSG_WM_TIMER(OnTimer)
000028                  MSG_WM_PAINT(OnPaint)
000029                  MSG_WM_SETFOCUS(OnSetFocus)
000030                  MSG_WM_KILLFOCUS(OnKillFocus)
000031                  MSG_WM_MOUSEMOVE(OnMouseMove)
000032                  MSG_WM_MOUSEWHEEL(OnMouseWheel)
000033                  MSG_WM_LBUTTONDOWN(OnLButtonDown)
000034                  MSG_WM_NCMOUSEMOVE(OnNCMouseMove)
000035              END_MSG_MAP()
000036 
000037              
000038              LRESULT OnCreate(const LPCREATESTRUCT pCreateStruct)
000039              {
000040                  Initialize();
000041                  return 0;
000042              };
000043 
000044              void OnTimer(const UINT wParam, TIMERPROC lParam)
000045              {
000046                  ATLTRACE2(_T("OnHScroll\n"));
000047                  KillTimer(wParam);
000048              }
000049 
000050              void OnMouseMove(const UINT flag,const WTL::CPoint& point)
000051              {
000052                  ATLTRACE2(_T("OnMouseMove:x:%d:y:%d\n"),point.x,point.y);
000053                  
000054                  if(!m_bCapture){
000055                      SetCapture();
000056                      m_bCapture = true;
000057                  }
000058 
000059                  if((m_RectSize.top < point.y) | (m_RectSize.bottom > point.y) |
000060                      (m_RectSize.left < point.x) | (m_RectSize.right > point.x))
000061                  {
000062                      ReleaseCapture();
000063                      m_bCapture = false;
000064                  }
000065 
000066              }
000067 
000068              void OnLButtonDown(const UINT flags, const WTL::CPoint & point)
000069              {
000070                  ATLTRACE2(_T("OnLButtonDown:x:%d:y:%d\n"),point.x,point.y);
000071                  SetFocus();
000072              }
000073 
000074              void OnSetFocus(const HWND hwnd){
000075                  ATLTRACE2(_T("OnSetFocus\n"));
000076                  OnPaint(NULL);
000077                  SetMsgHandled(TRUE);
000078              }
000079              
000080              void OnKillFocus(const HWND hwnd){
000081                  ATLTRACE2(_T("OnKillFocus\n"));
000082                  OnPaint(NULL);
000083                  SetMsgHandled(TRUE);
000084              }
000085 
000086              void OnHScroll(const int nCode, const short nPos, const HWND hWnd)
000087              {
000088                  ATLTRACE2(_T("OnHScroll\n"));
000089                  OnPaint(NULL);
000090                  SetMsgHandled(TRUE);
000091              }
000092 
000093              LRESULT OnMouseWheel(const UINT flags,const short value,const WTL::CPoint& point)
000094              {
000095                  ATLTRACE2(_T("OnMouseWheel:x:%d:y:%d:flag:%x:value:%d\n"),point.x,point.y,flags,value);
000096                  return 0;
000097              };
000098              
000099              void OnNCMouseMove(const UINT flags,const CPoint & point)
000100              {
000101                  ATLTRACE2(_T("OnNCMouseMove\n"));
000102              
000103              };
000104 
000105              void OnPaint(HDC hdc)
000106              {
000107 
000108              };
000109 
000110 
000111              /// Initialize Volume Control
000112              void Initialize();
000113 
000114              /// this method avoid memory reak check
000115              static void Release()
000116              {
000117                  m_pVolumeSprite.Release();
000118                  m_pTexture.Release();
000119              };
000120 
000121              /// Get Value
000122              const ValueT& Value(){ return m_Value;};
000123              /// Set Value
000124              void Value(const ValueT& value){m_Value = value;};
000125              
000126              /// Get Tick
000127              const ValueT& Tick(){return m_Value;};
000128              /// Set Tick
000129              void Tick(const ValueT & value){m_Value = value;};
000130 
000131              /// Get Min Value
000132              const ValueT& Min(){return m_Value;};
000133              /// Set Min Value
000134              void Min(const ValueT& value){m_Value = value;};
000135                  
000136              /// Get Min Value
000137              const ValueT& Max(){return m_Value;};
000138              /// Set Min Value
000139              void Max(const ValueT& value){m_Value = value;};
000140 
000141          private:
000142              CRect m_RectSize;
000143              ValueT m_Value;
000144              bool m_bCapture;
000145              static CComPtr<ID3DXSprite> m_pVolumeSprite;
000146              static CComPtr<IDirect3DTexture9>   m_pTexture;
000147          };
000148 
000149      }
000150  }

ソース→HTML変換ツールについて

ソース→HTML変換ツールはフリーのものがたくさんありますが、
私の場合、cppファイルをHTMLに変換する自作のWSHを使用しています。
wshのソースも変換できます。
実行するにはIE5.5以上がインストールされているか、JScript5.5以上が必要です。
使用してみたい方は下記よりダウンロードしてください。
本体ダウンロード(必ず右クリックして「ファイルに保存」を選択してください。)
生成したHTMLを色づけするCSSファイル(必ず右クリックして「ファイルに保存」を選択してください。)


ダウンロードしたら、cpp2html2.css ファイルをHTML化したいファイルがあるディレクトリにおきます。そして、HTML化したいファイルをcpp2html.wsfの上に、ドラッグアンドドロップします。
するとソースファイルと同じディレクトリに、<ソースファイル名>.htmlという名前でHTMLファイルが生成されます。
フォルダをドロップするとそのフォルダおよびサブフォルダのソースファイルをHTMLファイルに変換します。