TNB Library
TnbMfcSevenSegCtrl.h
[詳解]
1#pragma once
11#include "TnbMfcDrawingStatic.h"
12#include "TnbBitmapImage.h"
13
14
15
16//TNB Library
17namespace TNB {
18namespace MFC {
19
20
21
49template<int DIGIT = 1>
51{
52 DEFSUPER(CDrawingStatic);
53public:
54
59 {
60 MCC0 = RGB(128, 0, 0),
61 MCC1 = RGB(255, 0, 0),
62 MCC2 = RGB(0, 0, 128),
63 MCC3 = RGB(0, 0, 255),
64 MCC4 = RGB(0, 128, 0),
65 MCC5 = RGB(0, 255, 0),
66 MCC6 = RGB(0, 128, 128),
67 MCC7 = RGB(0, 255, 255),
68 };
69
72 {
73 Zero(m_value);
74 }
75
83 void SetImage(CBitmapHandle b, COLORREF onColor = RGB(254, 0, 0), COLORREF offColor = RGB(60, 0, 0))
84 {
85 m_baseImage = b;
86 m_onColor = onColor;
87 m_offColor = offColor;
88 }
89
96 void SetValues(DWORD value, bool hasDot = false, bool isZeroPadding = false)
97 {
98 if ( ::IsWindow(_super::GetSafeHwnd()) )
99 {
100 Zero(m_value);
101 loop ( i, DIGIT )
102 {
103 BYTE v = m_NumberImage(value % 10);
104 if ( i == 0 && hasDot )
105 {
106 v |= _BIT(7);
107 }
108 m_value[DIGIT - i - 1] = v;
109 value /= 10;
110 if ( ! isZeroPadding && value == 0 )
111 {
112 break;
113 }
114 }
115 m_ResetBitmap();
116 }
117 }
118
126 void SetValue(INDEX idx, int value, bool hasDot = false)
127 {
128 if ( ::IsWindow(_super::GetSafeHwnd()) )
129 {
130 BYTE v = m_NumberImage(value);
131 if ( hasDot )
132 {
133 v |= _BIT(7);
134 }
135 m_value[DIGIT - idx - 1] = v;
136 m_ResetBitmap();
137 }
138 }
139
154 void SetBitset(INDEX idx, BYTE b)
155 {
156 if ( ::IsWindow(_super::GetSafeHwnd()) )
157 {
158 m_value[DIGIT - idx - 1] = b;
159 m_ResetBitmap();
160 }
161 }
162
163protected:
169 virtual void PreSubclassWindow(void)
170 {
171 _super::PreSubclassWindow();
172 }
173
174private:
175 BYTE m_NumberImage(int val)
176 {
177 // 000
178 // 2 1
179 // 333
180 // 5 4
181 // 666 7
182 const static BYTE pats[11] =
183 {
184 // 76543210
185 _BIN(01110111), //0
186 _BIN(00010010), //1
187 _BIN(01101011), //2
188 _BIN(01011011), //3
189 _BIN(00011110), //4
190 _BIN(01011101), //5
191 _BIN(01111100), //6
192 _BIN(00010011), //7
193 _BIN(01111111), //8
194 _BIN(01011111), //9
195 _BIN(11101101), //E
196 };
197 BYTE v = (val >= 0 && val < 10) ? pats[val] : pats[10] ;
198 return v;
199 }
200
202 void m_ResetBitmap(void)
203 {
204 CSize sz;
205 m_baseImage.GetSize(sz);
206 CBitmapImage bmp;
207 bmp.Set(sz.cx * DIGIT, sz.cy);
208 loop ( i, DIGIT )
209 {
210 CBitmapImage b = m_ResetBitmap(m_value[i]);
211 bmp.Insert(i * sz.cx, 0, b);
212 }
213 _super::SetDrawingBitmap(bmp, true, true);
214 }
215
217 CBitmapImage m_ResetBitmap(BYTE v)
218 {
219 CBitmapImage bi;
220 bi.Set(m_baseImage);
221 COLORREF on = m_onColor;
222 COLORREF of = m_offColor;
223 bi.ChangePixelColor(MCC0, (v & _BIT(0)) ? on : of);
224 bi.ChangePixelColor(MCC1, (v & _BIT(1)) ? on : of);
225 bi.ChangePixelColor(MCC2, (v & _BIT(2)) ? on : of);
226 bi.ChangePixelColor(MCC3, (v & _BIT(3)) ? on : of);
227 bi.ChangePixelColor(MCC4, (v & _BIT(4)) ? on : of);
228 bi.ChangePixelColor(MCC5, (v & _BIT(5)) ? on : of);
229 bi.ChangePixelColor(MCC6, (v & _BIT(6)) ? on : of);
230 bi.ChangePixelColor(MCC7, (v & _BIT(7)) ? on : of);
231 return bi;
232 }
233
234 BYTE m_value[DIGIT];
235
236 CBitmapHandle m_baseImage;
237 COLORREF m_onColor;
238 COLORREF m_offColor;
239};
240
241
242
243}; //MFC
244}; //TNB
ビットマップイメージ管理関係のヘッダ
#define _BIN(X)
二進数表記定数
Definition: TnbDef.h:321
#define _BIT(X)
BIT演算
Definition: TnbDef.h:307
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
描画情報表示関係のヘッダ
HBITMAP型ハンドルハンドル
bool GetSize(SIZE &_size) const
[取得] ビットマップサイズ取得.
ビットマップイメージ管理クラス
bool Insert(int x, int y, const CBitmapImage &bmpimg, DWORD raster=SRCCOPY, int cx=0, int cy=0)
[挿入] イメージ挿入.
int ChangePixelColor(COLORREF targetColor, COLORREF drawColor)
[処理] カラー変更.
bool Set(int cx, int cy, COLORREF color=CLR_INVALID)
[設定] イメージ設定.
描画情報表示コントロールクラス
7SEG 風値表示コントロールクラス.
void SetImage(CBitmapHandle b, COLORREF onColor=RGB(254, 0, 0), COLORREF offColor=RGB(60, 0, 0))
[設定] イメージ指定.
EMagicColorCode
マジックカラーコード.
virtual void PreSubclassWindow(void)
[通知] subclassing/unsubclassing functions.
CSevenSegCtrlT(void)
コンストラクタ
void SetValues(DWORD value, bool hasDot=false, bool isZeroPadding=false)
[設定] 値設定.
void SetBitset(INDEX idx, BYTE b)
[設定] 7seg設定.
void SetValue(INDEX idx, int value, bool hasDot=false)
[設定] 値設定.
void Zero(V &value)
[設定] ゼロクリア.
Definition: TnbDef.h:399
TNB Library
Definition: TnbDoxyTitle.txt:2