TNB Library
TnbMfcToolTip.h
[詳解]
1#pragma once
11#include "TnbMfcCommon.h"
12#include "TnbSimpleMap.h"
13
14
15
16//TNB Library
17namespace TNB {
18namespace MFC {
19
20
21
43template<typename TYP = CDialog>
44class CToolTipAddinT : public TYP
45{
46 DEFSUPER(TYP);
47public:
48
50 CToolTipAddinT(UINT id, CWnd* pParent) : _super(id, pParent), m_pActiveWnd(NULL), m_activeId(-1)
51 {
52 }
53
58 CToolTipCtrl& ReferToolTipCtrl(void)
59 {
60 m_TipCreate();
61 return m_toolTip;
62 }
63
69 void AddToolTip(CWnd* P, LPCTSTR lpsz = NULL)
70 {
71 if ( P != NULL )
72 {
73 m_TipCreate();
74 m_toolTip.AddTool(P);
75 }
76 m_strMap[P->GetDlgCtrlID()] = lpsz;
77 }
78
84 void AddToolTip(UINT ctrlId, LPCTSTR lpsz = NULL)
85 {
86 CWnd* P = GetDlgItem(ctrlId);
87 if ( P != NULL )
88 {
89 m_TipCreate();
90 m_toolTip.AddTool(P);
91 }
92 m_strMap[ctrlId] = lpsz;
93 }
94
95protected:
102 virtual BOOL PreTranslateMessage(MSG* pMsg)
103 {
104 m_toolTip.RelayEvent(pMsg);
105 return _super::PreTranslateMessage(pMsg);
106 }
116 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
117 {
118 switch ( message )
119 {
120 case WM_INITDIALOG:
121 m_TipCreate();
122 m_toolTip.Activate(TRUE);
123// m_toolTip.AddTool(this);
124 break;
125 case WM_DESTROY:
126 m_toolTip.DestroyWindow();
127 break;
128 case 0x36A:
129 if ( m_pActiveWnd != NULL )
130 {
131 INT_PTR i = m_TestNowPosItem(m_pActiveWnd);
132 if ( i < 0 )
133 {
134 i = m_pActiveWnd->GetDlgCtrlID();
135 }
136 if ( i != m_activeId )
137 {
138 m_toolTip.Pop();
139 }
140 }
141 break;
142 case WM_NOTIFY:
143 {
144 NMHDR* pNMHDR = reinterpret_cast<NMHDR*>(lParam);
145 if ( pNMHDR->code == TTN_POP )
146 {
147 m_pActiveWnd = NULL;
148 m_activeId = -1;
149 }
150 else if ( pNMHDR->code == TTN_NEEDTEXT )
151 {
152 UINT_PTR id = pNMHDR->idFrom;
153 TOOLTIPTEXT* P = reinterpret_cast<TOOLTIPTEXT *>(pNMHDR);
154 if ( (P->uFlags & TTF_IDISHWND) != 0 )
155 {
156 CWnd* pWnd = CWnd::FromHandle(reinterpret_cast<HWND>(id));
157 INT_PTR i = m_TestNowPosItem(pWnd);
158 if ( i < 0 )
159 {
160 id = pWnd->GetDlgCtrlID();
161 }
162 else
163 {
164 id = i;
165 }
166 if ( id != 0 )
167 {
168 CSimpleStr s;
169 if ( m_Find(s, id) )
170 {
171 m_workStr = s;
172 P->lpszText = m_workStr;
173 P->hinst = 0;
174 }
175 else
176 {
177 P->lpszText = MAKEINTRESOURCE(id);
178 P->hinst = AfxGetResourceHandle();
179 }
180 m_pActiveWnd = pWnd;
181 m_activeId = id;
182 return TRUE ;
183 }
184 }
185 }
186 }
187 break;
188 default:
189// TRACE1("msg = 0x%X\n", message);
190 break;
191 }
192 return _super::WindowProc(message, wParam, lParam);
193 }
194
195private:
196 CToolTipCtrl m_toolTip;
197 CSimpleStr m_workStr;
199 CWnd* m_pActiveWnd;
200 INT_PTR m_activeId;
202 void m_TipCreate(void)
203 {
204 if ( ! ::IsWindow(m_toolTip) )
205 {
206 m_toolTip.Create(this, TTS_ALWAYSTIP);
207 }
208 }
210 INT_PTR m_TestNowPosItem(CWnd* pWnd)
211 {
212 TOOLINFO ti = { sizeof(TOOLINFO) };
213 POINT po = { 0, 0 };
214 ::GetCursorPos(&po);
215 pWnd->ScreenToClient(&po);
216 return pWnd->OnToolHitTest(po, &ti);
217 }
219 bool m_Find(CSimpleStr&_s, UINT_PTR id)
220 {
221 if ( m_strMap.HasKey(id) )
222 {
223 _s = m_strMap[id];
224 return ! _s.IsEmpty();
225 }
226 return false;
227 }
228};
229
230
231
232}; //MFC
233}; //TNB
234
235
236
MFCコントロール共通のヘッダ
簡易配列型情報管理関係のヘッダ
ウィンドウ管理.
マップ型情報管理テンプレート
Definition: TnbSimpleMap.h:44
bool HasKey(INK key) const
[確認] キー有無
Definition: TnbSimpleMap.h:210
簡易文字列管理クラス.
Definition: TnbDef.h:772
bool IsEmpty(void) const
[確認] 空チェック
Definition: TnbDef.h:827
ツールチップ制御クラス
Definition: TnbMfcToolTip.h:45
CToolTipAddinT(UINT id, CWnd *pParent)
コンストラクタ
Definition: TnbMfcToolTip.h:50
void AddToolTip(UINT ctrlId, LPCTSTR lpsz=NULL)
[追加] ツールチップ追加.
Definition: TnbMfcToolTip.h:84
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
virtual BOOL PreTranslateMessage(MSG *pMsg)
[通知] for translating Windows messages in main message pump
CToolTipCtrl & ReferToolTipCtrl(void)
[参照] ツールチップコントロール参照.
Definition: TnbMfcToolTip.h:58
void AddToolTip(CWnd *P, LPCTSTR lpsz=NULL)
[追加] ツールチップ追加.
Definition: TnbMfcToolTip.h:69
TNB Library
Definition: TnbDoxyTitle.txt:2