TNB Library
TnbMfcLinkText.h
[詳解]
1#pragma once
14#include "TnbMfcCursorControl.h"
15#include "TnbMfcCommon.h"
16
17
18
19//TNB Library
20namespace TNB {
21namespace MFC {
22
23
24
45class CLinkText : public CCursorControlAddinT<CAbstractButton>, public CDrawTextBase
46{
48 typedef CDrawTextBase _text;
49 TColor m_hoverColors;
50 TColor m_visitColors;
51 COLORREF m_focusMarkColor;
52 bool m_boIsVisit;
53 bool m_boIsUnderlineHoverOnly;
55 CFont* m_SetFont(CDC* pDC, CFont& f, bool withUnderline)
56 {
57 LOGFONT logFont;
58 _super::GetFont()->GetLogFont(&logFont);
59 logFont.lfUnderline = withUnderline; //アンダーライン
60 f.CreateFontIndirect(&logFont);
61 return pDC->SelectObject(&f);
62 }
63
64protected:
65
70 virtual void OnDrawButton(CDC* pDC)
71 {
72 CString str;
73 GetWindowText(str);
74 if ( str.IsEmpty() )
75 {
76 return;
77 }
78 bool withUnderline = false;
81 switch ( _super::GetButtonState() )
82 {
83 case ES_Pushed: // 押下状態
84 withUnderline = true;
85 case ES_Normal: // 標準状態
86 default:
87 if ( m_boIsVisit )
88 {
89 pc = &m_visitColors;
90 }
91 break;
92 case ES_Hover: // ホバー状態
93 pc = &m_hoverColors;
94 withUnderline = true;
95 break;
96 case ES_Disable:// 無効状態
97 gc.forward = CLR_INVALID;
98 pc = &gc;
99 break;
100 }
101 if ( ! m_boIsUnderlineHoverOnly )
102 {
103 withUnderline = true;
104 }
105 CFont font;
106 CFont* pOldFont = m_SetFont(pDC, font, withUnderline);
107 RECT rect;
108 _super::GetClientRect(&rect);
109 UINT fmt = CTextDrawer::StaticToDrawStyle(_super::GetStyle()) | DT_NOPREFIX;
110 pDC->SetBkMode(TRANSPARENT); // バックカラーは変更なし
111 _text::DrawText(pDC, rect, fmt, *pc, str);
112 if ( HasFocus() )
113 {
114 MFCLIB::DrawDottedBox(pDC, rect, m_focusMarkColor);
115 }
116 pDC->SelectObject(pOldFont);
117 }
118
124 virtual void OnChangeState(EState state)
125 {
126 MFCLIB::DrawParent(this);
127 }
128
138 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
139 {
140 if ( message == WM_ERASEBKGND ) { return 0; }
141 LRESULT r = _super::WindowProc(message, wParam, lParam);
142 if ( message == WM_SETFOCUS || message == WM_KILLFOCUS || message == WM_ACTIVATE )
143 {
144 MFCLIB::DrawParent(this);
145 }
146 return r;
147 }
148
149public:
150
152 CLinkText(void) : m_boIsVisit(false), m_focusMarkColor(RGB(0, 0, 0)), m_boIsUnderlineHoverOnly(false)
153 {
154 }
155
157 virtual ~CLinkText(void)
158 {
159 }
160
168 {
169 _super::operator=(other);
170 _text::operator=(other);
171 m_hoverColors = other.m_hoverColors;
172 m_visitColors = other.m_visitColors;
173 m_focusMarkColor = other.m_focusMarkColor;
174 m_boIsUnderlineHoverOnly = other.m_boIsUnderlineHoverOnly;
175 return *this;
176 }
177
183 void SetVisitFlag(bool r = true)
184 {
185 m_boIsVisit = r;
186 RedrawWindow();
187 }
188
194 void SetUnderlineMode(bool r)
195 {
196 m_boIsUnderlineHoverOnly = r;
197 }
198
204 void SetTextHoverColor(COLORREF color1, COLORREF color2 = CLR_INVALID)
205 {
206 m_hoverColors.forward = color1;
207 m_hoverColors.back = color2;
208 }
209
215 void SetTextVisitColor(COLORREF color1, COLORREF color2 = CLR_INVALID)
216 {
217 m_visitColors.forward = color1;
218 m_visitColors.back = color2;
219 }
220
225 void SetFocusMarkColor(COLORREF color)
226 {
227 m_focusMarkColor = color;
228 }
229
240 void AdjustSize(int margin = 2)
241 {
242 CString str;
243 GetWindowText(str);
244 if ( str.IsEmpty() ) { return; }
245 UINT fmt = CTextDrawer::StaticToDrawStyle(_super::GetStyle()) | DT_NOPREFIX;
246 CDC* pDC = GetDC();
247 CFont font;
248 CFont* pOldFont = m_SetFont(pDC, font, true);
249 MFCLIB::AdjustClientSize(pDC, fmt, str, margin);
250 pDC->SelectObject(pOldFont);
251 ReleaseDC(pDC);
252 }
253
259 void SetShortcutKey(TCHAR key)
260 {
261 }
262};
263
264
265
286{
287 DEFSUPER(CLinkText);
288 CString m_action;
289 CString m_target;
290protected:
291
296 virtual void OnClickButton(void)
297 {
298 _super::SpecialCursor(::LoadCursor(NULL, IDC_WAIT));
299 SHELLEXECUTEINFO sei;
300 ::ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));
301 sei.cbSize = sizeof(SHELLEXECUTEINFO); // Set Size
302 sei.lpVerb = m_action; // Set Verb
303 sei.lpFile = m_target; // Set Target
304 sei.nShow = SW_SHOWNORMAL; // Show Normal
305 ::ShellExecuteEx(&sei);
306 _super::SetVisitFlag();
307 _super::ResetCursor();
308 }
309
310public:
311
313 CHyperLinkText(void) : m_action(_T("open"))
314 {
315 _super::SetTextColor(RGB(0, 0, 255));
316 _super::SetTextHoverColor(RGB(255, 128, 0));
317 _super::SetTextVisitColor(RGB(200, 0, 0));
318 }
319
324 void SetTarget(LPCTSTR lpszTarget)
325 {
326 m_target = lpszTarget;
327 }
328
335 void SetAction(LPCTSTR lpszAction)
336 {
337 m_action = lpszAction;
338 }
339};
340
341
342
343}; //MFC
344}; //TNB
345
346
ボタン抽象関係のヘッダ
MFCコントロール共通のヘッダ
カーソルコントロール処理関係のヘッダ
static DWORD StaticToDrawStyle(DWORD staticStyle)
[変換] StaticスタイルをDrawTextスタイルに変換
virtual bool HasFocus(void) const
[確認] フォーカスの有無
マウスカーソル制御クラス
テキスト描画ベースクラス
Definition: TnbMfcCommon.h:560
virtual void DrawText(CDC *pDC, const RECT &rect, UINT drawStyle, const TColor &c, LPCTSTR str)
[表示] 文字表示.
Definition: TnbMfcCommon.h:585
TColor m_normalColors
標準状態色
Definition: TnbMfcCommon.h:572
ハイパーリンクテキストコントロール
void SetAction(LPCTSTR lpszAction)
[設定] アクション設定.
CHyperLinkText(void)
コンストラクタ
void SetTarget(LPCTSTR lpszTarget)
[設定] ターゲット設定.
virtual void OnClickButton(void)
[通知] クリック.
リンクテキストコントロール
void SetShortcutKey(TCHAR key)
[設定] ショートカットキー設定.
void SetUnderlineMode(bool r)
[設定] アンダーバー設定.
virtual void OnChangeState(EState state)
[通知] 状態変化通知.
void SetVisitFlag(bool r=true)
[設定] 訪問済みフラグ設定.
void SetFocusMarkColor(COLORREF color)
[設定] フォーカスマーク色指定.
CLinkText & operator=(const CLinkText &other)
[複製] 情報複製.
CLinkText(void)
コンストラクタ
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
virtual void OnDrawButton(CDC *pDC)
[通知] 描画
virtual ~CLinkText(void)
デストラクタ
void SetTextVisitColor(COLORREF color1, COLORREF color2=CLR_INVALID)
[設定] 訪問済み状態テキスト色指定.
void AdjustSize(int margin=2)
[設定] サイズ調整.
void SetTextHoverColor(COLORREF color1, COLORREF color2=CLR_INVALID)
[設定] ホバー状態テキスト色指定.
void DrawDottedBox(CDC *pDC, const RECT &rect, COLORREF color)
[表示] 破線箱表示.
Definition: TnbMfcCommon.h:169
void AdjustClientSize(CWnd *pWnd, CDC *pDC, UINT drawStyle, LPCTSTR lpsz, int margin=2)
[設定] クライアントサイズ調整.
Definition: TnbMfcCommon.h:215
void DrawParent(CWnd *pWndControl, bool boIsRedraw=true)
[表示] 親表示.
Definition: TnbMfcCommon.h:180
TNB Library
Definition: TnbDoxyTitle.txt:2
カラーセット型
Definition: TnbMfcCommon.h:564
COLORREF forward
前の文字の色
Definition: TnbMfcCommon.h:565
COLORREF back
後ろの文字の色
Definition: TnbMfcCommon.h:566