TNB Library
TnbMfcRotaryCtrl.h
[詳解]
1#pragma once
13#include "TnbMfcDrawingStatic.h"
14#include "TnbBitmapImage.h"
15#include "TnbGdiPlus.h"
16
17
18
19#define ROTARY_CHANGED_T 0x100
20
21
22
23//TNB Library
24namespace TNB {
25namespace MFC {
26
27
28
58{
59 DEFSUPER(CDrawingStatic);
60public:
61
63 CRotaryCtrl(void) : m_value(0x00)
64 {
65 }
66
73 void SetImage(CBitmapHandle b, CBitmapHandle a, COLORREF transColor = RGB(255, 0, 255))
74 {
75 m_baseImage = b;
76 m_arrowImage = a;
77 m_arrowTransColor = transColor;
78 m_ResetBitmap();
79 }
80
85 BYTE GetValue(void) const
86 {
87 return m_value;
88 }
89
93 void Increment(void)
94 {
95 SetValue(static_cast<BYTE>((m_value + 1) & 0xF));
96 }
97
101 void Decrement(void)
102 {
103 SetValue(static_cast<BYTE>((m_value - 1) & 0xF));
104 }
105
110 void SetValue(BYTE value)
111 {
112 m_value = value;
113 if ( ::IsWindow(_super::GetSafeHwnd()) )
114 {
115 m_ResetBitmap();
116 }
117 }
118
119protected:
125 virtual void PreSubclassWindow(void)
126 {
127 _super::PreSubclassWindow();
128 m_ResetBitmap();
129 }
130
140 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
141 {
142 switch ( message )
143 {
144 case WM_LBUTTONDOWN:
145 case WM_LBUTTONDBLCLK:
146 m_value++;
147 m_value &= 0xF;
148 m_ResetBitmap();
149 SetFocus();
150 MFCLIB::SendCommandMessage(this, ROTARY_CHANGED_T);
151 break;
152 case WM_RBUTTONDOWN:
153 case WM_RBUTTONDBLCLK:
154 m_value--;
155 m_value &= 0xF;
156 m_ResetBitmap();
157 SetFocus();
158 MFCLIB::SendCommandMessage(this, ROTARY_CHANGED_T);
159 break;
160 case WM_MOUSEWHEEL:
161 if ( static_cast<short>(HIWORD(wParam)) > 0 )
162 {
163 m_value++;
164 }
165 else
166 {
167 m_value--;
168 }
169 m_value &= 0xF;
170 m_ResetBitmap();
171 SetFocus();
172 MFCLIB::SendCommandMessage(this, ROTARY_CHANGED_T);
173 break;
174 case WM_GETDLGCODE:
175 {
176 LRESULT r = _super::WindowProc(message, wParam, lParam);
177 return (r & ~DLGC_STATIC);
178 }
179 break;
180 default:
181 break;
182 }
183 return _super::WindowProc(message, wParam, lParam);
184 }
185
186private:
188 void m_ResetBitmap(void)
189 {
190 CBitmapImage base;
191 base.Set(m_baseImage);
192 if ( base.IsEmpty() )
193 {
194 return;
195 }
196 m_size = base.GetSize();
197 CBitmapImage arrow;
198 arrow.Set(m_size.cx, m_size.cy, m_arrowTransColor);
199 {
200 CBitmapHandle h = m_arrowImage;
201 CGdiPlus g(arrow.GetDC());
202 g.SetImageInterpolationMode(CGdiPlus::NEAREST_NEIGHBOR);
203 g.DrawRotateImage(CGdiPlus::CPos(m_size.cx / 2, m_size.cy / 2), h, (360.0 / 16.0) * m_value);
204 }
205 arrow.ReleaseDC();
206 base.InsertOnTransparent(0, 0, arrow);
207 _super::SetDrawingBitmap(base, true, true);
208 }
209
210 CBitmapHandle m_baseImage;
211 CBitmapHandle m_arrowImage;
212 COLORREF m_arrowTransColor;
213 BYTE m_value;
214 SIZE m_size;
215};
216
217
218
219}; //MFC
220}; //TNB
ビットマップイメージ管理関係のヘッダ
GDI+ 関係のヘッダ
描画情報表示関係のヘッダ
HBITMAP型ハンドルハンドル
ビットマップイメージ管理クラス
bool IsEmpty(void) const
[確認] Empty状態確認.
HDC GetDC(void)
[取得]デバイスコンテキストハンドル取得.
bool InsertOnTransparent(int x, int y, const CBitmapImage &bmpimg, COLORREF color=CLR_AUTOSELECT, int cx=0, int cy=0)
[挿入] 透過処理付イメージ挿入.
const SIZE & GetSize(void) const
[取得] イメージサイズ取得.
bool Set(int cx, int cy, COLORREF color=CLR_INVALID)
[設定] イメージ設定.
bool ReleaseDC(void)
[設定] デバイスコンテキストハンドル返却.
GDI+用座標型
Definition: TnbGdiPlus.h:71
GDI+ 管理クラス
Definition: TnbGdiPlus.h:59
@ NEAREST_NEIGHBOR
最近傍補間を指定します。
Definition: TnbGdiPlus.h:365
描画情報表示コントロールクラス
ロータリー風値コントロールクラス.
void SetValue(BYTE value)
[設定] 値設定.
void Decrement(void)
[設定] 値デクリメント.
CRotaryCtrl(void)
コンストラクタ
void Increment(void)
[設定] 値インクリメント.
virtual void PreSubclassWindow(void)
[通知] subclassing/unsubclassing functions.
BYTE GetValue(void) const
[取得] 値取得.
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
void SetImage(CBitmapHandle b, CBitmapHandle a, COLORREF transColor=RGB(255, 0, 255))
[設定] イメージ指定.
LRESULT SendCommandMessage(CWnd *pCtrl, UINT cmd)
[処理] WM_COMMAND送信.
Definition: TnbMfcCommon.h:475
TNB Library
Definition: TnbDoxyTitle.txt:2