TNB Library
TnbIconManager.h
[詳解]
1#pragma once
11#include "TnbMap.h"
12#include "TnbStr.h"
13#include <Shellapi.h>
14
15
16//TNB Library
17namespace TNB
18{
19
20
21
53{
54 CMapT<int, HICON> m_mapIdIcon;
55 CVectorT<HICON> m_vIcon;
57 HICON m_Load(int iIconResourceId, HINSTANCE hIns)
58 {
59 LPCTSTR lpsz = NULL;
60 int cx = 0;
61 int cy = 0;
62 if ( iIconResourceId < 0 )
63 {
64 lpsz = MAKEINTRESOURCE(-iIconResourceId);
65 cx = ::GetSystemMetrics(SM_CXSMICON); // スモールアイコンの幅
66 cy = ::GetSystemMetrics(SM_CYSMICON);
67 }
68 else
69 {
70 lpsz = MAKEINTRESOURCE(iIconResourceId);
71 }
72 HANDLE r = ::LoadImage(hIns, lpsz, IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR);
73 if ( r == NULL )
74 {
75 r = ::LoadImage(hIns, lpsz, IMAGE_CURSOR, cx, cy, LR_DEFAULTCOLOR);
76 }
77 return static_cast<HICON>(r);
78 }
79protected:
80
86 void m_Destroy(HICON h)
87 {
88#ifndef _WIN32_WCE
89 ICONINFO ii;
90 if ( ::GetIconInfo(h, &ii) )
91 {
92 ii.fIcon ? ::DestroyIcon(h) : ::DestroyCursor(h);
93 }
94#else
95 ::DestroyIcon(h);
96#endif
97 }
98
99public:
100
101#ifndef _WIN32_WCE
102
106 {
107 E_APPLICATION = (INT_PTR)(IDI_APPLICATION),
108 E_ASTERISK = (INT_PTR)(IDI_ASTERISK),
109 E_ERROR = (INT_PTR)(IDI_ERROR),
110 E_EXCLAMATION = (INT_PTR)(IDI_EXCLAMATION),
111 E_HAND = (INT_PTR)(IDI_HAND),
112 E_INFORMATION = (INT_PTR)(IDI_INFORMATION),
113 E_QUESTION = (INT_PTR)(IDI_QUESTION),
114 E_WARNING = (INT_PTR)(IDI_WARNING),
115 E_WINLOGO = (INT_PTR)(IDI_WINLOGO),
116 };
117
118#endif
119
122 {
123 }
124
126 virtual ~CIconManager(void)
127 {
128 DestroyAll();
129 }
130
135 void DestroyAll(void)
136 {
138 loop ( i, avu.GetSize() )
139 {
140 m_Destroy(avu.At(i));
141 }
142 loop ( i, m_vIcon.GetSize() )
143 {
144 m_Destroy(m_vIcon[i]);
145 }
146 m_mapIdIcon.RemoveAll();
147 m_vIcon.RemoveAll();
148 }
149
156 bool Destroy(int iIconResourceId)
157 {
158 if ( m_mapIdIcon.HasKey(iIconResourceId) )
159 {
160 m_Destroy(m_mapIdIcon[iIconResourceId]);
161 }
162 return m_mapIdIcon.RemoveKey(iIconResourceId);
163 }
164
171 bool Destroy(HICON hIcon)
172 {
174 INDEX i = av.Find(hIcon);
175 if ( i != INVALID_INDEX )
176 {
177 m_mapIdIcon.Remove(i);
178 m_Destroy(hIcon);
179 return true;
180 }
181 i = m_vIcon.Find(hIcon);
182 if ( i != INVALID_INDEX )
183 {
184 m_vIcon.Remove(i);
185 m_Destroy(hIcon);
186 return true;
187 }
188 return false;
189 }
190
198 HICON LoadResource(int iIconResourceId, HINSTANCE hIns)
199 {
200 HICON hIcon = NULL;
201 if ( ! m_mapIdIcon.Lookup(iIconResourceId, hIcon) )
202 {
203 hIcon = m_Load(iIconResourceId, hIns);
204 if ( hIcon != NULL)
205 {
206 m_mapIdIcon[iIconResourceId] = hIcon;
207 }
208 }
209 return hIcon;
210 }
211
219 HICON LoadResource(int iIconResourceId)
220 {
221 return LoadResource(iIconResourceId, GetInstanceHandleByTnb(EI_Icon));
222 }
223
231 HICON operator[](int iIconResourceId)
232 {
233 return LoadResource(iIconResourceId);
234 }
235
236#ifndef _WIN32_WCE
237
244 HICON LoadSystem(ESystemIconId systemId)
245 {
246 return ::LoadIcon(NULL, reinterpret_cast<LPCTSTR>(systemId));
247 }
248
257 INT_PTR ExtractNumber(LPCTSTR lpszFile)
258 {
259 return reinterpret_cast<INT_PTR>(::ExtractIcon(GetInstanceHandleByTnb(EI_Process), lpszFile, UINT_MAX));
260 }
261
271 HICON Extract(LPCTSTR lpszFile, UINT iconIndex)
272 {
273 HICON hIcon = ::ExtractIcon(GetInstanceHandleByTnb(EI_Process), lpszFile, iconIndex);
274 if ( hIcon != NULL )
275 {
276 m_vIcon.Add(hIcon);
277 }
278 return hIcon;
279 }
280
281#endif
282
289 void Attach(HICON hIcon)
290 {
292 if ( av.Find(hIcon) == INVALID_INDEX )
293 {
294 if ( m_vIcon.Find(hIcon) == INVALID_INDEX )
295 {
296 m_vIcon.Add(hIcon);
297 }
298 }
299 }
300
301
302#if 0
314 HICON LoadFileInfo(LPCTSTR lpszFile, UINT uAddFlags = SHGFI_LARGEICON)
315 {
316 SHFILEINFO info = { 0 };
317 UINT uFlags = SHGFI_ICON | uAddFlags;
318 ::SHGetFileInfo(lpszFile, 0, &info, sizeof(SHFILEINFO), uFlags);
319 if ( info.hIcon != NULL )
320 {
321 m_vIcon.Add(info.hIcon);
322 }
323 return info.hIcon;
324 }
325#endif
326};
327
328
329
330};
331
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
マップ型情報管理関係のヘッダ
文字列管理関係のヘッダ
[ETC] コピー不可能スーパークラス.
Definition: TnbDef.h:599
アイコン管理クラス
void DestroyAll(void)
[開放] 全ハンドル開放.
HICON operator[](int iIconResourceId)
[取得] リソースから取得
INT_PTR ExtractNumber(LPCTSTR lpszFile)
[取得] ファイルから抽出可能数.
bool Destroy(int iIconResourceId)
[開放] ハンドル開放.
HICON LoadResource(int iIconResourceId)
[取得] リソースから取得
HICON LoadSystem(ESystemIconId systemId)
[取得] システムから取得
HICON Extract(LPCTSTR lpszFile, UINT iconIndex)
[取得] ファイルから抽出.
virtual ~CIconManager(void)
デストラクタ
void Attach(HICON hIcon)
[指定] ハンドル管理.
bool Destroy(HICON hIcon)
[開放] ハンドル開放.
ESystemIconId
システムのアイコンID値
@ E_QUESTION
疑問符のアイコン
@ E_ASTERISK
E_INFORMATION と同じです
@ E_ERROR
ストップマークのアイコン(米国の歩行者用信号の赤と同じで、手を開いて制止しているデザインです)
@ E_WARNING
感嘆符のアイコン
@ E_INFORMATION
情報アイコン(吹き出しの中に i の文字)
@ E_WINLOGO
Windows ロゴのアイコン
@ E_EXCLAMATION
E_WARNING と同じです
@ E_APPLICATION
既定のアプリケーションアイコン
@ E_HAND
E_ERROR と同じです
CIconManager(void)
コンストラクタ
HICON LoadResource(int iIconResourceId, HINSTANCE hIns)
[取得] リソースから取得
void m_Destroy(HICON h)
[破棄] ハンドル破棄.
virtual size_t GetSize(void) const
[取得] 要素数取得
Definition: TnbMap.h:327
bool RemoveKey(INK key)
[削除] キーと値を削除
Definition: TnbMap.h:504
virtual bool Remove(INDEX index)
[削除] キーと値一つ削除.
Definition: TnbMap.h:425
CConstValuesAdapter GetValuesAdapter(void) const
[取得] 値のみの参照アダプタ取得.
Definition: TnbMap.h:659
virtual const CPair & At(INDEX index) const
[取得] 要素の参照取得.
Definition: TnbMap.h:354
virtual bool RemoveAll(void)
[削除] すべてのキーと値を削除
Definition: TnbMap.h:434
bool HasKey(INK key) const
[確認] キー有無
Definition: TnbMap.h:589
bool Lookup(INK key, VAL &_rValue) const
[取得] キーに対する値取得
Definition: TnbMap.h:574
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
virtual bool Remove(INDEX index)
[削除] 要素一つ削除.
Definition: TnbVector.h:397
virtual bool RemoveAll(void)
[削除] 空化
Definition: TnbVector.h:565
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
Definition: TnbVector.h:383
HINSTANCE GetInstanceHandleByTnb(EInstanceType type=EI_Process)
[取得] インスタンスハンドル取得.
Definition: TnbDef.h:1341
@ EI_Icon
アイコンリソース用
Definition: TnbDef.h:1261
@ EI_Process
プロセス用
Definition: TnbDef.h:1259
TNB Library
Definition: TnbDoxyTitle.txt:2
INDEX Find(const IChecker &checker, INDEX startIndex=0, bool boIsReverse=false) const
[検索] 条件一致要素の検索.