TNB Library
TnbMfcRgnSemitransparentButton.h
[詳解]
1#pragma once
13#include "TnbMfcRgnButton.h"
14
15
16
17//TNB Library
18namespace TNB {
19namespace MFC {
20
21
22
55template<BYTE MODE = 0x1F, DWORD PAR = 50>
57{
58 DEFSUPER(CRgnButton);
59 BYTE m_semitransMode;
60 DWORD m_parsent;
61 bool m_boIsDoGetParentImage;
62 bool m_boIsDoIniting;
64 void m_Compose(CBitmapHandle& _hh, const CBitmapImage& parentBitmap)
65 {
66 CBitmapImage bi;
67 bi.Attach(_hh);
68 bi.InsertOnAlphaBlend(0, 0, parentBitmap, 100 - m_parsent);
69 _hh = bi.GetBitmapHandle();
70 }
72 void m_AllComp(const CBitmapImage& parentBitmap)
73 {
74 loop ( i, 4 )
75 {
76 if ( (m_semitransMode & _BIT(i)) != 0 )
77 {
78 m_Compose(_super::m_bmpButtons[i], parentBitmap);
79 }
80 }
81 if ( (m_semitransMode & _BIT(4)) != 0 && ! IS_RGBVALUE(m_focusMaskColor) )
82 {
84 m_Compose(h, parentBitmap);
86 }
87 }
88protected:
89
99 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
100 {
101 if ( message == WM_PAINT )
102 {
103 if ( m_boIsDoIniting ) { return 0; }
104 if ( m_boIsDoGetParentImage )
105 {
106 LRESULT rr = _super::WindowProc(message, wParam, lParam);
107 m_boIsDoIniting = true;
108 m_boIsDoGetParentImage = false;
109#if 0
110 CRect rect;
111 GetWindowRect(&rect);
112 CWnd* pWnd = GetParent();
113 ASSERTLIB( pWnd != NULL );
114 DWORD dwMod = 0;
115 if ( (pWnd->GetExStyle() & WS_EX_LAYERED) == 0 )
116 {
118 dwMod = WS_EX_LAYERED;
119 }
120 pWnd->ScreenToClient(&rect);
121 pWnd->RedrawWindow(&rect);
122 CDC* pDC = pWnd->GetDC();
123 ASSERT( pDC != NULL );
124 CBitmapImage parentBitmap;
125 parentBitmap.Set(*pDC, rect);
126 pWnd->ReleaseDC(pDC);
127 m_AllComp(parentBitmap);
128 pWnd->ModifyStyleEx(dwMod, 0);
129#else
130 CWnd* pWnd = _super::GetParent();
131 CBitmapImage bi;
132 bi.SetFromClient(*pWnd);
133 CRect rect;
134 _super::GetWindowRect(rect);
135 pWnd->ScreenToClient(rect);
136 m_AllComp(bi.Cut(rect));
137#endif
138 m_boIsDoIniting = false;
139 return rr;
140 }
141 }
142 return _super::WindowProc(message, wParam, lParam);
143 }
144public:
145
153 CRgnSemitransparentButtonT(BYTE semitransMode = MODE, DWORD parsent = PAR)
154 : _super(), m_boIsDoGetParentImage(true), m_boIsDoIniting(false)
155 , m_semitransMode(semitransMode), m_parsent(parsent)
156 {
157 }
158
165 void ReCalc(void)
166 {
167 m_boIsDoGetParentImage = true;
168 }
169};
170
171
172
173}; //MFC
174}; //TNB
175
176
177
#define _BIT(X)
BIT演算
Definition: TnbDef.h:307
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
自由型ビットマップボタン関係のヘッダ
ウィンドウ管理.
BOOL ModifyStyleEx(DWORD dwRemove, DWORD dwAdd, UINT nFlags=0)
[設定] ウィンドウ拡張スタイル変更.
DWORD GetExStyle(void) const
[取得] ウィンドウ拡張スタイル取得.
HBITMAP型ハンドルハンドル
ビットマップイメージ管理クラス
bool SetFromClient(HWND hWnd, const RECT &rect, COLORREF backColor=CLR_INVALID)
[設定] クライアントからイメージ設定.
bool Attach(CBitmapHandle bmp)
[設定] アタッチ.
CBitmapImage Cut(const RECT &rect, int cx=0, int cy=0) const
[取得] イメージ取り出し.
bool Set(int cx, int cy, COLORREF color=CLR_INVALID)
[設定] イメージ設定.
CBitmapHandle GetBitmapHandle(void)
[取得] ビットマップハンドル取得
bool InsertOnAlphaBlend(int x, int y, const CBitmapImage &bmpimg, int parsent=100, int cx=0, int cy=0)
[挿入] 半透過処理付イメージ挿入.
自由型ビットマップボタンコントロール
COLORREF m_focusMaskColor
フォーカスマークの透過色(-1ならフォーカスはマークではなく直書き)
CBitmapImage m_focusBitmap
フォーカス(マーク)BITMAP
自由型半透明ビットマップボタンコントロール
CRgnSemitransparentButtonT(BYTE semitransMode=MODE, DWORD parsent=PAR)
コンストラクタ
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
bool SetLayeredWindow(CWnd *pWnd, COLORREF crKey=0, BYTE bAlpha=255, DWORD dwFlags=E_Alpha|E_SetLayeredStyle)
[設定] SetLayeredWindow.
Definition: TnbMfcCommon.h:389
@ E_SetLayeredStyle
WS_EX_LAYERED スタイルを付加します。
Definition: TnbMfcCommon.h:374
@ E_Alpha
bAlpha を使って、レイヤードウィンドウの不透明度を決定します。
Definition: TnbMfcCommon.h:373
TNB Library
Definition: TnbDoxyTitle.txt:2