TNB Library
TnbMfcRgnControl.h
[詳解]
1#pragma once
13#include "TnbMfcCommon.h"
14
15
16
17//TNB Library
18namespace TNB {
19namespace MFC {
20
21
22
33template<typename WND = CWnd>
34class CRgnControlAddinT : public WND
35{
36 DEFSUPER(WND);
37protected:
38
40
45 {
46 ::SetWindowRgn(m_hWnd, NULL, FALSE);
47 if ( m_clientRgn != NULL )
48 {
49 _DeleteObject(m_clientRgn);
50 m_clientRgn = NULL;
51 }
52 }
53
63 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
64 {
65 switch ( message )
66 {
67 case WM_PRINT:
68 {
69 HDC dc = reinterpret_cast<HDC>(wParam);
70 if ( m_clientRgn != NULL )
71 {
72 HRGN rgn = ::CreateRectRgn(0, 0, 0, 0);
73 CPoint po = MFCLIB::GetClientPoint(this);
74 ::CombineRgn(rgn, m_clientRgn, NULL, RGN_COPY);
75 ::OffsetRgn(rgn, po.x, po.y);
76 ::SelectClipRgn(dc, rgn);
77 LRESULT r = _super::WindowProc(message, wParam, lParam);
78 _DeleteObject(rgn);
79 return r;
80 }
81 }
82 break;
83#ifndef _WIN32_WCE
84 case WM_NCPAINT:
85 if ( m_clientRgn != NULL )
86 {
87 wParam = reinterpret_cast<WPARAM>(m_clientRgn);
88 }
89 break;
90#endif
91 case WM_DESTROY:
93 break;
94 }
95 return _super::WindowProc(message, wParam, lParam);
96 }
97
98public:
99
102 {
103 }
104
106 virtual ~CRgnControlAddinT(void)
107 {
109 }
110
117 bool SetClientRgn(HRGN rgn)
118 {
120 m_clientRgn = ::CreateRectRgn(0, 0, 0, 0);
121 ::CombineRgn(m_clientRgn, rgn, NULL, RGN_COPY);
122 bool r = !! ::SetWindowRgn(m_hWnd, rgn, TRUE);
123 if ( ! r )
124 {
126 }
127 return r;
128 }
129};
130
131
132
133}; //MFC
134}; //TNB
135
136
137
MFCコントロール共通のヘッダ
領域指定コントロールサポートクラス
CRgnControlAddinT(void)
コンストラクタ
HRGN m_clientRgn
クライアントリージョン
bool SetClientRgn(HRGN rgn)
[設定] ウィンドウリージョン設定.
virtual ~CRgnControlAddinT(void)
デストラクタ
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
void DeleteClientRgnHandle(void)
[削除] クライアントリージョン破棄
CPoint GetClientPoint(CWnd *pWnd)
[取得] クライアント位置取得.
Definition: TnbMfcCommon.h:121
TNB Library
Definition: TnbDoxyTitle.txt:2