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ファイルに変換します。