PageGrid.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:14k
源码类别:

界面编程

开发平台:

Visual C++

  1. #if !defined(AFX_PAGEGRID_H__F54F4632_3768_42D0_9E0E_3F85326598E1__INCLUDED_)
  2. #define AFX_PAGEGRID_H__F54F4632_3768_42D0_9E0E_3F85326598E1__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. // PageGrid.h : header file
  7. //
  8. #if (!defined __EXT_MFC_NO_GRIDWND)
  9. #include "PageBase.h"
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CExtGridCellCheckBoxEye
  12. class CExtGridCellCheckBoxEye : public CExtGridCellCheckBox
  13. {
  14. public:
  15. DECLARE_SERIAL( CExtGridCellCheckBoxEye );
  16. IMPLEMENT_ExtGridCell_Clone( CExtGridCellCheckBoxEye, CExtGridCellCheckBox );
  17. CExtSafeString m_arrStrings[3];    // 0 - unchecked, 1 - checked, 2 - indeterminate
  18. mutable CExtCmdIcon m_arrIcons[3]; // 0 - unchecked, 1 - checked, 2 - indeterminate
  19. CExtGridCellCheckBoxEye(
  20. CExtGridDataProvider * pDataProvider = NULL
  21. )
  22. : CExtGridCellCheckBox ( pDataProvider )
  23. {
  24. m_arrStrings[ 0 ] = _T("Hidden");
  25. m_arrStrings[ 1 ] = _T("Visible");
  26. m_arrStrings[ 2 ] = _T("Indeterminate");
  27. static BYTE g_bitmapBytes[] =
  28. {
  29. 0x42, 0x4D, 0x9E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xB6, 0xB6, 0xB6, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB5, 0xB5, 0xB5, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x8E, 0x8B, 0x90, 0x42, 0x42, 0x42, 0x3B, 0x3B, 0x3B, 0x3F, 0x3F, 0x3F, 0x43, 0x43, 0x43, 0x8A, 0x89, 0x8A, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00,
  30. 0xFF, 0x47, 0x29, 0x46, 0x7B, 0x7A, 0x7A, 0xA3, 0xA3, 0xA3, 0xB4, 0xB4, 0xB4, 0xB6, 0xB6, 0xB6, 0xC7, 0xC7, 0xC7, 0x81, 0x81, 0x81, 0x29, 0x29, 0x29, 0x87, 0x90, 0x89, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xBB, 0xBB, 0xBB, 0xD2, 0xD2, 0xD2, 0x4C, 0x4C, 0x4C, 0x14, 0x14, 0x14, 0x02, 0x02, 0x02, 0x23, 0x23, 0x23, 0xB9, 0xB9, 0xB9, 0xBA, 0xBA, 0xBA, 0x2B, 0x2B, 0x2B, 0x85, 0x84, 0x85, 0xFF, 0x00, 0xFF, 0xA8, 0xA8, 0xA8, 0xAC, 0xAC, 0xAC, 0x37, 0x37, 0x37, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x34, 0x34, 0x34, 0xA0, 0xA0, 0xA0, 0x92, 0x92, 0x92, 0x30, 0x30, 0x30, 0xFF, 0x00, 0xFF, 0x5C, 0x5C, 0x5C, 0x91, 0x91, 0x91, 0x25, 0x25, 0x25, 0x4B, 0x4B, 0x4B, 0xD0, 0xD0, 0xD0, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x3F,
  31. 0x3F, 0x3F, 0x89, 0x89, 0x89, 0x3A, 0x3A, 0x3A, 0x33, 0x33, 0x33, 0xFF, 0x00, 0xFF, 0x9E, 0x9E, 0x9E, 0x30, 0x30, 0x30, 0x25, 0x25, 0x25, 0x16, 0x16, 0x16, 0x34, 0x34, 0x34, 0x12, 0x12, 0x12, 0x07, 0x07, 0x07, 0x13, 0x13, 0x13, 0x3B, 0x3B, 0x3B, 0x2E, 0x2E, 0x2E, 0x87, 0x87, 0x87, 0x89, 0x91, 0x8B, 0x4A, 0x4A, 0x4A, 0x89, 0x89, 0x89, 0x78, 0x78, 0x78, 0x47, 0x47, 0x47, 0x20, 0x20, 0x20, 0x2F, 0x2F, 0x2F, 0x2E, 0x2E, 0x2E, 0x55, 0x55, 0x55, 0x63, 0x63, 0x63, 0x91, 0x91, 0x91, 0x60, 0x64, 0x61, 0x97, 0xA2, 0x99, 0x9C, 0x9C, 0x9C, 0x4E, 0x4E, 0x4E, 0x7A, 0x7A, 0x7A, 0x7C, 0x7C, 0x7C, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x85, 0x85, 0x85, 0x70, 0x70, 0x70, 0x4F, 0x4F, 0x4F, 0xAB, 0xAB, 0xAB, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
  32. 0x86, 0x8D, 0x87, 0x76, 0x76, 0x76, 0x4E, 0x4E, 0x4E, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x6D, 0x6D, 0x6D, 0x8A, 0x8A, 0x8A, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
  33. };
  34. VERIFY( m_arrIcons[0].m_bmpNormal.LoadBMP_Buffer( g_bitmapBytes, sizeof(g_bitmapBytes)/sizeof(g_bitmapBytes[0]), true ) );
  35. VERIFY( m_arrIcons[0].m_bmpNormal.Make32() );
  36. m_arrIcons[0].m_bmpNormal.AlphaColor( RGB(255,0,255), RGB(0,0,0), BYTE(0) );
  37. m_arrIcons[1].m_bmpNormal = m_arrIcons[2].m_bmpNormal = m_arrIcons[0].m_bmpNormal;
  38. m_arrIcons[0].m_bmpNormal.AdjustAlpha( -1.00 );
  39. m_arrIcons[2].m_bmpNormal.AdjustAlpha( -0.75 );
  40. SetCheck( 0 ); // initialize text
  41. }
  42. virtual __EXT_MFC_SAFE_LPCTSTR GetTextBuffer() const { ASSERT_VALID( this ); return NULL; }
  43. protected:
  44. INT _GetTextAndCheckMarkIconIndex() const
  45. {
  46. ASSERT_VALID( this );
  47. INT nCheck = GetCheck(), nTextAndCheckMarkIconIndex = 2;
  48. switch( nCheck )
  49. {
  50. case 0:
  51. case 1:
  52. nTextAndCheckMarkIconIndex = nCheck;
  53. break;
  54. }
  55. return nTextAndCheckMarkIconIndex;
  56. }
  57. public:
  58. virtual void TextGet( CExtSafeString & strCopy ) const
  59. {
  60. ASSERT_VALID( this );
  61. strCopy = m_arrStrings[ _GetTextAndCheckMarkIconIndex() ];
  62. }
  63. virtual void Assign( const CExtGridCell & other )
  64. {
  65. ASSERT_VALID( this );
  66. CExtGridCellCheckBox::Assign( other );
  67. CExtGridCellCheckBoxEye * pCell = DYNAMIC_DOWNCAST( CExtGridCellCheckBoxEye, ( const_cast < CExtGridCell * > ( &other ) ) );
  68. if( pCell != NULL )
  69. {
  70. INT nIndex, nCount = INT(sizeof(m_arrStrings)/sizeof(m_arrStrings[0]));
  71. for( nIndex = 0; nIndex < nCount; nIndex ++ )
  72. m_arrStrings[ nIndex ] = pCell -> m_arrStrings[ nIndex ];
  73. }
  74. }
  75. virtual void Serialize( CArchive & ar )
  76. {
  77. ASSERT_VALID( this );
  78. CExtGridCellCheckBox::Serialize( ar );
  79. INT nIndex, nCount = INT(sizeof(m_arrStrings)/sizeof(m_arrStrings[0]));
  80. if( ar.IsStoring() )
  81. {
  82. for( nIndex = 0; nIndex < nCount; nIndex ++ )
  83. ar << m_arrStrings[ nIndex ];
  84. } // if( ar.IsStoring() )
  85. else
  86. {
  87. for( nIndex = 0; nIndex < nCount; nIndex ++ )
  88. ar >> m_arrStrings[ nIndex ];
  89. } // else from if( ar.IsStoring() )
  90. }
  91. virtual CSize OnCalcCheckSize(
  92. bool bPressed,
  93. bool bHovered,
  94. bool bEnabled,
  95. const CExtGridWnd & wndGrid,
  96. CDC & dc,
  97. LONG nVisibleColNo,
  98. LONG nVisibleRowNo,
  99. LONG nColNo,
  100. LONG nRowNo,
  101. INT nColType,
  102. INT nRowType,
  103. DWORD dwAreaFlags,
  104. DWORD dwHelperPaintFlags
  105. ) const
  106. {
  107. ASSERT_VALID( this );
  108. bPressed; bHovered; bEnabled; wndGrid; dc; nVisibleColNo; nVisibleRowNo; nColNo; nRowNo; nColType; nRowType; dwAreaFlags; dwHelperPaintFlags;
  109. CExtCmdIcon * pIcon = & ( m_arrIcons[ _GetTextAndCheckMarkIconIndex() ] );
  110. if( pIcon == NULL || pIcon->IsEmpty() )
  111. return CSize( 0, 0 );
  112. CSize _size = pIcon->GetSize();
  113. return _size;
  114. }
  115. virtual void OnPaintCheck(
  116. const RECT & rcCheck,
  117. bool bPressed,
  118. bool bHovered,
  119. bool bEnabled,
  120. const CExtGridWnd & wndGrid,
  121. CDC & dc,
  122. LONG nVisibleColNo,
  123. LONG nVisibleRowNo,
  124. LONG nColNo,
  125. LONG nRowNo,
  126. INT nColType,
  127. INT nRowType,
  128. const RECT & rcCellExtra,
  129. const RECT & rcCell,
  130. const RECT & rcVisibleRange,
  131. DWORD dwAreaFlags,
  132. DWORD dwHelperPaintFlags
  133. ) const
  134. {
  135. ASSERT_VALID( this );
  136. ASSERT_VALID( (&wndGrid) );
  137. ASSERT( dc.GetSafeHdc() != NULL );
  138. if( ! dc.RectVisible(&rcCheck) )
  139. return;
  140. nVisibleColNo; nVisibleRowNo; nColNo; nRowNo; nColType; nRowType; rcCellExtra; rcCell; rcVisibleRange; dwAreaFlags; dwHelperPaintFlags;
  141. CExtCmdIcon * pIcon = & ( m_arrIcons[ _GetTextAndCheckMarkIconIndex() ] );
  142. if( pIcon == NULL || pIcon->IsEmpty() )
  143. return;
  144. CExtCmdIcon::e_paint_type_t ePT = CExtCmdIcon::__PAINT_NORMAL;
  145. if( ! bEnabled )
  146. ePT = CExtCmdIcon::__PAINT_DISABLED;
  147. else if( bPressed )
  148. ePT = CExtCmdIcon::__PAINT_PRESSED;
  149. else if( bHovered )
  150. ePT = CExtCmdIcon::__PAINT_HOVER;
  151. pIcon->Paint( wndGrid.PmBridge_GetPM(), dc.m_hDC, rcCheck, ePT );
  152. }
  153. }; // class CExtGridCellCheckBoxEye
  154. /////////////////////////////////////////////////////////////////////////////
  155. // CPageGrid dialog
  156. class CPageGrid : public CPageBase
  157. {
  158. // Construction
  159. public:
  160. CPageGrid(CWnd* pParent = NULL);   // standard constructor
  161. class CCellTypeHyperLinkButton : public CExtHyperLinkButton 
  162. {
  163. public:
  164. CCellTypeHyperLinkButton()
  165. {
  166. m_bUseStdCommandNotification = true;
  167. m_bDrawFocusRect = false;
  168. m_bTextUnderline = true;
  169. }
  170. };
  171. // Dialog Data
  172. //{{AFX_DATA(CPageGrid)
  173. enum { IDD = IDD_PAGE_GRID };
  174. CCellTypeHyperLinkButton m_wndCellBoolean;
  175. CCellTypeHyperLinkButton m_wndCellCheckBox;
  176. CCellTypeHyperLinkButton m_wndCellRadioButton;
  177. CCellTypeHyperLinkButton m_wndCellColor;
  178. CCellTypeHyperLinkButton m_wndCellComboBox;
  179. CCellTypeHyperLinkButton m_wndCellCheckComboBox;
  180. CCellTypeHyperLinkButton m_wndCellDateTime;
  181. CCellTypeHyperLinkButton m_wndCellDuration;
  182. CCellTypeHyperLinkButton m_wndCellProgress;
  183. CCellTypeHyperLinkButton m_wndCellHyperlink;
  184. CCellTypeHyperLinkButton m_wndCellIPAddress;
  185. CCellTypeHyperLinkButton m_wndCellNumber;
  186. CCellTypeHyperLinkButton m_wndCellCurrency;
  187. CCellTypeHyperLinkButton m_wndCellScientific;
  188. CCellTypeHyperLinkButton m_wndCellFraction;
  189. CCellTypeHyperLinkButton m_wndCellPercentage;
  190. CCellTypeHyperLinkButton m_wndCellVariant;
  191. CCellTypeHyperLinkButton m_wndCellUpDown;
  192. CCellTypeHyperLinkButton m_wndCellPicture;
  193. CCellTypeHyperLinkButton m_wndCellSlider;
  194. CCellTypeHyperLinkButton m_wndCellText;
  195. CCellTypeHyperLinkButton m_wndCellPassword;
  196. CCellTypeHyperLinkButton m_wndCellFile;
  197. CCellTypeHyperLinkButton m_wndCellFileImage;
  198. CCellTypeHyperLinkButton m_wndCellFolder;
  199. CCellTypeHyperLinkButton m_wndCellFont;
  200. CCellTypeHyperLinkButton m_wndCellFontFaceName;
  201. CCellTypeHyperLinkButton m_wndCellFontWeight;
  202. CCellTypeHyperLinkButton m_wndCellColorPart;
  203. CCellTypeHyperLinkButton m_wndCellRectPart;
  204. CCellTypeHyperLinkButton m_wndCellInplaceSlider;
  205. CCellTypeHyperLinkButton m_wndCellInplaceScrollBar;
  206. CCellTypeHyperLinkButton m_wndCellHotKey;
  207. CCellTypeHyperLinkButton m_wndCellButton;
  208. CCellTypeHyperLinkButton m_wndCellObjectSize;
  209. CCellTypeHyperLinkButton m_wndCellGeographic;
  210. CCellTypeHyperLinkButton m_wndCellMaskedString;
  211. CCellTypeHyperLinkButton m_wndCellSystemNumber;
  212. CCellTypeHyperLinkButton m_wndCellSystemCurrency;
  213. CExtIconButton m_btnPPV;
  214. //}}AFX_DATA
  215. // Overrides
  216. // ClassWizard generated virtual function overrides
  217. //{{AFX_VIRTUAL(CPageGrid)
  218. public:
  219. virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
  220. protected:
  221. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  222. //}}AFX_VIRTUAL
  223. // Implementation
  224. protected:
  225. class CMyGridWnd : public CExtPPVW < CExtGridWnd >
  226. {
  227. protected:
  228. CExtScrollBar m_wndScrollBarH, m_wndScrollBarV;
  229. virtual CScrollBar * GetScrollBarCtrl( int nBar ) const
  230. {
  231. ASSERT_VALID( this );
  232. if( m_hWnd == NULL || (! ::IsWindow(m_hWnd) ) )
  233. return NULL;
  234. ASSERT( nBar == SB_HORZ || nBar == SB_VERT );
  235. if( nBar == SB_HORZ )
  236. {
  237. if( m_wndScrollBarH.GetSafeHwnd() != NULL )
  238. return ( const_cast < CExtScrollBar * > ( &m_wndScrollBarH ) );
  239. } // if( nBar == SB_HORZ )
  240. else
  241. {
  242. if( m_wndScrollBarV.GetSafeHwnd() != NULL )
  243. return ( const_cast < CExtScrollBar * > ( &m_wndScrollBarV ) );
  244. } // else from if( nBar == SB_HORZ )
  245. return NULL;
  246. }
  247. virtual void PreSubclassWindow()
  248. {
  249. CExtPPVW < CExtGridWnd > :: PreSubclassWindow();
  250. m_wndScrollBarH.m_eSO = CExtScrollBar::__ESO_BOTTOM;
  251. m_wndScrollBarV.m_eSO = CExtScrollBar::__ESO_RIGHT;
  252. if( ! m_wndScrollBarV.Create(
  253. WS_CHILD|WS_VISIBLE|SBS_VERT|SBS_RIGHTALIGN,
  254. CRect(0,0,0,0),
  255. this,
  256. 1
  257. )
  258. )
  259. {
  260. ASSERT( FALSE );
  261. return;
  262. }
  263. if( ! m_wndScrollBarH.Create(
  264. WS_CHILD|WS_VISIBLE|SBS_HORZ|SBS_BOTTOMALIGN,
  265. CRect(0,0,0,0),
  266. this,
  267. 2
  268. )
  269. )
  270. {
  271. ASSERT( FALSE );
  272. return;
  273. }
  274. m_wndScrollBarH.SyncReservedSpace( &m_wndScrollBarV );
  275. m_wndScrollBarV.SyncReservedSpace( &m_wndScrollBarH );
  276. OnSwRecalcLayout( true );
  277. }
  278. }; // class CMyGridWnd
  279. CMyGridWnd m_wndGrid;
  280. void _InitColumnBoolean( LONG nColNo, LONG nRowCount );
  281. void _InitColumnCheckBox( LONG nColNo, LONG nRowCount );
  282. void _InitColumnRadioButton( LONG nColNo, LONG nRowCount );
  283. void _InitColumnColor( LONG nColNo, LONG nRowCount );
  284. void _InitColumnComboBox( LONG nColNo, LONG nRowCount );
  285. void _InitColumnCheckComboBox( LONG nColNo, LONG nRowCount );
  286. void _InitColumnDateTime( LONG nColNo, LONG nRowCount );
  287. void _InitColumnDuration( LONG nColNo, LONG nRowCount );
  288. void _InitColumnHyperLink( LONG nColNo, LONG nRowCount );
  289. void _InitColumnIPAddress( LONG nColNo, LONG nRowCount );
  290. void _InitColumnNumber( LONG nColNo, LONG nRowCount );
  291. void _InitColumnCurrency( LONG nColNo, LONG nRowCount );
  292. void _InitColumnScientific( LONG nColNo, LONG nRowCount );
  293. void _InitColumnFraction( LONG nColNo, LONG nRowCount );
  294. void _InitColumnPercentage( LONG nColNo, LONG nRowCount );
  295. void _InitColumnVariant( LONG nColNo, LONG nRowCount );
  296. void _InitColumnUpDown( LONG nColNo, LONG nRowCount );
  297. void _InitColumnPicture( LONG nColNo, LONG nRowCount );
  298. void _InitColumnProgress( LONG nColNo, LONG nRowCount );
  299. void _InitColumnSlider( LONG nColNo, LONG nRowCount );
  300. void _InitColumnText( LONG nColNo, LONG nRowCount );
  301. void _InitColumnPassword( LONG nColNo, LONG nRowCount );
  302. void _InitColumnFile( LONG nColNo, LONG nRowCount );
  303. void _InitColumnFileImage( LONG nColNo, LONG nRowCount );
  304. void _InitColumnFolder( LONG nColNo, LONG nRowCount );
  305. void _InitColumnFont( LONG nColNo, LONG nRowCount );
  306. void _InitColumnFontFaceName( LONG nColNo, LONG nRowCount );
  307. void _InitColumnFontWeight( LONG nColNo, LONG nRowCount );
  308. void _InitColumnColorPart( LONG nColNo, LONG nRowCount );
  309. void _InitColumnRectPart( LONG nColNo, LONG nRowCount );
  310. void _InitColumnInplaceSlider( LONG nColNo, LONG nRowCount, bool bSliderMode = true );
  311. void _InitColumnInplaceScrollBar( LONG nColNo, LONG nRowCount );
  312. void _InitColumnHotKey( LONG nColNo, LONG nRowCount );
  313. void _InitColumnButton( LONG nColNo, LONG nRowCount );
  314. void _InitColumnObjectSize( LONG nColNo, LONG nRowCount );
  315. void _InitColumnGeographic( LONG nColNo, LONG nRowCount );
  316. void _InitColumnStringMasked( LONG nColNo, LONG nRowCount );
  317. void _InitColumnSystemNumber( LONG nColNo, LONG nRowCount );
  318. void _InitColumnSystemCurrency( LONG nColNo, LONG nRowCount );
  319. // Generated message map functions
  320. //{{AFX_MSG(CPageGrid)
  321. virtual BOOL OnInitDialog();
  322. //}}AFX_MSG
  323. afx_msg void OnTimer( __EXT_MFC_UINT_PTR nIDEvent );
  324. DECLARE_MESSAGE_MAP()
  325. };
  326. #endif // #if (!defined __EXT_MFC_NO_GRIDWND)
  327. //{{AFX_INSERT_LOCATION}}
  328. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  329. #endif // !defined(AFX_PAGEGRID_H__F54F4632_3768_42D0_9E0E_3F85326598E1__INCLUDED_)