QListCtrlCtl.h
上传用户:cnjubao
上传日期:2007-01-02
资源大小:34k
文件大小:7k
源码类别:

ListView/ListBox

开发平台:

Visual C++

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon
  4.   Revised on 11/2/98 3:35:23 PM
  5.   Comments: QListCtrlCtl.h : Declaration of the CQListCtrlCtrl ActiveX Control class.
  6.  ************************************/
  7. #if !defined(AFX_QLISTCTRLCTL_H__BFCC1BD4_7257_11D2_86E6_0040055C08D9__INCLUDED_)
  8. #define AFX_QLISTCTRLCTL_H__BFCC1BD4_7257_11D2_86E6_0040055C08D9__INCLUDED_
  9. #if _MSC_VER >= 1000
  10. #pragma once
  11. #endif // _MSC_VER >= 1000
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CQListCtrlCtrl : See QListCtrlCtl.cpp for implementation.
  14. #define defaultStyles LVS_REPORT | LVS_OWNERDRAWFIXED | LVS_SHOWSELALWAYS
  15. #define defaultItemHeight 18
  16. #define defaultColumnWidth 96
  17. #define minCountLoading 16
  18. #define IDSBVERT 0x1000
  19. #include <afxcmn.h>
  20. class CQListCtrlCtrl;
  21. typedef int (CQListCtrlCtrl::*TLoadFunction) (int nLineFrom, int nHowMany = +1); 
  22. typedef TCHAR (*RNDSTR) (CString* pString);
  23. TCHAR RandomLimited(CString* pString)
  24. {
  25.         return (TCHAR)pString->GetAt(((BYTE)rand()) % pString->GetLength());
  26. }
  27. TCHAR RandomUnLimited(CString* pString)
  28. {
  29.         return (TCHAR)(BYTE)rand();
  30. }
  31. CString RandomString(int nLength = 16, CString sWhat = _T("0123456789"))
  32. {
  33.         RNDSTR f = sWhat.IsEmpty() ? RandomUnLimited : RandomLimited;
  34.         CString result;
  35.         for (int i = 0; i < nLength; i++)
  36.                 result += f(&sWhat);
  37.         return result;
  38. }
  39. class CQListCtrlCtrl : public COleControl
  40. {
  41. DECLARE_DYNCREATE(CQListCtrlCtrl)
  42. // Constructor
  43. public:
  44. CQListCtrlCtrl();
  45. virtual BOOL CreateControlWindow(HWND hWndParent, const CRect& rcPos, LPCRECT prcClipped = NULL);
  46. virtual void OnSetClientSite( );
  47. virtual int GetCountItem();
  48. virtual LPCTSTR Label(int nLine, LPARAM& lParamItem);
  49. void LoadRestOfLine(int nLine, int nTrueLine);
  50. // Overrides
  51. // ClassWizard generated virtual function overrides
  52. //{{AFX_VIRTUAL(CQListCtrlCtrl)
  53. public:
  54. virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
  55. virtual void DoPropExchange(CPropExchange* pPX);
  56. virtual void OnResetState();
  57. //}}AFX_VIRTUAL
  58. protected:
  59. struct QSnapLoader
  60. {
  61. CQListCtrlCtrl* m_pParent;
  62. struct SNodeItemsInfo
  63. {
  64. static int m_nCountRef;
  65. int m_nItemLine;
  66. int m_nCount;
  67. int m_nItemLB;
  68. SNodeItemsInfo* m_pNextNode;
  69. SNodeItemsInfo* m_pPrevNode;
  70. SNodeItemsInfo(int nItemLine, int nCount, int nItemLB)
  71. {
  72. m_nItemLine = nItemLine;
  73. m_nCount = nCount;
  74. m_nItemLB = nItemLB;
  75. m_pNextNode = NULL;
  76. m_pPrevNode = NULL;
  77. m_nCountRef++;
  78. }
  79. ~SNodeItemsInfo()
  80. {
  81. m_nCountRef--;
  82. }
  83. int GetLastLine()
  84. {
  85. return m_nItemLine + m_nCount;
  86. }
  87. int GetLastItem()
  88. {
  89. return m_nItemLB + m_nCount;
  90. }
  91. };
  92. SNodeItemsInfo* m_pFirstNode;
  93. public:
  94. virtual int GetItemLine(int nItemLB);
  95. virtual CString GetListNodes();
  96. void SetParent(CQListCtrlCtrl* pParent);
  97. virtual int Load(int nItemFrom, int nHowMany);
  98. QSnapLoader();
  99. virtual  ~QSnapLoader();
  100. };
  101. friend struct CQListCtrlCtrl::QSnapLoader;
  102. public:
  103. QSnapLoader m_QuickLoader;
  104. TLoadFunction m_fctLoadFunction;
  105. virtual int AlreadyLoadPartialListCtrl(int nLineFrom, int nHowMany = +1);
  106. virtual int LoadPartial(int nLineFrom, int nHowMany = +1);
  107. virtual int LoadPartialListCtrl(int nLineFrom, int nHowMany = +1);
  108. // Implementation
  109. protected:
  110. CScrollBar m_sbVert;
  111. int GetVisibleCount();
  112. int m_nCountLoading;
  113. void OnItemsCountChanged();
  114. void Resize();
  115. long m_nItemsCount;
  116. virtual void OnInit();
  117. UINT FormatColumn(int iColumn);
  118. ~CQListCtrlCtrl();
  119. BEGIN_OLEFACTORY(CQListCtrlCtrl)        // Class factory and guid
  120. virtual BOOL VerifyUserLicense();
  121. virtual BOOL GetLicenseKey(DWORD, BSTR FAR*);
  122. END_OLEFACTORY(CQListCtrlCtrl)
  123. DECLARE_OLETYPELIB(CQListCtrlCtrl)      // GetTypeInfo
  124. DECLARE_PROPPAGEIDS(CQListCtrlCtrl)     // Property page IDs
  125. DECLARE_OLECTLTYPE(CQListCtrlCtrl) // Type name and misc status
  126. // Subclassed control support
  127. BOOL PreCreateWindow(CREATESTRUCT& cs);
  128. BOOL IsSubclassedControl();
  129. LRESULT OnOcmCommand(WPARAM wParam, LPARAM lParam);
  130. // Message maps
  131. //{{AFX_MSG(CQListCtrlCtrl)
  132. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  133. afx_msg void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  134. afx_msg void MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct );
  135. afx_msg void OnSize(UINT nType, int cx, int cy);
  136. afx_msg void OnDestroy();
  137. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  138. afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
  139. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  140. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  141. //}}AFX_MSG
  142. DECLARE_MESSAGE_MAP()
  143. // Dispatch maps
  144. //{{AFX_DISPATCH(CQListCtrlCtrl)
  145. long m_nItemHeight;
  146. afx_msg void OnItemHeightChanged();
  147. BOOL m_bGridLines;
  148. afx_msg void OnGridLinesChanged();
  149. CString m_sHeader;
  150. afx_msg void OnHeaderChanged();
  151. BOOL m_bMultiSelect;
  152. afx_msg void OnMultiSelectChanged();
  153. BOOL m_bNoHeader;
  154. afx_msg void OnNoHeaderChanged();
  155. BOOL m_bSColumn;
  156. afx_msg void OnSColumnChanged();
  157. afx_msg void InitItemsCount();
  158. //}}AFX_DISPATCH
  159. DECLARE_DISPATCH_MAP()
  160. afx_msg void AboutBox();
  161. // Event maps
  162. //{{AFX_EVENT(CQListCtrlCtrl)
  163. void FireItemsCount(long FAR* nItemsCount)
  164. {FireEvent(eventidItemsCount,EVENT_PARAM(VTS_PI4), nItemsCount);}
  165. void FireAllItemsLoaded()
  166. {FireEvent(eventidAllItemsLoaded,EVENT_PARAM(VTS_NONE));}
  167. void FireLoadLabel(long nIndex, BSTR FAR* sText, long FAR* lParam)
  168. {FireEvent(eventidLoadLabel,EVENT_PARAM(VTS_I4  VTS_PBSTR  VTS_PI4), nIndex, sText, lParam);}
  169. void FireLoadSubItem(long nIndex, long nSubIndex, BSTR FAR* sText)
  170. {FireEvent(eventidLoadSubItem,EVENT_PARAM(VTS_I4  VTS_I4  VTS_PBSTR), nIndex, nSubIndex, sText);}
  171. //}}AFX_EVENT
  172. DECLARE_EVENT_MAP()
  173. // Dispatch and event IDs
  174. public:
  175. virtual void Header(LPCTSTR lpszHeader);
  176. virtual CListCtrl* GetListCtrl();
  177. enum {
  178. //{{AFX_DISP_ID(CQListCtrlCtrl)
  179. dispidItemHeight = 1L,
  180. dispidGridLines = 2L,
  181. dispidHeader = 3L,
  182. dispidMultiSelect = 4L,
  183. dispidNoHeader = 5L,
  184. dispidSColumn = 6L,
  185. dispidInitItemsCount = 7L,
  186. eventidItemsCount = 1L,
  187. eventidAllItemsLoaded = 2L,
  188. eventidLoadLabel = 3L,
  189. eventidLoadSubItem = 4L,
  190. //}}AFX_DISP_ID
  191. };
  192. private:
  193. UINT ColumnFormatFromString(CString& sFormat);
  194. };
  195. //{{AFX_INSERT_LOCATION}}
  196. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
  197. #endif // !defined(AFX_QLISTCTRLCTL_H__BFCC1BD4_7257_11D2_86E6_0040055C08D9__INCLUDED)