TNB Library
TnbMfcSmoothProgressCtrl.h
[詳解]
1#pragma once
13#include "TnbMfcCommon.h"
14
15
16
17//TNB Library
18namespace TNB {
19namespace MFC {
20
21
22
39template<typename PGC = CProgressCtrl>
40class CSmoothProgressCtrlT : public PGC
41{
42 DEFSUPER(PGC);
43public:
44
46 CSmoothProgressCtrlT(void) : m_step(1), m_currentPos(0), m_maxDelta(-1.0)
47 {
48 }
49
55 COLORREF SetBarColor(COLORREF color = CLR_DEFAULT)
56 {
57 return _super::SendMessage(PBM_SETBARCOLOR, 0, color);
58 }
59
65 COLORREF SetBkColor(COLORREF color = CLR_DEFAULT)
66 {
67 return _super::SendMessage(PBM_SETBKCOLOR, 0, color);
68 }
69
75 void SetRange(short nLower, short nUpper)
76 {
77 SetRange32(nLower, nUpper);
78 }
79
85 void SetRange32(int nLower, int nUpper)
86 {
87 _super::SetRange32(nLower, nUpper);
88 m_lower = nLower;
89 m_upper = nUpper;
90 }
91
97 void GetRange(int& _nLower, int& _nUpper)
98 {
99 _super::GetRange(_nLower, _nUpper);
100 }
101
106 int GetPos(void)
107 {
108 return m_currentPos;
109 }
110
117 int SetPos(int nPos)
118 {
119 m_currentPos = nPos;
120 m_viewPos = nPos;
121 m_viewDelta = 0.0;
122 return _super::SetPos(nPos);
123 }
124
131 int SetStep(int nStep)
132 {
133 Swap(m_step, nStep);
134 return nStep;
135 }
136
142 int StepIt(void)
143 {
144 return OffsetPos(m_step);
145 }
146
152 int OffsetPos(int nPos)
153 {
154 int r = m_currentPos;
155 m_currentPos += nPos;
156 _super::SetTimer(TIMERID_MOVE, 10, NULL);
157 return r;
158 }
159
165 void SetMaxDelta(double d = -1.0)
166 {
167 m_maxDelta = d;
168 }
169
170protected:
171
177 virtual void PreSubclassWindow(void)
178 {
179 _super::GetRange(m_lower, m_upper);
180 SetPos(0);
181 _super::PreSubclassWindow();
182 }
183
193 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
194 {
195 if ( message == WM_TIMER && wParam == TIMERID_MOVE )
196 {
197 OnMoveTimer(wParam);
198 return 0;
199 }
200 return _super::WindowProc(message, wParam, lParam);
201 }
202
207 void OnMoveTimer(UINT nIDEvent)
208 {
209 ASSERT( nIDEvent == TIMERID_MOVE );
210 if ( m_currentPos != ToInt(m_viewPos + 0.005) )
211 {
212 // 表示位置と、内部位置にずれがある。
213 m_viewDelta = m_currentPos - m_viewPos;
214 if ( m_upper != m_currentPos )
215 {
216 m_viewDelta /= 20.0; //20回で
217 }
218 else
219 {
220 m_viewDelta /= 5.0; //5回で
221 }
222 }
223 else
224 {
225 m_viewDelta = 0.0;
226// _super::SetPos(m_currentPos);
227 KillTimer(TIMERID_MOVE);
228 }
229 if ( m_viewDelta != 0.0 )
230 {
231 //== デルタがある。
232 //TRACE1("delta = %.4f\n", m_viewDelta);
233 if ( m_maxDelta > 0.0 )
234 {
235 if ( ::fabs(m_viewDelta) > ::fabs(m_maxDelta) )
236 {
237 bool m = (m_viewDelta > 0.0);
238 m_viewDelta = m ? m_maxDelta : -m_maxDelta;
239 }
240 }
241 m_viewPos += m_viewDelta;
242 if ( m_viewPos < m_lower )
243 {
244 m_viewPos = m_lower;
245 }
246 if ( m_viewPos > m_upper )
247 {
248 m_viewPos = m_upper;
249 }
250 _super::SetPos(ToInt(m_viewPos + 0.005));
251 }
252 }
253
254private:
255 enum { TIMERID_MOVE = 1 };
256 double m_viewPos;
257 double m_viewDelta;
258 double m_maxDelta;
259 int m_currentPos;
260 int m_step;
261 int m_lower;
262 int m_upper;
263};
264
265
266
282
283
284
285};
286};
MFCコントロール共通のヘッダ
スムース進捗コントロールクラス
COLORREF SetBarColor(COLORREF color=CLR_DEFAULT)
[設定] バーの色指定.
CSmoothProgressCtrlT(void)
コンストラクタ
void SetRange32(int nLower, int nUpper)
[設定] 範囲設定.
int SetPos(int nPos)
[設定] ポジション設定.
int GetPos(void)
[取得] ポジション取得.
void OnMoveTimer(UINT nIDEvent)
[通知] WM_TIMER イベント.
void SetMaxDelta(double d=-1.0)
[設定] 最大移動値設定.
COLORREF SetBkColor(COLORREF color=CLR_DEFAULT)
[設定] 背景色指定.
int SetStep(int nStep)
[設定] ステップ値設定.
int OffsetPos(int nPos)
[設定] ポジション移動.
virtual void PreSubclassWindow(void)
[通知] subclassing/unsubclassing functions.
int StepIt(void)
[設定] ポジション移動.
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
void GetRange(int &_nLower, int &_nUpper)
[取得] 範囲設定取得.
void SetRange(short nLower, short nUpper)
[設定] 範囲設定.
int ToInt(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
Definition: TnbStrLib.h:367
void Swap(T &t1, T &t2)
[変換] スワッパー.
Definition: TnbDef.h:963
CSmoothProgressCtrlT CSmoothProgressCtrl
スムース進捗コントロールクラス
TNB Library
Definition: TnbDoxyTitle.txt:2