📄 supergridctrl.h
字号:
#if !defined(AFX_SUPERGRIDCTRL_H__C6DF1701_806D_11D2_9A94_002018026B76__INCLUDED_)
#define AFX_SUPERGRIDCTRL_H__C6DF1701_806D_11D2_9A94_002018026B76__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// SuperGridCtrl.h : header file
//
#include <afxtempl.h>
#include "..\..\DataSafe.H"
class CItemInfo //should have called this LV_INSERTITEM ..what ever
{
public:
/* struct CListProgressbar
{
//Note: The m_text member specifies the text in
//the progress bar
//The max value of progress bar. Use -1 to disable
//progress bar.The min value is supposed to be 0.
//Default value: -1
int m_maxvalue;
//The value the progress bar has. The width of the
//progress bar is calculated with use m_value and
//m_maxvalue.
//Default value: 0
int m_value;
//The color the progress bar should be drawn with.
//Default value: DEFAULTCOLOR
COLORREF m_fillColor;
//The color of the text on the progress bar
//Default value: DEFAULTCOLOR
COLORREF m_fillTextColor;
//How to draw the edge. Use 0 for no edge.
//See CDC::DrawEdge for different styles.
//Default value: EDGE_SUNKEN
UINT m_edge;
} m_progressBar;*/
// UINT m_uIndex;//自己添加的,用来标示在树中的序号,与数组对应
CDataSafe * GetDataSafe()
{
return &this->m_DataSafe;
}
void CopyDataSafe(CDataSafe * pDataSafe)
{
strncpy(pDataSafe->cName, this->m_DataSafe.cName, 255);
pDataSafe->dOldLen = this->m_DataSafe.dOldLen;
pDataSafe->ftLastWriteTime = this->m_DataSafe.ftLastWriteTime;
pDataSafe->bIsFile = this->m_DataSafe.bIsFile;
pDataSafe->dBeginSeek = this->m_DataSafe.dBeginSeek;
pDataSafe->uParentID = this->m_DataSafe.uParentID;
pDataSafe->dNewLen = this->m_DataSafe.dNewLen;
if(this->m_DataSafe.cPathName)
strncpy(pDataSafe->cPathName, this->m_DataSafe.cPathName, 255); //文件才有效
}
// int GetImage()
// {
// return m_iImage;
// }
void SetDataSafe(const CDataSafe * pDataSafe)
{
strncpy(this->m_DataSafe.cName, pDataSafe->cName, 255);
this->m_DataSafe.dOldLen = pDataSafe->dOldLen;
this->m_DataSafe.ftLastWriteTime = pDataSafe->ftLastWriteTime;
this->m_DataSafe.bIsFile = pDataSafe->bIsFile;
this->m_DataSafe.dBeginSeek = pDataSafe->dBeginSeek;
this->m_DataSafe.uParentID = pDataSafe->uParentID;
this->m_DataSafe.dNewLen = pDataSafe->dNewLen;
if(pDataSafe->cPathName)
strncpy(this->m_DataSafe.cPathName, pDataSafe->cPathName, 255); //文件才有效
}
CItemInfo():m_bCheck(0),m_iImage((const int)-1),m_lParam(NULL),m_clf((COLORREF)-1){};
void SetItemText(const CString& strItem){ m_strItemName = strItem; }
void SetItemText(const CString& strItem, COLORREF clf) { m_strItemName = strItem; m_clf = clf;}
void AddSubItemText(const CString& strSubItem){ m_SubItems.Add(strSubItem); }
void AddSubItemText(const CString& strSubItem, COLORREF clf)
{
int nIndex = m_SubItems.Add(strSubItem);
m_mapClf.SetAt(nIndex, clf);
}
void SetSubItemText(int iSubItem, const CString& strSubItem){ m_SubItems.SetAtGrow(iSubItem, strSubItem); }
void SetSubItemText(int iSubItem, const CString& strSubItem, COLORREF clf)
{
m_SubItems.SetAtGrow(iSubItem, strSubItem);
m_mapClf.SetAt(iSubItem, clf);
}
const CString& GetItemText(void){ return m_strItemName; }
CString GetSubItem(int iSubItem){ return m_SubItems.GetAt(iSubItem); }
int GetItemCount(void) const { return m_SubItems.GetSize(); }
enum CONTROLTYPE {edit/*default*/, combobox, datecontrol/*your control*/, spinbutton/*your control*/, dropdownlistviewwhatevercontrol/*your control*/};
//all cols in this row is default edit
void SetControlType(CONTROLTYPE enumCtrlType, int nCol=-1){ m_controlType.SetAt(nCol, enumCtrlType); }
BOOL GetControlType(int nCol, CONTROLTYPE& controlType) const
{
if(!m_controlType.Lookup(nCol,controlType))
{
controlType = edit;//default;
return 0;
}
return 1;
}
void SetListData(int iSubItem, CStringList *strInitArr)
{
CStringList *list;
list = new CStringList;//will be deleted in destructor
list->AddTail(strInitArr);
m_listdata.SetAt(iSubItem, list);
}
BOOL GetListData(int iSubItem, CStringList*& pList) const
{
return m_listdata.Lookup(iSubItem, pList);
}
//used if LVS_EX_CHECKBOXES style
void SetCheck(BOOL bCheck){ m_bCheck = bCheck;}
BOOL GetCheck(void) const {return m_bCheck;}
void SetImage(int iImage){m_iImage = iImage;}
int GetImage(void) const {return m_iImage;}//return icon
COLORREF GetItemClr(void) const {return m_clf;}
COLORREF GetBkColor(int iSubItem) const
{
COLORREF clref;
if(!m_mapClf.Lookup(iSubItem,clref))
{
return (COLORREF)-1;
}
return clref;
}
LPARAM m_lParam;//why not use this like you use it in listbox, listctrl...
//YOU SHOULD MODIFY THIS WHEN EVER YOU ADD NEW DATA TO THIS CLASS
void CopyObjects(CItemInfo* pItemInfo)
{
SetItemText(pItemInfo->GetItemText());
m_SubItems.Copy(pItemInfo->m_SubItems);
CopyControls(pItemInfo);
CopyColors(pItemInfo);
SetCheck(pItemInfo->GetCheck());
SetImage(pItemInfo->GetImage());
m_lParam = pItemInfo->m_lParam;
m_clf=pItemInfo->m_clf;
}
void CopyControls(CItemInfo* pItemInfo)
{
for(int nCol=0; nCol < pItemInfo->GetItemCount(); nCol++)
{
CItemInfo::CONTROLTYPE ctrlType;
if(pItemInfo->GetControlType(nCol, ctrlType))//true if other than edit-control
{
SetControlType(ctrlType, nCol);
//should test if this is listdata material
CStringList *list = NULL;
pItemInfo->GetListData(nCol, list);
if(list!=NULL)
SetListData(nCol, list);
}
}
}
void CopyColors(CItemInfo* pItemInfo)
{
for(int nCol=0; nCol < pItemInfo->GetItemCount(); nCol++)
{
COLORREF clref;
if(pItemInfo->m_mapClf.Lookup(nCol, clref))
m_mapClf.SetAt(nCol, clref);
}
}
~CItemInfo()
{
POSITION pos = m_listdata.GetStartPosition();
while(pos != NULL)
{
int nKey;
CStringList* b;
m_listdata.GetNextAssoc(pos, nKey, b);
if(b!=NULL)
{
b->RemoveAll();
delete b;
}
}
m_listdata.RemoveAll();
}
private:
CONTROLTYPE m_enumCtrlType;
CMap<int,int, CONTROLTYPE, CONTROLTYPE&> m_controlType;//hmm
CMap<int,int, COLORREF, COLORREF&> m_mapClf;//colors
CMap<int,int, CStringList*, CStringList*> m_listdata;//listbox
CString m_strItemName;//col 0...
CStringArray m_SubItems;//col 1... N
BOOL m_bCheck;
COLORREF m_clf;
CDataSafe m_DataSafe;
int m_iImage;
};
/////////////////////////////////////////////////////////////////////////////
//
// CSuperGridCtrl
//
/////////////////////////////////////////////////////////////////////////////
class CSuperGridCtrl : public CListCtrl
{
// Construction
public:
class CTreeItem;
CSuperGridCtrl();
protected:
//nested class forward decl.
public:
// Overrides
//MUST override this to make a copy of CItemInfo..see the CMySuperGrid.cpp for implementation
//used in drag/drop operations
virtual CItemInfo* CopyData(CItemInfo* lpSrc);
//sets the icon state...called from within DrawItem returns valid image index
//You MUST override this function to set your current icon, must of course be a valid CImageList index
virtual int GetIcon(const CTreeItem* pItem);
//override this to set the color for current cell
virtual COLORREF GetCellRGB(void);
//override this to update listview items, called from within OnEndlabeledit.
virtual void OnUpdateListViewItem(CTreeItem* lpItem, LV_ITEM *plvItem);
//override this to activate any control when lButtonDown in a cell, called from within OnLButtonDown
virtual void OnControlLButtonDown(UINT nFlags, CPoint point, LVHITTESTINFO& ht);
//override this to provide your dragimage, default: creates an image + text
virtual CImageList *CreateDragImageEx(int nItem);
//called before item is about to explode, return TRUE to continue, FALSE to prevent expanding
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -