TNB Library
TnbMfcDrawingListCtrl.h
[詳解]
1#pragma once
14#include "TnbMfcBitmapDC.h"
15#include "TnbPartsDrawable.h"
16
17
18
19//TNB Library
20namespace TNB {
21namespace MFC {
22
23
24
61{
66public:
67
69 CDrawingListCtrl(void) : _super(), m_pPartsDrawer(NULL), m_withDtEndEllipsis(false)
70 {
71 }
72
75 {
76 m_ResetContent();
77 }
78
85 void SetAdjustWidthMode(bool b = true)
86 {
87 m_headerCtrl.SetAdjustWidthMode(b);
88 }
89
95 void SetTextEndEllipsisMode(bool f = false)
96 {
97 m_withDtEndEllipsis = f;
98 }
99
106 {
107 m_pPartsDrawer = P;
108 DWORD ss = _super::GetExtendedStyle();
109 _super::SetExtendedStyle(ss | LVS_EX_CHECKBOXES);
110 }
111
119 IDrawable* GetItemDrawer(int itemNo, int subItemNo)
120 {
121 if ( itemNo >= 0 && itemNo < GetItemCount() )
122 {
123 if ( subItemNo >= 0 && subItemNo < GetHeaderCtrl()->GetItemCount() )
124 {
125 try
126 {
127 return m_drawersGlid[itemNo][subItemNo];
128 }
129 catch( CTnbException& e )
130 {
131 e.OnCatch();
132 }
133 }
134 }
135 return NULL;
136 }
137
146 BOOL SetItemText(int itemNo, int subItemNo, LPCTSTR lpszText)
147 {
148 BOOL r = _super::SetItemText(itemNo, subItemNo, lpszText);
149 if ( r )
150 {
151 try
152 {
153 m_drawersGlid[itemNo][subItemNo].Null();
154 }
155 catch( CTnbException& e )
156 {
157 e.OnCatch();
158 }
159 }
160 return r;
161 }
162
174 int SetDrawItem(int itemNo, int subItemNo, const IDrawable& draw, bool isInsert = false, LPCTSTR lpszWidth = NULL)
175 {
176 CSize size;
177 if ( ! draw.GetSize(size) )
178 {
179 return -1;
180 }
181 CSize sz(0, 0);
182 CString str;
183 if ( lpszWidth == NULL )
184 {
185 CDC* pDC = _super::GetDC();
186 CFont* pOldFont = pDC->SelectObject(_super::GetFont());
187 while ( sz.cx < size.cx )
188 {
189 str += _T("W");
190 CTextDrawer::CalcTextSize(sz, *pDC, 0, str);
191 }
192 str = str.Left(str.GetLength() - 1);
193 sz.cx = 0;
194 while ( sz.cx < size.cx )
195 {
196 str += _T("l");
197 CTextDrawer::CalcTextSize(sz, *pDC, 0, str);
198 }
199 str = str.Left(str.GetLength() - 1);
200 pDC->SelectObject(pOldFont);
201 _super::ReleaseDC(pDC);
202 }
203 else
204 {
205 str = lpszWidth;
206 }
207 _super::SetRedraw(false);
208 if ( isInsert )
209 {
210 itemNo = _super::InsertItem(itemNo, str);
211 if ( itemNo >= 0 )
212 {
213 subItemNo = 0;
214 INDEX n = m_FindNoUseAbsoluteIndex();
215 _super::SetItemData(itemNo, n);
216 m_drawersGlid.Insert(itemNo, CDrawersVector());
217 m_drawersLine.Insert(itemNo, IDrawable::Ptr());
218 m_absoluteIndexs.Insert(itemNo, n);
219 m_ClearIndexCache();
220 }
221 }
222 else if ( subItemNo == 0 && itemNo >= _super::GetItemCount() )
223 {
224 itemNo = _super::InsertItem(itemNo, str);
225 if ( itemNo >= 0 )
226 {
227 INDEX n = m_FindNoUseAbsoluteIndex();
228 _super::SetItemData(itemNo, n);
229 m_absoluteIndexs[itemNo] = n;
230 m_ClearIndexCache();
231 }
232 }
233 else
234 {
235 if ( ! _super::SetItemText(itemNo, subItemNo, str) )
236 {
237 itemNo = -1;
238 }
239 }
240 _super::SetRedraw(true);
241 if ( itemNo >= 0 )
242 {
243 m_drawersGlid[itemNo][subItemNo] = draw.Clone();
244 _super::Invalidate();
245 }
246 m_ViewIndexCache();
247 return itemNo;
248 }
249
257 int AddDrawItem(const IDrawable& draw)
258 {
259 int l = _super::GetItemCount();
260 return SetDrawItem(l, 0, draw);
261 }
262
271 int InsertDrawItem(int itemNo, const IDrawable& draw)
272 {
273 return SetDrawItem(itemNo, 0, draw, true);
274 }
275
283 bool SwapItem(int itemNo1, int itemNo2)
284 {
285 int l = _super::GetItemCount();
286 if ( itemNo1 < 0 || itemNo1 >= l ) { return false; }
287 if ( itemNo2 < 0 || itemNo2 >= l ) { return false; }
288 //
289 _super::SetRedraw(false);
290 m_SwapItem(itemNo1, itemNo2); // 情報入れ替え
291 _super::SetRedraw(true);
292 _super::Invalidate();
293 m_ViewIndexCache();
294 return true;
295 }
296
304 int MoveItem(int fromItemNo, int toItemNo)
305 {
306 int l = _super::GetItemCount();
307 if ( fromItemNo < 0 || fromItemNo >= l ) { return -1; }
308 if ( toItemNo < 0 || toItemNo >= l + 1 ) { return -1; }
309 if ( fromItemNo == toItemNo )//|| fromItemNo == toItemNo + 1 )
310 {
311 return fromItemNo; //何もせずOKじゃ
312 }
313 _super::SetRedraw(false);
314 int it = -1;
315 if ( fromItemNo > toItemNo )
316 {
317 for ( int i = fromItemNo; i >= toItemNo + 1; i-- )
318 {
319 m_SwapItem(i, i - 1);
320 }
321 it = toItemNo;
322 }
323 else
324 {
325 for ( int i = fromItemNo; i <= toItemNo - 2; i++ )
326 {
327 m_SwapItem(i, i + 1);
328 }
329 it = toItemNo - 1;
330 }
331 _super::SetRedraw(true);
332 m_ViewIndexCache();
333 return it;
334 }
335
342 BOOL DeleteItem(int item)
343 {
344 BOOL r = _super::DeleteItem(item);
345 if ( r )
346 {
347 m_drawersGlid.Remove(item);
348 m_drawersLine.Remove(item);
349 m_absoluteIndexs.Remove(item);
350 m_ClearIndexCache();
351 m_ViewIndexCache();
352 }
353 return r;
354 }
355
361 BOOL DeleteAllItems(void)
362 {
363 BOOL r = _super::DeleteAllItems();
364 m_ResetContent();
365 m_ViewIndexCache();
366 return r;
367 }
368
375 int AbsoluteIndexToItemNo(INDEX index) const
376 {
377 return m_AbsoluteIndexToItemNo(index);
378 }
379
386 INDEX ItemNoToAbsoluteIndex(int itemNo) const
387 {
388 if ( m_absoluteIndexs.IsInRange(itemNo) )
389 {
390 return m_absoluteIndexs[itemNo];
391 }
392 return INVALID_INDEX;
393 }
394
401 {
402 m_CheckHeaderCtrl();
403 return m_headerCtrl.IsWindow() ? &m_headerCtrl : NULL;
404 }
405
413 int InsertColumn(int nCol, const LVCOLUMN* pColumn)
414 {
415 m_CheckHeaderCtrl();
416 int r = _super::InsertColumn(nCol, pColumn);
417 return r;
418 }
419
432 int InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1)
433 {
434 m_CheckHeaderCtrl();
435 int r = _super::InsertColumn(nCol, lpszColumnHeading, nFormat, nWidth, nSubItem);
436 if ( r == 0 )
437 {
438 HDITEM hi;
439 hi.mask = HDI_FORMAT;
440 if ( m_headerCtrl.GetItem(nCol, &hi) )
441 {
442 hi.fmt = (hi.fmt & ~LVCFMT_JUSTIFYMASK) | nFormat;
443 hi.mask = HDI_FORMAT;
444 m_headerCtrl.SetItem(nCol, &hi);
445 }
446 }
447 //m_headerCtrl.Reset();
448 return r;
449 }
450
459 int InsertColumn(int nCol, int nWidth, const IDrawable& draw)
460 {
461 m_CheckHeaderCtrl();
462 int r = _super::InsertColumn(nCol, _T(""), LVCFMT_LEFT, nWidth, -1);
463 if ( r >= 0 )
464 {
465 m_headerCtrl.SetColumnDrawer(nCol, draw);
466 //m_headerCtrl.Reset();
467 }
468 return r;
469 }
470
479 bool SetItemOverDrawer(int itemNo, const IDrawable& draw)
480 {
481 SIZE size;
482 if ( draw.GetSize(size) )
483 {
484 m_drawersLine[itemNo] = draw.Clone();
485 return true;
486 }
487 return false;
488 }
489
495 BOOL SetBkColor(COLORREF color)
496 {
497 SetBackColor(color);
498 return TRUE;
499 }
500
508 int InsertItem(int itemNo, LPCTSTR lpszItem)
509 {
510 return _super::InsertItem(itemNo, lpszItem);
511 }
512
521 BOOL SetItemState(int nItem, UINT nState, UINT nMask)
522 {
523 return _super::SetItemState(nItem, nState, nMask);
524 }
525
526protected:
527
537 virtual void OnBeginItemPaint(HDC dc)
538 {
540 m_hasCheckBox = (GetExtendedStyle() & LVS_EX_CHECKBOXES) != 0;
542 if ( H != NULL )
543 {
544 CRect rc;
545 H->GetClientRect(&rc);
546 HRGN rgn = ::CreateRectRgnIndirect(&rc);
547 ::ExtSelectClipRgn(dc, rgn, RGN_DIFF);
548 _DeleteObject(rgn);
549 }
550 if ( (_super::GetStyle() & LVS_NOCOLUMNHEADER) != 0 )
551 {
552 if ( m_headerCtrl.IsAdjustWidthMode() )
553 {
554 CRect rc;
555 _super::GetClientRect(rc);
556 int right = rc.right;
557 int cnt = m_headerCtrl.GetItemCount();
558 for ( int i = 0; i < cnt; i++ )
559 {
560 CRect subRc;
561 m_headerCtrl.GetItemRect(i, subRc);
562 rc.right = rc.left + subRc.Width();
563 bool r = rc.right > right;
564 if ( i + 1 == cnt )
565 {
566 r = rc.right != right;
567 }
568 if ( r )
569 {
570 HDITEM h;
571 h.mask = HDI_WIDTH;
572 h.cxy = right - rc.left;
573 if ( h.cxy < 0 ) { h.cxy = 0; }
574 m_headerCtrl.SetItem(i, &h);
575 rc.right = right;
576 }
577 rc.left = rc.right;
578 }
579 }
580 }
581 }
582
589 virtual void OnEndItemPaint(HDC dc)
590 {
591 if ( _mark::EndItemPaint() )
592 {
593 Invalidate();
594 }
595 }
596
605 virtual LPARAM CalcDrawParam(DWORD_PTR itemNo, DWORD subItemNo) const
606 {
607 return itemNo;
608 }
609
618 virtual LRESULT OnItemPainting(TDrawParam* P)
619 {
620// TRACE3("OnSubItemPaint[%d, %d, %08X]\n", pParam->itemNo, pParam->subItemNo, pParam->state);
621 CRect rc = P->rect;
622 rc.OffsetRect(-rc.TopLeft());
623 CBitmapImage bi;
624 bi.Set(rc.Width(), rc.Height(), _mark::GetBackColor());
625 LPARAM lParam = CalcDrawParam(P->itemNo, P->subItemNo);
626 if ( ! bi.IsEmpty() )
627 {
628 CBitmapDC dc(&bi);
629 _mark::DrawBackground(dc, rc, lParam);
630 int x = 0;
631 if ( P->subItemNo == 0 && m_hasCheckBox && m_pPartsDrawer != NULL )
632 {
633 CRect r = rc;
634 UINT s = DFCS_BUTTONCHECK | DFCS_FLAT;
635 if ( _super::GetCheck(P->itemNo) )
636 {
637 s |= DFCS_CHECKED;
638 }
639 m_pPartsDrawer->DrawButtonControl(NULL, &r, s);
640 r.OffsetRect(1, (rc.Height() - r.Height()) / 2);
641 m_pPartsDrawer->DrawButtonControl(dc, &r, s);
642 m_checkboxWidth = r.Width() + 2;
643 x += m_checkboxWidth;
644 rc.left += m_checkboxWidth;
645 if ( rc.right < rc.left )
646 {
647 rc.right = rc.left;
648 }
649 }
651 {
652 m_DrawSelectMaker(dc, rc, P->state, lParam);
653 }
654 IDrawable* pDraw = GetItemDrawer(P->itemNo, P->subItemNo);
655 if ( pDraw != NULL )
656 {
657 pDraw->Resize(rc.Size());
658 pDraw->DrawEx(dc, x, 0, lParam);
659 }
660 else
661 {
662 CString str = GetItemText(P->itemNo, P->subItemNo);
663 HDITEM hi;
664 hi.mask = HDI_FORMAT;
665 if ( m_headerCtrl.GetItem(P->subItemNo, &hi) )
666 {
667 DWORD st = _mark::GetTextDrawStyle() & (~0x03);
668 switch ( hi.fmt & HDF_JUSTIFYMASK )
669 {
670 case HDF_RIGHT:
671 st |= DT_RIGHT;
672 break;
673 case HDF_CENTER:
674 st |= DT_CENTER;
675 break;
676 default:
677 if ( m_withDtEndEllipsis )
678 {
679 st |= DT_END_ELLIPSIS;
680 }
681 break;
682 }
683 CSize sz = P->rect.Size();
685 _mark::DrawText(dc, CRect(x, 0, sz.cx, sz.cy), str, st, lParam);
686 }
687 }
689 {
690 m_DrawSelectMaker(dc, rc, P->state, lParam);
691 }
692 dc.Draw(P->dc, P->rect.left, P->rect.top);
693 if ( pDraw != NULL )
694 {
695 pDraw->DrawEx(NULL, P->rect.left, P->rect.top, lParam);
696 }
697 }
698 return CDRF_SKIPDEFAULT;
699 }
700
707 virtual void OnItemPainted(const TDrawParam* P)
708 {
709 CRect rc = P->rect;
710 if ( m_hasCheckBox && m_pPartsDrawer != NULL )
711 {
712 rc.left += m_checkboxWidth;
713 }
714 if ( ! m_drawersLine.IsEmpty() )
715 {
716 IDrawable* D = m_drawersLine[P->itemNo];
717 if ( D != NULL )
718 {
719 D->Resize(rc.Size());
720 D->Draw(P->dc, rc.left, rc.top);
721 }
722 }
723 if ( (P->state & CDIS_FOCUS) != 0 )
724 {
725 _mark::DrawFocusMark(P->dc, rc, P->itemNo);
726 }
727 }
728
735 virtual void OnDrawBackground(HDC dc, const RECT& rect)
736 {
737 _mark::DrawBackColor(dc, rect);
738 }
739
750 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
751 {
752 switch ( message )
753 {
754 case LVM_DELETECOLUMN:
755 {
756 INDEX col = wParam;
757 LRESULT r = _super::WindowProc(message, wParam, lParam);
758 if ( r != 0 )
759 {
760 loop ( i, m_drawersGlid )
761 {
762 m_drawersGlid[i].Remove(col);
763 }
764 }
765 return r;
766 }
767 break;
768 case WM_DESTROY:
769 m_ResetContent();
771 if ( ::IsWindow(m_headerCtrl) )
772 {
773 m_headerCtrl.UnsubclassWindow();
774 }
775 break;
776 }
777 return _super::WindowProc(message, wParam, lParam);
778 }
779
785 virtual void PreSubclassWindow(void)
786 {
787 ASSERT0( (_super::GetStyle() & LVS_TYPEMASK) == LVS_REPORT, "DrawingListCtrl", "サポートできるのは Reportタイプのみです。" );
788 m_CheckHeaderCtrl();
789 _super::PreSubclassWindow();
790 }
791
792private:
793 void m_CheckHeaderCtrl(void)
794 {
795 if ( ! ::IsWindow(m_headerCtrl) )
796 {
797 CHeaderCtrl* pHeaderCtrl = _super::GetHeaderCtrl();
798 if ( pHeaderCtrl != NULL )
799 {
800 m_headerCtrl.SubclassWindow(*pHeaderCtrl);
801 }
802 }
803 }
804 CDrawingHeaderCtrl m_headerCtrl;
805 CDrawersVectors m_drawersGlid;
806 CDrawersVector m_drawersLine;
807 CAutoVectorT<INDEX> m_absoluteIndexs;
808 mutable CAutoVectorT<INDEX> m_indexCache;
809 IPartsDrawable* m_pPartsDrawer;
810 int m_checkboxWidth;
811 bool m_hasCheckBox;
812 bool m_withDtEndEllipsis;
813
815 void m_ViewIndexCache(void) const
816 {
817 #ifdef _TnbDEBUG_ON
818 m_MakeIndexCache();
819 TRACE1( "LL;cache 内容 (l = %d)\n", m_indexCache.GetSize() - 1 );
820 loop ( i, m_indexCache.GetSize() )
821 {
822 if ( i != 0 )
823 {
824 TRACE2("LL; 絶対INDEX %d == itemNo %d\n", i, m_indexCache[i] - 1);
825 }
826 }
827 #endif
828 }
830 void m_ClearIndexCache(void)
831 {
832 m_indexCache.RemoveAll();
833 }
835 void m_MakeIndexCache(void) const
836 {
837 if ( m_indexCache.IsEmpty() )
838 {
839 m_indexCache.Add(0);
840 loop ( i, m_absoluteIndexs.GetSize() )
841 {
842 INDEX idx = m_absoluteIndexs[i];
843 m_indexCache[idx] = i + 1;
844 }
845 }
846 }
848 INDEX m_FindNoUseAbsoluteIndex(void) const
849 {
850 m_MakeIndexCache();
851 INDEX r = m_indexCache.Find(0, 1);
852 if ( r == INVALID_INDEX )
853 {
854 r = m_indexCache.GetSize();
855 }
856 return r;
857 }
858 int m_AbsoluteIndexToItemNo(INDEX index) const
859 {
860 m_MakeIndexCache();
861 int r = static_cast<int>(m_indexCache[index]) - 1;
862 ASSERT( r >= 0 );
863 return r;
864 }
865 // アイテム全けし
866 void m_ResetContent(void)
867 {
868 m_drawersGlid.RemoveAll();
869 m_drawersLine.RemoveAll();
870 m_absoluteIndexs.RemoveAll();
871 m_ClearIndexCache();
872 }
874 void m_DrawSelectMaker(HDC dc, const RECT& rect, UINT itemState, LPARAM lParam)
875 {
876 if ( (itemState & CDIS_SELECTED) != 0 )
877 {
878 _mark::DrawSelectMark(dc, rect, ::GetFocus() == m_hWnd, lParam);
879 }
880 }
882 void m_SwapItem(int itemNo1, int itemNo2)
883 {
884 // 情報入れ替え
885 Swap(m_drawersGlid[itemNo1], m_drawersGlid[itemNo2]);
886 Swap(m_drawersLine[itemNo1], m_drawersLine[itemNo2]);
887 Swap(m_absoluteIndexs[itemNo1], m_absoluteIndexs[itemNo2]);
888 DWORD data = ToDword(_super::GetItemData(itemNo1));
889 _super::SetItemData(itemNo1, _super::GetItemData(itemNo2));
890 _super::SetItemData(itemNo2, data);
891 UINT state = _super::GetItemState(itemNo1, UINT_MAX);
892 _super::SetItemState(itemNo1, _super::GetItemState(itemNo2, UINT_MAX), UINT_MAX);
893 _super::SetItemState(itemNo2, state, UINT_MAX);
894 // 各カラム情報も入れ替え
895 loop ( subItemNo, GetHeaderCtrl()->GetItemCount() )
896 {
897 int sin = ToInt(subItemNo);
898 CString s = GetItemText(itemNo1, sin);
899 SetItemText(itemNo1, sin, GetItemText(itemNo2, sin));
900 SetItemText(itemNo2, sin, s);
901 }
902 m_ClearIndexCache();
903 }
904
905 CImageList* GetImageList(int nImageList) const;
906 CImageList* SetImageList(CImageList* pImageList, int nImageListType);
907 BOOL GetItem(LVITEM* pItem) const;
908 BOOL SetItem(const LVITEM* pItem);
909 BOOL SetItem(int nItem, int nSubItem, UINT nMask, LPCTSTR lpszItem,
910 int nImage, UINT nState, UINT nStateMask, LPARAM lParam);
911 BOOL GetColumn(int nCol, LVCOLUMN* pColumn) const;
912 BOOL SetColumn(int nCol, const LVCOLUMN* pColumn);
913 BOOL GetOrigin(LPPOINT lpPoint) const;
914 BOOL SetItemState(int nItem, LVITEM* pItem);
915 BOOL SetBkImage(HBITMAP hbm, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0);
916 BOOL SetBkImage(LPTSTR pszUrl, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0);
917 BOOL SetBkImage(LVBKIMAGE* plvbkImage);
918 int InsertItem(const LVITEM* pItem);
919 int InsertItem(int nItem, LPCTSTR lpszItem, int nImage);
920 BOOL Update(int nItem);
921 BOOL SortItems(PFNLVCOMPARE pfnCompare, DWORD dwData);
922 int InsertItem(UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState,
923 UINT nStateMask, int nImage, LPARAM lParam);
924};
925
926
927
928}; // MFC
929}; // TNB
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
カスタム描画抽象ListCtrl関係のヘッダ
描画情報コントロール抽象クラス関係のヘッダ
ビットマップDC関係のヘッダ
描画情報HeaderCtrl関係のヘッダ
パーツ描画情報のヘッダ
DWORD GetExtendedStyle(void)
[取得] 専用拡張スタイル取得.
virtual bool Insert(INDEX index, const TYP &t)
[追加] 要素一つ挿入
Definition: TnbVector.h:1070
ビットマップイメージ管理クラス
bool IsEmpty(void) const
[確認] Empty状態確認.
bool Set(int cx, int cy, COLORREF color=CLR_INVALID)
[設定] イメージ設定.
static bool CalcTextSize(SIZE &_size, HDC dc, UINT drawStyle, LPCTSTR str)
[計算] 文字表示大きさ計算.
例外ベースクラス
Definition: TnbException.h:36
void OnCatch(void) const
[表示] 内容表示
Definition: TnbException.h:69
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
カスタム描画抽象ListCtrlコントロール
int GetItemCount() const
[取得] アイテム数取得
描画情報コントロール抽象クラス
@ OVERLAP
アイテム描画上に描画
DWORD GetTextDrawStyle(void) const
[取得] 文字列描画スタイル取得.
bool EndItemPaint(void)
[処理] 描画終了.
COLORREF GetBackColor(void) const
[取得] 背景色取得.
void DrawBackground(HDC dc, const RECT &rect, LPARAM lParam=0)
[描画] 背景表示
void DrawText(HDC dc, const RECT &rect, LPCTSTR lpsz, LPARAM lParam=0)
[描画] 文字列描画
void SetBackColor(COLORREF color)
[設定] 背景色設定.
void DrawSelectMark(HDC dc, const RECT &rect, bool isActive, LPARAM lParam=0)
[描画] 選択マーク表示
ESelectMarkType GetSelectMarkType(void) const
[取得] セレクトマークタイプ
void AllReset(void)
[設定] 全設定リセット.
void DrawFocusMark(HDC dc, const RECT &rect, LPARAM lParam=0)
[描画] フォーカスマーク表示
void BeginItemPaint(void)
[処理] 描画開始.
void DrawBackColor(HDC dc, const RECT &rect)
[描画] 背景色描画
void SetDefaultTextDrawer(CWnd *pWnd)
[設定] テキスト描画情報設定.
ビットマップデバイスコンテキストクラス
bool Draw(HDC dc, int x=0, int y=0) const
[処理] イメージ描画.
描画情報HeaderCtrlコントロール
void SetAdjustWidthMode(bool b=true)
[設定] 幅自動調整モード設定.
int GetItemCount() const
[取得] カラム数取得.
bool IsAdjustWidthMode(void) const
[取得] 幅自動調整モード.
bool IsWindow(void) const
[確認] コントロールが存在するか?
bool SetColumnDrawer(int col, const IDrawable &draw)
[設定] カラム描画情報設定
描画情報ListCtrlコントロール
void SetAdjustWidthMode(bool b=true)
[設定] 幅自動調整モード設定.
bool SetItemOverDrawer(int itemNo, const IDrawable &draw)
[設定] 上書き描画情報設定.
~CDrawingListCtrl(void)
デストラクタ
int MoveItem(int fromItemNo, int toItemNo)
[設定] アイテム入れ替え.
void SetTextEndEllipsisMode(bool f=false)
[設定] テキスト省略表示モード設定.
INDEX ItemNoToAbsoluteIndex(int itemNo) const
[取得] ItemNo から 絶対 Index 取得
int AbsoluteIndexToItemNo(INDEX index) const
[取得] 絶対Index から ItemNo 取得
CDrawingListCtrl(void)
コンストラクタ
virtual void OnEndItemPaint(HDC dc)
[通知] 描画終了.
int InsertItem(int itemNo, LPCTSTR lpszItem)
[設定] アイテム文字列情報挿入.
virtual void OnBeginItemPaint(HDC dc)
[通知] 描画開始.
BOOL SetItemState(int nItem, UINT nState, UINT nMask)
[設定] アイテム状態設定
CDrawingHeaderCtrl * GetHeaderCtrl(void)
[取得] ヘッダコントロール参照.
int InsertColumn(int nCol, int nWidth, const IDrawable &draw)
[追加] カラム追加.
IDrawable * GetItemDrawer(int itemNo, int subItemNo)
[取得] アイテムの描画情報取得.
virtual void OnItemPainted(const TDrawParam *P)
[通知] アイテム描画終わり.
BOOL SetBkColor(COLORREF color)
[設定] 背景色設定.
BOOL SetItemText(int itemNo, int subItemNo, LPCTSTR lpszText)
[設定] アイテムの文字列設定.
bool SwapItem(int itemNo1, int itemNo2)
[設定] アイテム入れ替え
virtual void PreSubclassWindow(void)
[通知] subclassing/unsubclassing functions.
virtual LPARAM CalcDrawParam(DWORD_PTR itemNo, DWORD subItemNo) const
[取得] 描画用パラメータ計算.
int AddDrawItem(const IDrawable &draw)
[設定] アイテム描画情報追加.
int InsertDrawItem(int itemNo, const IDrawable &draw)
[設定] アイテム描画情報挿入.
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
int SetDrawItem(int itemNo, int subItemNo, const IDrawable &draw, bool isInsert=false, LPCTSTR lpszWidth=NULL)
[設定] アイテムの描画情報設定.
BOOL DeleteAllItems(void)
[削除] 全アイテム削除.
int InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat=LVCFMT_LEFT, int nWidth=-1, int nSubItem=-1)
[追加] カラム追加.
BOOL DeleteItem(int item)
[削除] アイテム描画情報削除.
int InsertColumn(int nCol, const LVCOLUMN *pColumn)
[追加] カラム追加.
virtual LRESULT OnItemPainting(TDrawParam *P)
[通知] アイテム描画.
void AddCheckBox(IPartsDrawable *P)
[設定] チェックボックス追加
virtual void OnDrawBackground(HDC dc, const RECT &rect)
[通知] 背景描画通知.
DWORD ToDword(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
Definition: TnbStrLib.h:395
int ToInt(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
Definition: TnbStrLib.h:367
CRealNumber sin(const CValueDegree &d)
[計算] sin (値 = sin(角度))
void Swap(T &t1, T &t2)
[変換] スワッパー.
Definition: TnbDef.h:963
TNB Library
Definition: TnbDoxyTitle.txt:2
bool IsEmpty(void) const
[確認] 要素の有無確認.
INDEX Find(const IChecker &checker, INDEX startIndex=0, bool boIsReverse=false) const
[検索] 条件一致要素の検索.
bool IsInRange(INDEX index) const
[確認] INDEXの有効確認.
描画情報インターフェース
Definition: TnbDrawable.h:37
virtual bool Resize(const SIZE &size)=0
[設定] サイズ設定.
virtual bool GetSize(SIZE &_size) const =0
[取得] サイズ取得.
virtual IDrawable * Clone(void) const =0
[作成] クローン作成.
virtual void Draw(HDC dc, int x=0, int y=0) const =0
[描画] 描画.
virtual void DrawEx(HDC dc, int x, int y, LPARAM lParam) const
[描画] 描画.
Definition: TnbDrawable.h:83
WINDOWパーツ描画インターフェース
virtual bool DrawButtonControl(HDC hdc, LPRECT _lprc, UINT uState) const =0
[描画] ボタンコントロール描画.