TNB Library
TnbMfcTextProgressCtrl.h
[詳解]
1#pragma once
13#include "TnbMfcCommon.h"
14#include "TnbStr.h"
15#include "TnbBitmapImage.h"
16#include "TnbMfcBitmapDC.h"
17
18
19
20//TNB Library
21namespace TNB {
22namespace MFC {
23
24
25
38class CTextProgressCtrl : public CProgressCtrl
39{
40 DEFSUPER(CProgressCtrl);
41public:
42
44 CTextProgressCtrl(void) : m_barColor(::GetSysColor(COLOR_HIGHLIGHT)), m_backColor(::GetSysColor(COLOR_WINDOW))
45 {
46 }
47
52 void SetWindowText(LPCTSTR lpszText)
53 {
54 _super::SetWindowText(lpszText);
55 m_CreateImage();
56 RedrawWindow();
57 }
58
64 void SetColor(COLORREF barColor, COLORREF backColor)
65 {
66 m_barColor = barColor;
67 m_backColor = backColor;
68 m_CreateImage();
69 RedrawWindow();
70 }
71
77 void SetFont(CFont* pFont, BOOL bRedraw = TRUE)
78 {
79 _super::SetFont(pFont, FALSE);
80 if ( bRedraw )
81 {
82 m_CreateImage();
83 RedrawWindow();
84 }
85 }
86
87protected:
88
94 virtual void PreSubclassWindow(void)
95 {
96 m_CreateImage();
97 _super::PreSubclassWindow();
98 RedrawWindow();
99 }
100
110 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
111 {
112 switch ( message )
113 {
114 case WM_PRINTCLIENT:
115 {
116 CDC* pDC = CDC::FromHandle(reinterpret_cast<HDC>(wParam));
117 if ( pDC != NULL )
118 {
119 OnDrawProgressImage(pDC);
120 }
121 }
122 return 0;
123 case WM_PAINT:
124 {
125 CPaintDC dc(this); // 描画用のデバイス コンテキスト
126 OnDrawProgressImage(&dc);
127 }
128 return 0;
129 case WM_SIZE:
130 {
131 CSize sz(lParam);
132 m_CreateImage(sz.cx, sz.cy);
133 }
134 break;
135 default:
136 break;
137 }
138 return _super::WindowProc(message, wParam, lParam);
139 }
140
141private:
142
144 void OnDrawProgressImage(CDC* pDC)
145 {
146 CSize sz = m_image1.GetSize();
147 //
148 int f = _super::GetPos();
149 int m1, m2;
150 GetRange(m1, m2);
151 int xx = f * sz.cx / (m2 - m1);
152 CRect r1(0, 0, xx, sz.cy);
153 m_image2.Cut(r1).Draw(pDC->GetSafeHdc());
154 CRect r2(xx, 0, sz.cx, sz.cy);
155 m_image1.Cut(r2).Draw(pDC->GetSafeHdc(), xx, 0);
156 }
157
159 void m_Sub(CBitmapImage& _bi, int cx, int cy, COLORREF c1, COLORREF c2)
160 {
161 _bi.Set(cx, cy, c2);
162 CBitmapDC dc(&_bi);
163 CFont* pFont = dc.SelectObject(GetFont());
164 CString s;
165 GetWindowText(s);
166 dc.SetTextColor(c1);
167 dc.SetBkColor(c2);
168 CRect rc(0, 0, cx, cy);
169 CTextDrawer::DrawTextRect(dc, rc, DT_CENTER | DT_VCENTER, c1, s);
170 dc.SelectObject(pFont);
171 }
172
174 void m_CreateImage(int cx = 0, int cy = 0)
175 {
176 if ( cx == 0 || cy == 0 )
177 {
178 CRect rc;
179 GetWindowRect(rc);
180 cx = rc.Width();
181 cy = rc.Height();
182 }
183 m_Sub(m_image1, cx, cy, m_barColor, m_backColor);
184 m_Sub(m_image2, cx, cy, m_backColor, m_barColor);
185 }
186
187 COLORREF m_backColor;
188 COLORREF m_barColor;
189 CBitmapImage m_image1;
190 CBitmapImage m_image2;
191};
192
193
194
195};
196};
ビットマップイメージ管理関係のヘッダ
ビットマップDC関係のヘッダ
MFCコントロール共通のヘッダ
文字列管理関係のヘッダ
ビットマップイメージ管理クラス
CBitmapImage Cut(const RECT &rect, int cx=0, int cy=0) const
[取得] イメージ取り出し.
const SIZE & GetSize(void) const
[取得] イメージサイズ取得.
bool Set(int cx, int cy, COLORREF color=CLR_INVALID)
[設定] イメージ設定.
bool Draw(HDC hdc, int x=0, int y=0) const
[処理] イメージ描画.
static bool DrawTextRect(RECT &_rect, HDC dc, DWORD drawStyle, const POINT &offset, COLORREF color1, COLORREF color2, LPCTSTR str)
[表示] 範囲文字表示.
ビットマップデバイスコンテキストクラス
テキスト付き進捗コントロールクラス
void SetWindowText(LPCTSTR lpszText)
[設定] 文字列設定.
CTextProgressCtrl(void)
コンストラクタ
virtual void PreSubclassWindow(void)
[通知] subclassing/unsubclassing functions.
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
void SetColor(COLORREF barColor, COLORREF backColor)
[設定] カラー設定.
void SetFont(CFont *pFont, BOOL bRedraw=TRUE)
[設定] フォント設定
TNB Library
Definition: TnbDoxyTitle.txt:2