TNB Library
TnbMfcTransparentButton.h
[詳解]
1#pragma once
14#include "TnbMfcCursorControl.h"
15#include "TnbBitmapImage.h"
16
17
18
19//TNB Library
20namespace TNB {
21namespace MFC {
22
23
24
43class CTransparentButton : public CCursorControlAddinT<CAbstractButton>
44{
46public:
47
49 CTransparentButton(void) : m_hRgn(::CreateRectRgn(0, 0, 0, 0)), m_hoverParsent(-1)
50 {
51 }
52
55 {
56 if ( m_hRgn != NULL )
57 {
58 _DeleteObject(m_hRgn);
59 m_hRgn = NULL;
60 }
61 }
62
68 void SetButtonSize(const SIZE& sz)
69 {
70 HRGN rgn = ::CreateRectRgn(0, 0, sz.cx, sz.cy);
71 SetButtonRgn(rgn);
72 _DeleteObject(rgn);
73 }
74
80 void SetButtonRgn(HRGN rgn)
81 {
82 HRGN h = ::CreateRectRgn(0, 0, 0, 0);
83 ::CombineRgn(h, rgn, NULL, RGN_COPY);
84 ::CombineRgn(m_hRgn, rgn, NULL, RGN_COPY);
85 CRect rc;
86 ::GetRgnBox(m_hRgn, rc);
87 _super::SetWindowPos(NULL, 0, 0, rc.Width(), rc.Height(), SWP_NOMOVE | SWP_NOZORDER);
88 _super::SetWindowRgn(h, true);
90 }
91
96 void SetFocusColor(COLORREF c = CLR_INVALID)
97 {
98 if ( m_focusBrush.GetSafeHandle() != NULL )
99 {
100 m_focusBrush.DeleteObject();
101 }
102 if ( IS_RGBVALUE(c) )
103 {
104 m_focusBrush.CreateHatchBrush(HS_DIAGCROSS, c);
105 }
106 }
107
113 void SetHoverFillColor(int parsent, COLORREF color = RGB(0, 0, 0))
114 {
115 m_hoverParsent = parsent;
116 m_hoverColor = color;
118 }
119
120protected:
121 HRGN m_hRgn;
123 COLORREF m_hoverColor;
126
131 virtual void OnDrawButton(CDC* pDC)
132 {
133 switch ( _super::GetButtonState() )
134 {
135 case ES_Pushed:
136 case ES_Hover:
137 if ( m_hoverParsent >= 0 )
138 {
139 if ( m_hoverFill.IsEmpty() )
140 {
141 CRect rc;
142 GetClientRect(rc);
143 m_hoverFill.Set(rc.Width(), rc.Height(), m_hoverColor);
144 }
145 ::SelectClipRgn(pDC->GetSafeHdc(), m_hRgn);
147 ::SelectClipRgn(pDC->GetSafeHdc(), NULL);
148 }
149 break;
150 }
151 if ( HasFocus() )
152 {
153 if ( m_focusBrush.GetSafeHandle() != NULL )
154 {
155 pDC->SetBkMode(TRANSPARENT);
156 ::FrameRgn(pDC->GetSafeHdc(), m_hRgn, m_focusBrush, 1, 1);
157 }
158 }
159 }
160
166 virtual void OnChangeState(EState state)
167 {
168 MFCLIB::DrawParent(this, false);
169 }
170
180 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
181 {
182 if ( message == WM_DESTROY )
183 {
184 if ( m_hRgn != NULL )
185 {
186 _DeleteObject(m_hRgn);
187 m_hRgn = NULL;
188 }
189 if ( m_focusBrush.GetSafeHandle() != NULL )
190 {
191 m_focusBrush.DeleteObject();
192 }
193 }
194 if ( message == WM_ERASEBKGND )
195 {
196 return 0;
197 }
198 LRESULT r = _super::WindowProc(message, wParam, lParam);
199 if ( message == WM_SETFOCUS || message == WM_KILLFOCUS || message == WM_ACTIVATE || message == WM_MOUSELEAVE )
200 {
201 MFCLIB::DrawParent(this, false);
202 }
203 if ( message >= WM_LBUTTONDOWN && message <= WM_MOUSELAST )
204 {
205 MFCLIB::DrawParent(this, true);
206 }
207 return r;
208 }
209
215 virtual void PreSubclassWindow(void)
216 {
217 CRect rc;
218 _super::GetWindowRect(&rc);
219 SetButtonSize(rc.Size());
220 _super::PreSubclassWindow();
221 }
222};
223
224
225
226}; //MFC
227}; //TNB
228
229
230
ビットマップイメージ管理関係のヘッダ
ボタン抽象関係のヘッダ
カーソルコントロール処理関係のヘッダ
ビットマップイメージ管理クラス
bool IsEmpty(void) const
[確認] Empty状態確認.
bool Set(int cx, int cy, COLORREF color=CLR_INVALID)
[設定] イメージ設定.
void Empty(void)
[設定] 破棄.
bool AlphaBlend(HDC hdc, int x, int y, int parsent=100, int cx=0, int cy=0) const
[描画] 半透明処理付イメージ描画.
virtual bool HasFocus(void) const
[確認] フォーカスの有無
マウスカーソル制御クラス
自由型透明ボタンコントロール
void SetButtonSize(const SIZE &sz)
[設定] ボタンサイズ設定.
COLORREF m_hoverColor
ホバーカラー
virtual void OnChangeState(EState state)
[通知] 状態変化通知.
CBitmapImage m_hoverFill
ホバー用
CBrush m_focusBrush
フォーカスブラシ
~CTransparentButton(void)
デストラクタ
void SetFocusColor(COLORREF c=CLR_INVALID)
[設定] フォーカス色設定.
virtual void PreSubclassWindow(void)
[通知] subclassing/unsubclassing functions.
CTransparentButton(void)
コンストラクタ
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
virtual void OnDrawButton(CDC *pDC)
[通知] 描画
int m_hoverParsent
ホバーカラー透明度
HRGN m_hRgn
コントロールリージョン
void SetButtonRgn(HRGN rgn)
[設定] ボタン領域設定.
void SetHoverFillColor(int parsent, COLORREF color=RGB(0, 0, 0))
[設定] ホバーカラー設定.
void DrawParent(CWnd *pWndControl, bool boIsRedraw=true)
[表示] 親表示.
Definition: TnbMfcCommon.h:180
TNB Library
Definition: TnbDoxyTitle.txt:2