TNB Library
TnbMfcTinyListDialog.h
[詳解]
1#pragma once
11#include "TnbMfcColorListBox.h"
12#include "TnbMfcLightListBox.h"
13#include "TnbMfcDelayedRedraw.h"
14#include "TnbDummyWindow.h"
15#include "TnbConstStrVector.h"
16
17
18
19//TNB Library
20namespace TNB {
21namespace MFC {
22
23
24
64{
65public:
66
69 {
70 MenuId_Hide = 1000,
71 MenuId_Clear = 1001,
72 };
73
76 {
80 };
81
84 {
88 };
89
94 CTinyListDialog(bool isColorMode = true) : m_hParentWnd(NULL), m_parentMenuItem(0), m_isColorMode(isColorMode)
95 {
96 if ( isColorMode )
97 {
98 m_pListBox = &m_logColorList;
99 }
100 else
101 {
102 m_pListBox = &m_logBwList;
103 }
104 }
105
118 bool Create(const CSize& size, HFONT hFont, HWND hParentWnd, LPCTSTR lpszTitle, HICON hIcon, UINT parentMenuItem = 0)
119 {
120 // メニュー
121 if ( m_menu.GetSafeHmenu() == NULL )
122 {
123 m_subMenu1.CreateMenu();
124 m_subMenu2.CreateMenu();
125 m_menu.CreateMenu();
126 m_subMenu1.AppendMenu(0, MenuId_Hide, _T("隠す(&H)"));
127 m_subMenu2.AppendMenu(0, MenuId_Clear, _T("クリア(&C)"));
128 m_menu.AppendMenu(MF_POPUP, reinterpret_cast<UINT_PTR>(m_subMenu1.GetSafeHmenu()), _T("ファイル(&F)"));
129 m_menu.AppendMenu(MF_POPUP, reinterpret_cast<UINT_PTR>(m_subMenu2.GetSafeHmenu()), _T("表示(&H)"));
130 }
131 if ( ! m_dmyWnd.Create(this, lpszTitle, NULL, (WS_OVERLAPPEDWINDOW & ~WS_MINIMIZEBOX) | WS_CLIPCHILDREN, m_menu) )
132 {
133 return false;
134 }
135 m_parentMenuItem = parentMenuItem;
136 m_hParentWnd = hParentWnd;
137 CWnd* pDmyWnd = CWnd::FromHandle(m_dmyWnd);
138 ::SetWindowPos(m_dmyWnd, hParentWnd, 0, 0, size.cx, size.cy, 0);
139 pDmyWnd->CenterWindow();
140 CRect rc(0, 0, size.cx, size.cy);
141 DWORD style = LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL;
142 if ( m_isColorMode )
143 {
144 style |= LBS_OWNERDRAWVARIABLE;;
145 style |= LBS_HASSTRINGS;
146 }
147 else
148 {
149 style |= LBS_OWNERDRAWFIXED | LBS_NODATA;
150 }
151 m_pListBox->Create(style, rc, pDmyWnd, 1000);
152 m_pListBox->SetFont(CFont::FromHandle(hFont));
153 m_pListBox->ShowWindow(SW_SHOW);
154 m_pListBox->ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_FRAMECHANGED);
155 pDmyWnd->SendMessage(WM_SETICON, 0, reinterpret_cast<LPARAM>(hIcon));
156 pDmyWnd->Detach();
157 OnCreate();
158 return true;
159 }
160
172 bool Create(const CSize& size, HWND hParentWnd, LPCTSTR lpszTitle, HICON hIcon, UINT parentMenuItem = 0)
173 {
174 HFONT hFont = reinterpret_cast<HFONT>(::SendMessage(hParentWnd, WM_GETFONT, 0, 0));
175 return Create(size, hFont, hParentWnd, lpszTitle, hIcon, parentMenuItem);
176 }
177
183 {
184 if ( m_dmyWnd != NULL )
185 {
186 CRect rc;
187 ::GetWindowRect(m_hParentWnd, &rc);
188 switch ( mode )
189 {
190 case CENTER:// 中央
191 {
192 CWnd* pDmyWnd = CWnd::FromHandle(m_dmyWnd);
193 pDmyWnd->CenterWindow();
194 pDmyWnd->Detach();
195 }
196 break;
197 case UNDER:// 下
198 ::SetWindowPos(m_dmyWnd, NULL, rc.left, rc.bottom, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
199 break;
200 case RIGHT:// 右
201 ::SetWindowPos(m_dmyWnd, NULL, rc.right, rc.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
202 break;
203 }
204 }
205 }
206
210 void Destroy(void)
211 {
212 m_dmyWnd.Destroy();
213 }
214
220 operator HWND(void)
221 {
222 return m_dmyWnd;
223 }
224
230 bool IsWindow(void) const
231 {
232 return m_dmyWnd.IsWindow();
233 }
234
241 {
242 return !! ::IsWindowVisible(m_dmyWnd);
243 }
244
250 {
251 int m = (mode == SHOW) ? SW_SHOW : SW_HIDE;
252 if ( mode == TOGGLE )
253 {
254 m = IsWindowVisible() ? SW_HIDE : SW_SHOW;
255 }
256 ::ShowWindow(m_dmyWnd, m);
257 }
258
263 void SetTopMost(bool isTop = true)
264 {
265 ::SetWindowPos(m_dmyWnd, isTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
266 }
267
274 {
275 ASSERT( m_isColorMode );
276 return m_logColorList;
277 }
278
285 {
286 ASSERT( ! m_isColorMode );
287 return m_logBwList;
288 }
289
296 CMenu& ReferMenu(void)
297 {
298 return m_menu;
299 }
300
308 void SetCurrentColor(COLORREF colorText, COLORREF colorBack)
309 {
310 ASSERT( m_isColorMode );
311 m_logColorList.SetCurrentColor(colorText, colorBack);
312 }
313
322 void SetColor(int nIndex, COLORREF colorText, COLORREF colorBack)
323 {
324 ASSERT( m_isColorMode );
325 m_logColorList.SetColor(nIndex, colorText, colorBack);
326 }
327
332 void SetMargin(DWORD m)
333 {
334 m_logColorList.SetMargin(m);
335 m_logBwList.SetMargin(m);
336 }
337
342 void SetMaxLine(int maxLine)
343 {
344 m_logColorList.SetMaxLine(maxLine);
345 m_logBwList.SetMaxLine(maxLine);
346 }
347
352 void SetFont(CFont* pFont)
353 {
354 m_pListBox->SetFont(pFont);
355 }
356
363 void SetPostViewMode(bool isView)
364 {
365 ASSERT( m_isColorMode );
366 m_logColorList.SetPostViewMode(isView);
367 }
368
379 void PostString(int nIndex, LPCTSTR lpszItem, COLORREF colorText = 0, COLORREF colorBack = 0)
380 {
381 if ( m_isColorMode )
382 {
383 m_logColorList.PostString(nIndex, lpszItem, colorText, colorBack);
384 }
385 else
386 {
387 m_logBwList.PostString(nIndex, lpszItem);
388 }
389 if ( m_parentMenuItem == 0 )
390 {
391 ShowWindow();
392 }
393 }
394
404 void PostString(LPCTSTR lpszItem, COLORREF colorText = 0, COLORREF colorBack = 0)
405 {
406 PostString(-1, lpszItem, colorText, colorBack);
407 }
408
417 void PostStringCr(LPCTSTR lpszItem, COLORREF colorText = 0, COLORREF colorBack = 0)
418 {
420 vs.SetClone(lpszItem);
421 loop ( i, vs.GetLineCount() )
422 {
423 PostString(-1, vs.GetString(i), colorText, colorBack);
424 }
425 }
426
427protected:
428
433 virtual void OnCreate(void)
434 {
435 }
436
441 virtual void OnDestroy(void)
442 {
443 }
444
449 virtual void OnCommand(WPARAM wParam)
450 {
451 switch ( wParam )
452 {
453 case MenuId_Hide://隠す
454 ::ShowWindow(*this, SW_HIDE);
455 break;
456 case MenuId_Clear://クリア
457 m_pListBox->ResetContent();
458 break;
459 }
460 }
461
462private:
475 virtual bool OnWindowMessage(LRESULT& _result, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
476 {
477 switch ( message )
478 {
479 case WM_CLOSE:
480 ::ShowWindow(m_dmyWnd, SW_HIDE);
481 return true;
482 case WM_MEASUREITEM:
483 m_pListBox->MeasureItem(reinterpret_cast<LPMEASUREITEMSTRUCT>(lParam));
484 break;
485 case WM_DRAWITEM:
486 m_pListBox->DrawItem(reinterpret_cast<LPDRAWITEMSTRUCT>(lParam));
487 break;
488 case WM_SIZE:
489 if ( ::IsWindow(m_pListBox->GetSafeHwnd()) )
490 {
491 CSize sz(LOWORD(lParam), HIWORD(lParam));
492 m_pListBox->SetWindowPos(NULL, 0, 0, sz.cx, sz.cy, SWP_NOZORDER);
493 }
494 break;
495 case WM_KEYUP:
496 case WM_KEYDOWN:
497 case WM_CHAR:
498 m_pListBox->SendMessage(message, wParam, lParam);
499 break;
500 case WM_DESTROY:
501 m_menu.DestroyMenu();
502 OnDestroy();
503 break;
504 case WM_SHOWWINDOW:
505 if ( m_parentMenuItem != 0 )
506 {
507 HMENU h = ::GetMenu(m_hParentWnd);
508 if ( h != NULL )
509 {
510 UINT r = (wParam != 0) ? MF_CHECKED : MF_UNCHECKED;
511 ::CheckMenuItem(h, m_parentMenuItem, r);
512 }
513 }
514 break;
515 case WM_COMMAND:
516 OnCommand(wParam);
517 break;
518 default:
519 break;
520 }
521 return false;
522 }
524 class CInListBox : public CDelayedRedrawAddinT<CColorListBox>
525 {
527 protected:
538 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
539 {
540 if ( message == WM_CLB_POSTSTRING )
541 {
542 _super::DelayedRedraw();
543 }
544 return _super::WindowProc(message, wParam, lParam);
545 }
546 };
547
548 HWND m_hParentWnd;
549 CListBox* m_pListBox;
550 CInListBox m_logColorList;
551 CLightListBox m_logBwList;
552 CDummyWindow m_dmyWnd;
553 CMenu m_menu;
554 CMenu m_subMenu1;
555 CMenu m_subMenu2;
556 UINT m_parentMenuItem;
557 bool m_isColorMode;
558};
559
560
561
562}; // MFC
563}; // TNB
文字列情報配列管理関係のヘッダ
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
ダミーウィンドウ関係のヘッダ
カラー表示機能付ListBox関係のヘッダ
遅延再描画コントロール処理関係のヘッダ
軽いListBox関係のヘッダ
ListBoxコントロール.
ウィンドウ管理.
BOOL SetWindowPos(const CWnd *pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags)
[設定] ウィンドウサイズポジション設定.
BOOL ModifyStyleEx(DWORD dwRemove, DWORD dwAdd, UINT nFlags=0)
[設定] ウィンドウ拡張スタイル変更.
BOOL ShowWindow(int nCmdShow)
[設定] ウィンドウ表示状態.
HWND GetSafeHwnd(void) const
[取得] ウィンドウハンドル取得.
不変的文字列情報配列管理クラス.
size_t GetLineCount(void) const
[取得] ライン数取得.
const TYP * GetString(INDEX index) const
[取得] 文字列取得.
size_t SetClone(const TYP *lpszText)
[設定] データ設定.
ダミーウィンドウクラス
bool IsWindow(void) const
[確認] ウィンドウの有無.
void Destroy(void)
[操作] ウィンドウの破棄.
bool Create(CDummyWindow::IListener *I, LPCTSTR lpszTitle=NULL, LPCTSTR lpszClassName=NULL, DWORD dwStyle=WS_OVERLAPPEDWINDOW, HMENU hMenu=NULL, HWND hParent=NULL)
[操作] ウィンドウの作成.
カラーListBoxコントロール
遅延再描画アドイン
LightListBoxコントロール
void SetMaxLine(int maxLine)
[設定] 最大ライン数設定.
void PostString(int nIndex, LPCTSTR lpszItem)
[追加] 文字列追加.
void SetMargin(DWORD m)
[設定] マージン設定
簡易リストウィンドウ
void SetMaxLine(int maxLine)
[設定] 最大ライン数設定.
virtual void OnCreate(void)
[通知] 作成完了通知.
bool IsWindowVisible(void)
[確認] ウィンドウ表示状態.
virtual void OnDestroy(void)
[通知] 破棄通知.
CTinyListDialog(bool isColorMode=true)
コンストラクタ.
void SetFont(CFont *pFont)
[設定] フォント設定
void PostString(LPCTSTR lpszItem, COLORREF colorText=0, COLORREF colorBack=0)
[追加] 文字列追加.
void SetCurrentColor(COLORREF colorText, COLORREF colorBack)
[設定] 文字色設定.
void PostString(int nIndex, LPCTSTR lpszItem, COLORREF colorText=0, COLORREF colorBack=0)
[追加] 文字列追加.
bool IsWindow(void) const
[確認] ウィンドウの有無.
bool Create(const CSize &size, HFONT hFont, HWND hParentWnd, LPCTSTR lpszTitle, HICON hIcon, UINT parentMenuItem=0)
[作成] ウィンドウ作成.
virtual void OnCommand(WPARAM wParam)
[通知] コマンド通知
void Destroy(void)
[操作] ウィンドウの破棄.
CLightListBox & ReferBwList(void)
[参照] 白黒リストコントロール参照.
void SetMargin(DWORD m)
[設定] マージン設定
void SetTopMost(bool isTop=true)
[表示] トップ表示.
void MoveWindow(EMoveMode mode=UNDER)
[移動] ウィンドウ移動.
bool Create(const CSize &size, HWND hParentWnd, LPCTSTR lpszTitle, HICON hIcon, UINT parentMenuItem=0)
[作成] ウィンドウ作成.
void SetPostViewMode(bool isView)
[設定] PostString表示モード設定.
void SetColor(int nIndex, COLORREF colorText, COLORREF colorBack)
[設定] 文字色設定.
CColorListBox & ReferColorList(void)
[参照] カラーリストコントロール参照.
void ShowWindow(EShowMode mode=SHOW)
[表示] 表示切替.
CMenu & ReferMenu(void)
[参照] メニュー参照.
void PostStringCr(LPCTSTR lpszItem, COLORREF colorText=0, COLORREF colorBack=0)
[追加] 文字列追加.
TNB Library
Definition: TnbDoxyTitle.txt:2
ダミーウィンドウクラスのリスナーインターフェース