やっぱりCustom Drawはやめて、Custom Controlを作ることにします。
Volumeクラスの雛形
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 class Volume : public CWindowImpl<Volume>
000010 {
000011 public:
000012 DECLARE_WND_CLASS(_T("Volume"))
000013 /// Constructor
000014 Volume(void);
000015 /// Destructor
000016 ~Volume(void);
000017
000018 /// Create
000019 HWND Create(HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName,
000020 DWORD dwStyle, DWORD dwExStyle, _U_MENUorID MenuOrID, LPVOID lpCreateParam);
000021
000022 // メッセージマップ
000023 BEGIN_MSG_MAP_EX(Volume)
000024 MSG_WM_HSCROLL(OnHScroll)
000025 MSG_WM_TIMER(OnTimer)
000026 MSG_WM_PAINT(OnPaint)
000027 MSG_WM_SETFOCUS(OnSetFocus)
000028 MSG_WM_KILLFOCUS(OnKillFocus);
000029 END_MSG_MAP()
000030
000031 void OnTimer(UINT wParam, TIMERPROC lParam)
000032 {
000033 ATLTRACE2(_T("OnHScroll\n"));
000034 KillTimer(wParam);
000035 }
000036
000037 void OnSetFocus(HWND hwnd){
000038 ATLTRACE2(_T("OnHScroll\n"));
000039 OnPaint(NULL);
000040 SetMsgHandled(TRUE);
000041 }
000042
000043 void OnKillFocus(HWND hwnd){
000044 ATLTRACE2(_T("OnKillFocus\n"));
000045 OnPaint(NULL);
000046 SetMsgHandled(TRUE);
000047 }
000048
000049 void OnHScroll(int nCode, short nPos, HWND hWnd)
000050 {
000051 ATLTRACE2(_T("OnHScroll\n"));
000052 OnPaint(NULL);
000053 SetMsgHandled(TRUE);
000054 }
000055
000056
000057 void OnPaint(HDC hdc);
000058
000059 /// Initialize Volume Control
000060 void Initialize(const HWND hwnd);
000061 static void Release(){
000062 m_pVolumeSprite.Release();
000063 m_pTexture.Release();
000064 };
000065 private:
000066 static CComPtr<ID3DXSprite> m_pVolumeSprite;
000067 static CComPtr<IDirect3DTexture9> m_pTexture;
000068 };
000069 }
000070 }
ちゃんと動くようになったらSpriteをMeshに置き換えようと思います。
重いかな...。