TNB Library
TnbMfcDrawingStatic.h
[詳解]
1#pragma once
13#include "TnbMfcCommon.h"
14#include "TnbBitmapDrawer.h"
15#include "TnbMfcRgnControl.h"
16
17
18
19//TNB Library
20namespace TNB {
21namespace MFC {
22
23
24
45{
47public:
48
50 virtual ~CDrawingStatic(void)
51 {
52 }
53
55 CDrawingStatic(void) : _super()
56 {
57 }
58
60 CDrawingStatic(const IDrawable& draw) : _super()
61 {
62 m_pDrawing = draw.Clone();
63 }
64
71 {
72 if ( ! other.m_pDrawing.IsNull() )
73 {
74 m_pDrawing = other.m_pDrawing->Clone();
75 }
76 m_Resize();
77 return *this;
78 }
79
87 void SetDrawingObject(const IDrawable& draw, bool isClientSizeAdjust = true, bool isRedraw = false)
88 {
89 m_pDrawing = draw.Clone();
90 if ( isClientSizeAdjust )
91 {
92 m_Resize();
93 }
94 else if ( m_pDrawing != NULL )
95 {
96 CRect rc;
97 _super::GetClientRect(&rc);
98 m_pDrawing->Resize(rc.Size());
99 }
100 if ( isRedraw )
101 {
102 CClientDC dc(this);
103 m_Draw(&dc);
104 }
105 }
106
114 void SetDrawingBitmap(CBitmapHandle bmp, bool isAdjust = true, bool isRedraw = false)
115 {
116 SetDrawingObject(CBitmapDrawer(bmp), isAdjust ,isRedraw);
117 }
118
125 bool SetClientRgnEx(COLORREF color = CLR_AUTOSELECT)
126 {
127 if ( m_pDrawing.IsNull() ) { return false; }
128 if ( color == CLR_INVALID )
129 {
130 HRGN rgn = NULL;
131 return !! SetClientRgn(rgn);
132 }
133 CBitmapImage bi(CBitmapDrawer::ToBitmap(*m_pDrawing, color));
134 HRGN rgn = bi.CreateRgn(color);
135 if ( ! SetClientRgn(rgn) )
136 {
137 _DeleteObject(rgn);
138 return false;
139 }
140 return true;
141 }
142
143protected:
144
154 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
155 {
156 switch ( message )
157 {
158 case WM_ERASEBKGND:
159 TTRACE0("WM_ERASEBKGND\n");
160 return 0;
161 case WM_PRINTCLIENT:
162 TTRACE0("WM_PRINTCLIENT\n");
163 {
164 CDC* pDC = CDC::FromHandle(reinterpret_cast<HDC>(wParam));
165 m_Draw(pDC);
166 }
167 return 0;
168 case WM_PAINT:
169 TTRACE0("WM_PAINT\n");
170 {
171 CPaintDC dc(this); // 描画用のデバイス コンテキスト
172 m_Draw(&dc);
173 }
174 return 0;
175 case WM_ENABLE:
176 TTRACE0("WM_ENABLE\n");
177 return 0;
178 case WM_SIZE:
179 if ( ! m_pDrawing.IsNull() )
180 {
181 CRect rc;
182 _super::GetClientRect(&rc);
183 m_pDrawing->Resize(rc.Size());
184 }
185 break;
186 }
187 return _super::WindowProc(message, wParam, lParam);
188 }
189
195 virtual void PreSubclassWindow(void)
196 {
197 HBITMAP hBmp = reinterpret_cast<HBITMAP>(_super::SendMessage(STM_GETIMAGE, IMAGE_BITMAP));
198 if ( hBmp != NULL )
199 {
200 ::DeleteObject(hBmp);
201 }
202 HICON hIcon = reinterpret_cast<HICON>(_super::SendMessage(STM_GETIMAGE, IMAGE_ICON));
203 if ( hIcon != NULL )
204 {
205 ::DeleteObject(hIcon);
206 }
207 _super::ModifyStyle(0, SS_OWNERDRAW);
208 _super::PreSubclassWindow();
209 m_Resize();
210 }
211
212private:
213 IDrawable::Ptr m_pDrawing;
215 void m_Resize(void)
216 {
217 if ( m_pDrawing.IsNull() ) { return; }
218 SIZE size;
219 if ( m_pDrawing->GetSize(size) )
220 {
221 MFCLIB::ChangeClientSize(this, size.cx, size.cy);
222 }
223 }
225 void m_Draw(CDC* pDC)
226 {
227 if ( ! m_pDrawing.IsNull() )
228 {
229 if ( m_clientRgn != NULL )
230 {
232 }
233 else
234 {
235#ifndef _WIN32_WCE
236 //@ 100316 いらない? CEではあるとNG
237 CRect rc;
238 _super::GetClientRect(&rc);
239 HRGN rgn = ::CreateRectRgnIndirect(&rc);
240 ::ExtSelectClipRgn(*pDC, rgn, RGN_AND);
241 _DeleteObject(rgn);
242#endif
243 }
244 CWnd* pWnd = _super::GetParent();
245 if ( pWnd != NULL )
246 {
247 pWnd->SendMessage(WM_CTLCOLORSTATIC,
248 reinterpret_cast<WPARAM>(pDC->GetSafeHdc()), reinterpret_cast<LPARAM>(m_hWnd));
249 }
250 m_pDrawing->Draw(*pDC);
251 }
252 }
253};
254
255
256
257}; //MFC
258}; //TNB
259
260
261
ビットマップ描画関係のヘッダ
MFCコントロール共通のヘッダ
領域指定コントロールクラス関係のヘッダ
ウィンドウ管理.
ビットマップ描画クラス
static CBitmapHandle ToBitmap(const IDrawable &draw, COLORREF color=CLR_INVALID)
[作成] ビットマップ作成.
HBITMAP型ハンドルハンドル
ビットマップイメージ管理クラス
HRGN CreateRgn(COLORREF transColor=CLR_AUTOSELECT) const
[作成] リージョン作成.
bool IsNull(void) const
[確認] NULLチェック
描画情報表示コントロールクラス
void SetDrawingBitmap(CBitmapHandle bmp, bool isAdjust=true, bool isRedraw=false)
[設定] 描画情報設定.
void SetDrawingObject(const IDrawable &draw, bool isClientSizeAdjust=true, bool isRedraw=false)
[設定] 描画情報設定.
CDrawingStatic & operator=(const CDrawingStatic &other)
コピーオペレータ.
virtual ~CDrawingStatic(void)
デストラクタ
virtual void PreSubclassWindow(void)
[通知] subclassing/unsubclassing functions.
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
CDrawingStatic(void)
コンストラクタ
CDrawingStatic(const IDrawable &draw)
代入コンストラクタ
bool SetClientRgnEx(COLORREF color=CLR_AUTOSELECT)
[設定] クライアントリージョン設定.
領域指定コントロールサポートクラス
HRGN m_clientRgn
クライアントリージョン
bool SetClientRgn(HRGN rgn)
[設定] ウィンドウリージョン設定.
bool ChangeClientSize(CWnd *pWnd, int cx=-1, int cy=-1)
[設定] クライアントサイズ設定.
Definition: TnbMfcCommon.h:102
int SelectClipRgnOrg(CDC *pDC, HRGN rgn, int mode=RGN_COPY)
[設定] リージョン設定.
Definition: TnbMfcCommon.h:347
TNB Library
Definition: TnbDoxyTitle.txt:2
描画情報インターフェース
Definition: TnbDrawable.h:37
virtual bool Resize(const SIZE &size)=0
[設定] サイズ設定.
virtual bool GetSize(SIZE &_size) const =0
[取得] サイズ取得.
virtual IDrawable * Clone(void) const =0
[作成] クローン作成.
virtual void Draw(HDC dc, int x=0, int y=0) const =0
[描画] 描画.