TNB Library
TnbMfcDipswButton.h
[詳解]
1#pragma once
13#include "TnbMfcDrawingStatic.h"
14#include "TnbBitmapImage.h"
15
16
17
18#define DIPSW_CHANGED_T 0x100
19
20
21
22//TNB Library
23namespace TNB {
24namespace MFC {
25
26
27
57{
58 DEFSUPER(CDrawingStatic);
59public:
60
65 {
66 MCC0 = RGB(128, 0, 0),
67 MCC1 = RGB(255, 0, 0),
68 MCC2 = RGB(0, 0, 128),
69 MCC3 = RGB(0, 0, 255),
70 MCC4 = RGB(0, 128, 0),
71 MCC5 = RGB(0, 255, 0),
72 MCC6 = RGB(0, 128, 128),
73 MCC7 = RGB(0, 255, 255),
74 };
75
77 CDipswButton(void) : m_value(0x00)
78 {
79 }
80
87 void SetImage(CBitmapHandle b, COLORREF onColor = RGB(255, 255, 255), COLORREF offColor = RGB(1, 1, 1))
88 {
89 m_onColor = onColor;
90 m_offColor = offColor;
91 m_base = b;
92 m_base.ToHaveRgbData();
93 m_ResetBitmap();
94 }
95
100 BYTE GetValue(void) const
101 {
102 return m_value;
103 }
104
109 void SetValue(BYTE value)
110 {
111 m_value = value;
112 if ( ::IsWindow(_super::GetSafeHwnd()) )
113 {
114 m_ResetBitmap();
115 }
116 }
117
118protected:
119
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 {
147 CPoint po(lParam);
148 int z = m_CheckPoint(po);
149 if ( z >= 0 )
150 {
151 BYTE b = m_value;
152 m_value ^= _BIT(z);
153 if ( b != m_value )
154 {
155 m_ResetBitmap();
156 MFCLIB::SendCommandMessage(this, DIPSW_CHANGED_T);
157 }
158 }
159 }
160 break;
161 default:
162 break;
163 }
164 return _super::WindowProc(message, wParam, lParam);
165 }
166
167private:
168
170 int m_CheckPoint(CPoint po)
171 {
172 CSize sz = m_base.GetSize();
173 if ( sz.cy <= po.y || sz.cx <= po.x )
174 {
175 return -1;
176 }
177 const RGBQUAD* pRgb = m_base.GetRgbDataPtr(po.y);
178 RGBQUAD q = pRgb[po.x];
179 switch ( RGB(q.rgbRed, q.rgbGreen, q.rgbBlue) )
180 {
181 case MCC0:
182 case MCC1:
183 return 0;
184 case MCC2:
185 case MCC3:
186 return 1;
187 case MCC4:
188 case MCC5:
189 return 2;
190 case MCC6:
191 case MCC7:
192 return 3;
193 default:
194 break;
195 }
196 return -1;
197 }
198
200 void m_ResetBitmap(void)
201 {
202 CBitmapImage bi;
203 bi.Set(m_base);
204 COLORREF on = m_onColor;
205 COLORREF of = m_offColor;
206 bi.ChangePixelColor(MCC0, (m_value & _BIT(0)) ? on : of);
207 bi.ChangePixelColor(MCC1, (m_value & _BIT(0)) ? of : on);
208 bi.ChangePixelColor(MCC2, (m_value & _BIT(1)) ? on : of);
209 bi.ChangePixelColor(MCC3, (m_value & _BIT(1)) ? of : on);
210 bi.ChangePixelColor(MCC4, (m_value & _BIT(2)) ? on : of);
211 bi.ChangePixelColor(MCC5, (m_value & _BIT(2)) ? of : on);
212 bi.ChangePixelColor(MCC6, (m_value & _BIT(3)) ? on : of);
213 bi.ChangePixelColor(MCC7, (m_value & _BIT(3)) ? of : on);
214 _super::SetDrawingBitmap(bi, true, true);
215 }
216
217 CBitmapImage m_base;
218 COLORREF m_onColor;
219 COLORREF m_offColor;
220 BYTE m_value;
221};
222
223
224
225}; //MFC
226}; //TNB
227
228
229
ビットマップイメージ管理関係のヘッダ
#define _BIT(X)
BIT演算
Definition: TnbDef.h:307
描画情報表示関係のヘッダ
HBITMAP型ハンドルハンドル
ビットマップイメージ管理クラス
RGBQUAD * GetRgbDataPtr(INT_PTR y=-1)
[取得] RGBデータアドレス取得.
int ChangePixelColor(COLORREF targetColor, COLORREF drawColor)
[処理] カラー変更.
const SIZE & GetSize(void) const
[取得] イメージサイズ取得.
bool Set(int cx, int cy, COLORREF color=CLR_INVALID)
[設定] イメージ設定.
bool ToHaveRgbData(void)
[設定] RGBデータ準備.
DIPSW 風ボタンコントロールクラス.
void SetValue(BYTE value)
[設定] 値設定.
EMagicColorCode
マジックカラーコード.
virtual void PreSubclassWindow(void)
[通知] subclassing/unsubclassing functions.
void SetImage(CBitmapHandle b, COLORREF onColor=RGB(255, 255, 255), COLORREF offColor=RGB(1, 1, 1))
[設定] イメージ指定.
BYTE GetValue(void) const
[取得] 値取得.
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
CDipswButton(void)
コンストラクタ
描画情報表示コントロールクラス
LRESULT SendCommandMessage(CWnd *pCtrl, UINT cmd)
[処理] WM_COMMAND送信.
Definition: TnbMfcCommon.h:475
TNB Library
Definition: TnbDoxyTitle.txt:2