97 m_withDtEndEllipsis = f;
108 DWORD ss = _super::GetExtendedStyle();
109 _super::SetExtendedStyle(ss | LVS_EX_CHECKBOXES);
127 return m_drawersGlid[itemNo][subItemNo];
148 BOOL r = _super::SetItemText(itemNo, subItemNo, lpszText);
153 m_drawersGlid[itemNo][subItemNo].Null();
174 int SetDrawItem(
int itemNo,
int subItemNo,
const IDrawable& draw,
bool isInsert =
false, LPCTSTR lpszWidth = NULL)
183 if ( lpszWidth == NULL )
185 CDC* pDC = _super::GetDC();
186 CFont* pOldFont = pDC->SelectObject(_super::GetFont());
187 while ( sz.cx < size.cx )
192 str = str.Left(str.GetLength() - 1);
194 while ( sz.cx < size.cx )
199 str = str.Left(str.GetLength() - 1);
200 pDC->SelectObject(pOldFont);
201 _super::ReleaseDC(pDC);
207 _super::SetRedraw(
false);
210 itemNo = _super::InsertItem(itemNo, str);
214 INDEX n = m_FindNoUseAbsoluteIndex();
215 _super::SetItemData(itemNo, n);
218 m_absoluteIndexs.
Insert(itemNo, n);
222 else if ( subItemNo == 0 && itemNo >= _super::GetItemCount() )
224 itemNo = _super::InsertItem(itemNo, str);
227 INDEX n = m_FindNoUseAbsoluteIndex();
228 _super::SetItemData(itemNo, n);
229 m_absoluteIndexs[itemNo] = n;
235 if ( ! _super::SetItemText(itemNo, subItemNo, str) )
240 _super::SetRedraw(
true);
243 m_drawersGlid[itemNo][subItemNo] = draw.
Clone();
244 _super::Invalidate();
259 int l = _super::GetItemCount();
285 int l = _super::GetItemCount();
286 if ( itemNo1 < 0 || itemNo1 >= l ) {
return false; }
287 if ( itemNo2 < 0 || itemNo2 >= l ) {
return false; }
289 _super::SetRedraw(
false);
290 m_SwapItem(itemNo1, itemNo2);
291 _super::SetRedraw(
true);
292 _super::Invalidate();
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 )
313 _super::SetRedraw(
false);
315 if ( fromItemNo > toItemNo )
317 for (
int i = fromItemNo; i >= toItemNo + 1; i-- )
319 m_SwapItem(i, i - 1);
325 for (
int i = fromItemNo; i <= toItemNo - 2; i++ )
327 m_SwapItem(i, i + 1);
331 _super::SetRedraw(
true);
344 BOOL r = _super::DeleteItem(item);
347 m_drawersGlid.
Remove(item);
348 m_drawersLine.
Remove(item);
349 m_absoluteIndexs.
Remove(item);
363 BOOL r = _super::DeleteAllItems();
377 return m_AbsoluteIndexToItemNo(index);
388 if ( m_absoluteIndexs.
IsInRange(itemNo) )
390 return m_absoluteIndexs[itemNo];
392 return INVALID_INDEX;
403 return m_headerCtrl.
IsWindow() ? &m_headerCtrl : NULL;
416 int r = _super::InsertColumn(nCol, pColumn);
432 int InsertColumn(
int nCol, LPCTSTR lpszColumnHeading,
int nFormat = LVCFMT_LEFT,
int nWidth = -1,
int nSubItem = -1)
435 int r = _super::InsertColumn(nCol, lpszColumnHeading, nFormat, nWidth, nSubItem);
439 hi.mask = HDI_FORMAT;
440 if ( m_headerCtrl.GetItem(nCol, &hi) )
442 hi.fmt = (hi.fmt & ~LVCFMT_JUSTIFYMASK) | nFormat;
443 hi.mask = HDI_FORMAT;
444 m_headerCtrl.SetItem(nCol, &hi);
462 int r = _super::InsertColumn(nCol, _T(
""), LVCFMT_LEFT, nWidth, -1);
484 m_drawersLine[itemNo] = draw.
Clone();
510 return _super::InsertItem(itemNo, lpszItem);
523 return _super::SetItemState(nItem, nState, nMask);
545 H->GetClientRect(&rc);
546 HRGN rgn = ::CreateRectRgnIndirect(&rc);
547 ::ExtSelectClipRgn(dc, rgn, RGN_DIFF);
550 if ( (_super::GetStyle() & LVS_NOCOLUMNHEADER) != 0 )
555 _super::GetClientRect(rc);
556 int right = rc.right;
558 for (
int i = 0; i < cnt; i++ )
561 m_headerCtrl.GetItemRect(i, subRc);
562 rc.right = rc.left + subRc.Width();
563 bool r = rc.right > right;
566 r = rc.right != right;
572 h.cxy = right - rc.left;
573 if ( h.cxy < 0 ) { h.cxy = 0; }
574 m_headerCtrl.SetItem(i, &h);
622 rc.OffsetRect(-rc.TopLeft());
631 if ( P->
subItemNo == 0 && m_hasCheckBox && m_pPartsDrawer != NULL )
634 UINT s = DFCS_BUTTONCHECK | DFCS_FLAT;
635 if ( _super::GetCheck(P->
itemNo) )
640 r.OffsetRect(1, (rc.Height() - r.Height()) / 2);
642 m_checkboxWidth = r.Width() + 2;
643 x += m_checkboxWidth;
644 rc.left += m_checkboxWidth;
645 if ( rc.right < rc.left )
652 m_DrawSelectMaker(dc, rc, P->
state, lParam);
658 pDraw->
DrawEx(dc, x, 0, lParam);
664 hi.mask = HDI_FORMAT;
665 if ( m_headerCtrl.GetItem(P->
subItemNo, &hi) )
668 switch ( hi.fmt & HDF_JUSTIFYMASK )
677 if ( m_withDtEndEllipsis )
679 st |= DT_END_ELLIPSIS;
683 CSize sz = P->
rect.Size();
690 m_DrawSelectMaker(dc, rc, P->
state, lParam);
698 return CDRF_SKIPDEFAULT;
710 if ( m_hasCheckBox && m_pPartsDrawer != NULL )
712 rc.left += m_checkboxWidth;
714 if ( ! m_drawersLine.
IsEmpty() )
720 D->
Draw(P->
dc, rc.left, rc.top);
723 if ( (P->
state & CDIS_FOCUS) != 0 )
750 virtual LRESULT
WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
754 case LVM_DELETECOLUMN:
757 LRESULT r = _super::WindowProc(message, wParam, lParam);
760 loop ( i, m_drawersGlid )
762 m_drawersGlid[i].
Remove(col);
771 if ( ::IsWindow(m_headerCtrl) )
773 m_headerCtrl.UnsubclassWindow();
777 return _super::WindowProc(message, wParam, lParam);
787 ASSERT0( (_super::GetStyle() & LVS_TYPEMASK) == LVS_REPORT,
"DrawingListCtrl",
"サポートできるのは Reportタイプのみです。" );
789 _super::PreSubclassWindow();
793 void m_CheckHeaderCtrl(
void)
795 if ( ! ::IsWindow(m_headerCtrl) )
797 CHeaderCtrl* pHeaderCtrl = _super::GetHeaderCtrl();
798 if ( pHeaderCtrl != NULL )
800 m_headerCtrl.SubclassWindow(*pHeaderCtrl);
805 CDrawersVectors m_drawersGlid;
806 CDrawersVector m_drawersLine;
812 bool m_withDtEndEllipsis;
815 void m_ViewIndexCache(
void)
const
819 TRACE1(
"LL;cache 内容 (l = %d)\n", m_indexCache.
GetSize() - 1 );
824 TRACE2(
"LL; 絶対INDEX %d == itemNo %d\n", i, m_indexCache[i] - 1);
830 void m_ClearIndexCache(
void)
835 void m_MakeIndexCache(
void)
const
842 INDEX idx = m_absoluteIndexs[i];
843 m_indexCache[idx] = i + 1;
848 INDEX m_FindNoUseAbsoluteIndex(
void)
const
851 INDEX r = m_indexCache.
Find(0, 1);
852 if ( r == INVALID_INDEX )
858 int m_AbsoluteIndexToItemNo(INDEX index)
const
861 int r =
static_cast<int>(m_indexCache[index]) - 1;
866 void m_ResetContent(
void)
868 m_drawersGlid.RemoveAll();
869 m_drawersLine.RemoveAll();
874 void m_DrawSelectMaker(HDC dc,
const RECT& rect, UINT itemState, LPARAM lParam)
876 if ( (itemState & CDIS_SELECTED) != 0 )
882 void m_SwapItem(
int itemNo1,
int itemNo2)
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);
898 CString s = GetItemText(itemNo1,
sin);
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;
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);
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);
#define loop(VAR, CNT)
loop構文.
DWORD GetExtendedStyle(void)
[取得] 専用拡張スタイル取得.
virtual bool Insert(INDEX index, const TYP &t)
[追加] 要素一つ挿入
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)
[計算] 文字表示大きさ計算.
void OnCatch(void) const
[表示] 内容表示
virtual size_t GetSize(void) const
[取得] サイズ取得
virtual bool Remove(INDEX index)
[削除] 要素一つ削除.
virtual bool RemoveAll(void)
[削除] 空化
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
int GetItemCount() const
[取得] アイテム数取得
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
[処理] イメージ描画.
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用).
int ToInt(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
CRealNumber sin(const CValueDegree &d)
[計算] sin (値 = sin(角度))
void Swap(T &t1, T &t2)
[変換] スワッパー.
bool IsEmpty(void) const
[確認] 要素の有無確認.
INDEX Find(const IChecker &checker, INDEX startIndex=0, bool boIsReverse=false) const
[検索] 条件一致要素の検索.
bool IsInRange(INDEX index) const
[確認] INDEXの有効確認.
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
[描画] 描画.
DWORD subItemNo
サブアイテムナンバー
virtual bool DrawButtonControl(HDC hdc, LPRECT _lprc, UINT uState) const =0
[描画] ボタンコントロール描画.