JComboBx.h
上传用户:xzhdjhq
上传日期:2007-01-01
资源大小:46k
文件大小:5k
源码类别:

组合框控件

开发平台:

Visual C++

  1. #if !defined(AFX_JCOMBOBOX_H__409A6B13_4498_11D1_AEB1_00A0240D05AF__INCLUDED_)
  2. #define AFX_JCOMBOBOX_H__409A6B13_4498_11D1_AEB1_00A0240D05AF__INCLUDED_
  3. #if _MSC_VER >= 1000
  4. #pragma once
  5. #endif // _MSC_VER >= 1000
  6. #include <afxtempl.h>
  7. /////////////////////////////////////////////////////////////////////////////
  8. // Copyright (C) 1997 by Jakawan Ratiwanich
  9. // All rights reserved
  10. //
  11. // This JComboBox is done by courtesy of Jak. You can distribute,
  12. // EXCEPT: don't remove my name from the source or
  13. // documentation (don't take credit for my work), mark your changes (don't
  14. // get me blamed for your possible bugs), don't alter or remove this
  15. // notice.
  16. // No warrantee of any kind, express or implied, is included with this
  17. // software; use at your own risk, responsibility for damages (if any) to
  18. // anyone resulting from the use of this software rests entirely with the
  19. // user.
  20. //
  21. // Send bug reports, bug fixes, enhancements, requests, flames, etc., and
  22. // Fell free to e-mail me at jack@fsec.ucf.edu
  23. // CTitletip --> Special thanks for Zafir to give me some idea
  24. //  Also, thanks to Massimo Colurcio for reminding me about the bound limit.
  25. // The entire details on how to use 
  26. // this CJCOMBOBOX, check out : http://www.codeguru.com/controls/multicol_combo.shtml
  27. //
  28. // Bug fixes: 1. Allow multiple columns, and only display one column. (like Access)
  29. //   2. Allow interative search for selected column or all columns and rows.
  30. //
  31. // Bug known: 1. Tiltle tip window does not get painted properly for the first
  32. //  time display only. Second and next will show properly.
  33. #define TITLETIP_CLASSNAME _T("CJCOMBOX_TITTILETIP")
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CTitleTip window
  36. class CTitleTip : public CWnd
  37. {
  38. // Construction
  39. public:
  40. CTitleTip();
  41. BOOL TITLETIP_SHOW;
  42. void Show(CRect rectTitle, LPCTSTR lpszTitleText, int xoffset = 0);
  43. virtual BOOL Create(CWnd * pParentWnd);
  44. virtual ~CTitleTip();
  45. protected:
  46. CDC * dc;
  47. BOOL bFocusRect;
  48. CWnd * m_pParentWnd;
  49. };
  50. //////////////////////////////////////////////////////////////////////////////////
  51. // JComboBX.h : header file
  52. #ifndef __JCOMBOBX_H__
  53. #define __JCOMBOBX_H__
  54. #define ITEM_HEIGHT 40
  55. #define OFFSET_END 300 
  56. #define TEXT_PER_PIXEL 6
  57. #define NORMAL 0x1000
  58. #define HIGH_LIGHT 0x1001
  59. #define CHECKED 0x1002
  60. #define EDGE  0xf000
  61. #define EDGE_NORMAL  0xf001
  62. #define EDGE_HIGHLIGHT 0xf002
  63. class CJStruct
  64. {
  65. public:
  66. CJComboBox();
  67. int m_nKey;
  68. CString m_strKey[5];  //because I allow you to have 
  69. CJStruct *next; //only 5 columns ComboBox
  70. };
  71. typedef CTypedPtrList<CPtrList, CJStruct*> CJStructList;
  72. ///////////////////////////////////////////////////////////
  73. class CJComboBox : public CComboBox
  74. {
  75. // Construction
  76. public:
  77. void DisplayPopdownWindow();
  78. int PrevCol;
  79. void Finish();
  80. CString GetItemDataString(int nIndex, int nColumn);
  81. //int SetItemDataPtr(int nIndex,void * pData);
  82. //CJStructList m_jstructList;
  83. CJComboBox();
  84. virtual ~CJComboBox();
  85. CTitleTip m_titletip;
  86. int SelectString(LPCTSTR lpszString,int nStartAfter=-1,int nColSelect=-1);
  87. int SetCurSel(int nSelect);
  88. int AddString(LPCTSTR lpszString);
  89. int GetLBText(int nIndex,CString & rString,int col=0);
  90. void ResetContent(int tCol=1,int nJustify=DT_LEFT,BOOL bCheckBox=FALSE,UINT nEdge=NORMAL,int
  91. ColDisplay=0);
  92. void FormatList(int tCol=1,int nJustify=DT_LEFT,BOOL bCheckBox=FALSE,UINT nEdge=NORMAL,int
  93. ColDisplay=0);
  94. int   AddItem(
  95.     CString strItem,int nCol,int nRow,
  96. int nMask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM,
  97. int nFmt = LVCFMT_LEFT);
  98. //////////////////////////////////////////////////////////////////////
  99. // Overrides
  100. // ClassWizard generated virtual function overrides
  101. //{{AFX_VIRTUAL(CJComboBox)
  102. public:
  103. virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
  104. virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  105. virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  106. virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT&
  107. rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  108. protected:
  109. virtual void PreSubclassWindow();
  110. //}}AFX_VIRTUAL
  111. // Generated message map functions
  112. protected:
  113. int JUSTIFY;
  114. BOOL CHECKBOX;
  115. int ColWidth[5];
  116. UINT EDGE_STYLE;
  117. UINT CurSel;
  118. int TotalCol;
  119. CStringList cItem[5];
  120. int PrevRow;
  121. CJStructList m_jcbList;
  122. CJStruct * m_pJStruct;
  123. //CJStruct *pFirst, *pCurrent,*pObjDump;
  124. int nColShow;
  125. void DrawDropList(LPDRAWITEMSTRUCT lpDrawItemStruct,UINT STATE= NORMAL);
  126. int DrawThisText(CDC * pDC,CRect rcText,int nColumn,int nItem);
  127. void AddItemPtr(int nCol, int nRow);
  128. //{{AFX_MSG(CJComboBox)
  129. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  130. afx_msg void OnCloseup();
  131. //}}AFX_MSG
  132. // afx_msg BOOL OnToolTipNotify(UINT id, NMHDR * pTTTStruct, LRESULT * pResult);
  133. DECLARE_MESSAGE_MAP()
  134. private:
  135. CRect OnDrawThisText(CDC* pDC,CRect rcItem,int itemID);
  136. };
  137. #endif __JCOMBOBX_H__ // include class CJComboBox
  138. /////////////////////////////////////////////////////////////////////////////
  139. //{{AFX_INSERT_LOCATION}}
  140. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
  141. #endif // !defined(AFX_JCOMBO_H__409A6B13_4498_11D1_AEB1_00A0240D05AF__INCLUDED_)