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

界面编程

开发平台:

Visual C++

  1. // PageListCtrl.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "profuis_controls.h"
  5. #include "PageListCtrl.h"
  6. #include "MainDlg.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. #if ( ! defined __EXT_MFC_NO_LIST_VIEW_CTRL )
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CPageListCtrl dialog
  15. CPageListCtrl::CPageListCtrl(CWnd* pParent /*=NULL*/)
  16. : CPageBase(CPageListCtrl::IDD, pParent)
  17. , m_bInitComplete( false )
  18. {
  19. //{{AFX_DATA_INIT(CPageListCtrl)
  20. //}}AFX_DATA_INIT
  21. SetAutoSubclassChildControls();
  22. }
  23. void CPageListCtrl::DoDataExchange(CDataExchange* pDX)
  24. {
  25. CPageBase::DoDataExchange(pDX);
  26. //{{AFX_DATA_MAP(CPageListCtrl)
  27. DDX_Control(pDX, IDC_CHECK_SHOW_HEADER_TOOL_TIPS, m_checkShowToolTipsInHeader);
  28. DDX_Control(pDX, IDC_CHECK_SHOW_HEADER_ICONS, m_checkShowHeaderIcons);
  29. DDX_Control(pDX, IDC_CHECK_SHOW_HEADER_BUTTONS, m_checkShowHeaderButtons);
  30. DDX_Control(pDX, IDC_HYPER_LINK_STATE_SAVE, m_hyperlinkStateSave);
  31. DDX_Control(pDX, IDC_HYPER_LINK_STATE_LOAD, m_hyperlinkStateLoad);
  32. DDX_Control(pDX, IDC_CHECK_COLUMN_AUTO_SIZING_BY_HEADER, m_checkColumnAutoSizingByHeader);
  33. DDX_Control(pDX, IDC_CHECK_COLUMN_AUTO_SIZING_BY_DATA, m_checkColumnAutoSizingByData);
  34. DDX_Control(pDX, IDC_CHECK_MULTI_COLUMN_SORTING, m_checkSortingByMultipleColumns);
  35. DDX_Control(pDX, IDC_CHECK_ENABLE_SORTING, m_checkSorting);
  36. DDX_Control(pDX, IDC_CHECK_ENABLE_COLUMN_DND, m_checkColumnDND);
  37. DDX_Control(pDX, IDC_COMBO_LIST_TYPE, m_comboListType);
  38. //}}AFX_DATA_MAP
  39. DDX_Control(pDX, IDC_MY_LIST_CTRL, m_wndList);
  40. }
  41. BEGIN_MESSAGE_MAP(CPageListCtrl, CPageBase)
  42. //{{AFX_MSG_MAP(CPageListCtrl)
  43. ON_CBN_SELENDOK(IDC_COMBO_LIST_TYPE, OnSelendokComboListType)
  44. ON_WM_DESTROY()
  45. ON_BN_CLICKED(IDC_CHECK_ENABLE_SORTING, OnCheckEnableSorting)
  46. ON_BN_CLICKED(IDC_CHECK_MULTI_COLUMN_SORTING, OnCheckMultiColumnSorting)
  47. ON_BN_CLICKED(IDC_CHECK_ENABLE_COLUMN_DND, OnCheckEnableColumnDnd)
  48. ON_BN_CLICKED(IDC_CHECK_COLUMN_AUTO_SIZING_BY_DATA, OnCheckColumnAutoSizingByData)
  49. ON_BN_CLICKED(IDC_CHECK_COLUMN_AUTO_SIZING_BY_HEADER, OnCheckColumnAutoSizingByHeader)
  50. ON_BN_CLICKED(IDC_HYPER_LINK_STATE_LOAD, OnHyperLinkStateLoad)
  51. ON_BN_CLICKED(IDC_HYPER_LINK_STATE_SAVE, OnHyperLinkStateSave)
  52. ON_BN_CLICKED(IDC_CHECK_SHOW_HEADER_BUTTONS, OnCheckShowHeaderButtons)
  53. ON_BN_CLICKED(IDC_CHECK_SHOW_HEADER_ICONS, OnCheckShowHeaderIcons)
  54. ON_BN_CLICKED(IDC_CHECK_SHOW_HEADER_TOOL_TIPS, OnCheckShowHeaderToolTips)
  55. //}}AFX_MSG_MAP
  56. ON_REGISTERED_MESSAGE( CExtHeaderCtrl::g_nMsgHeaderButtonClick, OnMsgHeaderButtonClick )
  57. END_MESSAGE_MAP()
  58. void CPageListCtrl::PageBase_PostInit()
  59. {
  60. ASSERT_VALID( this );
  61. CPageBase::PageBase_PostInit();
  62. CMainDlg * pMainDlg = (CMainDlg*)GetParent();
  63. INT nInit = 0, nCount = pMainDlg->m_wndList.GetCount();
  64. VERIFY( m_ImageListNormal.Create( 32, 32, ILC_COLOR24|ILC_MASK, 0, 1 ) );
  65. VERIFY( m_ImageListSmall. Create( 16, 16, ILC_COLOR24|ILC_MASK, 0, 1 ) );
  66. HINSTANCE hInstResource = ::AfxFindResourceHandle( MAKEINTRESOURCE( IDR_MAINFRAME ), RT_ICON );
  67. ASSERT( hInstResource != NULL );
  68. for( nInit = 0; nInit < nCount; nInit++ )
  69. {
  70. CExtCmdIcon * pIcon = pMainDlg->m_wndList.GetIconPtr( nInit );
  71. ASSERT( pIcon != NULL );
  72. ASSERT( ! pIcon->IsEmpty() );
  73. CExtBitmap _bmp = pIcon->m_bmpNormal;
  74. _bmp.Make32();
  75. ASSERT( ! _bmp.IsEmpty() );
  76. HICON hIcon = _bmp.CreateHICON( true );
  77. m_ImageListNormal.Add( hIcon );
  78. ::DestroyIcon( hIcon );
  79. CExtBitmap::Filter _f( CExtBitmap::Filter::lanczos );
  80. _bmp.Scale( 16, 16, _f );
  81. ASSERT( ! _bmp.IsEmpty() );
  82. hIcon = _bmp.CreateHICON( false );
  83. m_ImageListSmall.Add( hIcon );
  84. ::DestroyIcon( hIcon );
  85. }
  86. m_wndList.SetImageList( &m_ImageListNormal, LVSIL_NORMAL );
  87. m_wndList.SetImageList( &m_ImageListSmall, LVSIL_SMALL );
  88. INT nColumnCount = m_wndList.GetHeaderCtrl().GetItemCount(), nColumnIndex;
  89. INT nItemCount = 100, nItemIndex;
  90. for( nItemIndex = 0; nItemIndex < nItemCount; nItemIndex ++ )
  91. {
  92. CExtSafeString strItemText;
  93. strItemText.Format( _T("Item %02d"), nItemIndex );
  94. m_wndList.InsertItem( nItemIndex, strItemText );
  95. for( nColumnIndex = 0; nColumnIndex < nColumnCount; nColumnIndex ++ )
  96. {
  97. int nImageIndex = nItemIndex % nCount;
  98. CExtSafeString strSubItemText;
  99. CString strLBText;
  100. pMainDlg->m_wndList.GetText( nImageIndex, strLBText );
  101. //strSubItemText.Format( _T("%d ---- Item %02d, SubItem %02d"), rand()%2, nItemIndex, nColumnIndex );
  102. if( nColumnIndex == 0 )
  103. strSubItemText = LPCTSTR(strLBText);
  104. else
  105. strSubItemText.Format( _T("%d"), rand()%5 );
  106. VERIFY(
  107. m_wndList.SetItem(
  108. nItemIndex,
  109. nColumnIndex, //int nSubItem,
  110. LVIF_TEXT|LVIF_IMAGE, // UINT nMask,
  111. strSubItemText, // 0L, // LPCTSTR lpszItem,
  112. nImageIndex, // int nImage,
  113. 0L, // UINT nState,
  114. 0L, // UINT nStateMask,
  115. 0L // LPARAM lParam
  116. )
  117. );
  118. }
  119. }
  120. }
  121. /////////////////////////////////////////////////////////////////////////////
  122. // CPageListCtrl message handlers
  123. BOOL CPageListCtrl::OnInitDialog() 
  124. {
  125. CWinApp * pApp = ::AfxGetApp();
  126. ASSERT( pApp != NULL );
  127. ASSERT( pApp->m_pszRegistryKey != NULL );
  128. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  129. ASSERT( pApp->m_pszProfileName != NULL );
  130. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  131. CPageBase::OnInitDialog();
  132. INT nColumnCount = 5, nColumnIndex;
  133. for( nColumnIndex = 0; nColumnIndex < nColumnCount; nColumnIndex ++ )
  134. {
  135. CExtSafeString strColumnCaptionText;
  136. strColumnCaptionText.Format( _T("Column %02d"), nColumnIndex );
  137. m_wndList.InsertColumn( nColumnIndex, strColumnCaptionText, LVCFMT_LEFT, 150 );
  138. }
  139. m_hyperlinkStateLoad.m_bUseStdCommandNotification = true;
  140. m_hyperlinkStateSave.m_bUseStdCommandNotification = true;
  141. AddAnchor( IDC_MY_LIST_CTRL, __RDA_LT, __RDA_RB );
  142. AddAnchor( IDC_STATIC_LIST_TYPE, __RDA_RT );
  143. AddAnchor( IDC_COMBO_LIST_TYPE, __RDA_RT );
  144. AddAnchor( IDC_CHECK_MULTI_COLUMN_SORTING, __RDA_RT );
  145. AddAnchor( IDC_CHECK_ENABLE_SORTING, __RDA_RT );
  146. AddAnchor( IDC_CHECK_ENABLE_COLUMN_DND, __RDA_RT );
  147. AddAnchor( IDC_STATIC_COLUMN_AUTO_SIZING, __RDA_RT );
  148. AddAnchor( IDC_CHECK_COLUMN_AUTO_SIZING_BY_DATA, __RDA_RT );
  149. AddAnchor( IDC_CHECK_COLUMN_AUTO_SIZING_BY_HEADER, __RDA_RT );
  150. AddAnchor( IDC_CHECK_SHOW_HEADER_BUTTONS, __RDA_RT );
  151. AddAnchor( IDC_CHECK_SHOW_HEADER_ICONS, __RDA_RT );
  152. AddAnchor( IDC_CHECK_SHOW_HEADER_TOOL_TIPS, __RDA_RT );
  153. AddAnchor( IDC_STATIC_FRAME_1, __RDA_RT );
  154. AddAnchor( IDC_STATIC_FRAME_2, __RDA_RT );
  155. AddAnchor( IDC_STATIC_FRAME_3, __RDA_RT );
  156. AddAnchor( IDC_HYPER_LINK_STATE_LOAD, __RDA_RB );
  157. AddAnchor( IDC_HYPER_LINK_STATE_SAVE, __RDA_RB );
  158. m_wndList.StateLoad( pApp->m_pszRegistryKey, pApp->m_pszProfileName, _T("TestExtListCtrl") );
  159. m_comboListType.SetCurSel( INT( m_wndList.GetStyle() & LVS_TYPEMASK ) );
  160. OnCheckEnableSorting();
  161. OnCheckEnableColumnDnd();
  162. OnCheckColumnAutoSizingByHeader();
  163. OnCheckColumnAutoSizingByData();
  164. OnCheckShowHeaderButtons();
  165. OnCheckShowHeaderToolTips();
  166. m_bInitComplete = true;
  167. return TRUE;
  168. }
  169. void CPageListCtrl::OnDestroy() 
  170. {
  171. CWinApp * pApp = ::AfxGetApp();
  172. ASSERT( pApp != NULL );
  173. ASSERT( pApp->m_pszRegistryKey != NULL );
  174. ASSERT( pApp->m_pszRegistryKey[0] != _T('') );
  175. ASSERT( pApp->m_pszProfileName != NULL );
  176. ASSERT( pApp->m_pszProfileName[0] != _T('') );
  177. m_wndList.StateSave( pApp->m_pszRegistryKey, pApp->m_pszProfileName, _T("TestExtListCtrl") );
  178. CExtResizableDialog ::OnDestroy();
  179. }
  180. void CPageListCtrl::OnSelendokComboListType() 
  181. {
  182. INT nSel = m_comboListType.GetCurSel();
  183. ASSERT( 0 <= nSel && nSel <= 3 );
  184. m_wndList.ModifyStyle( LVS_TYPEMASK, 0 );
  185. m_wndList.ModifyStyle( 0, nSel );
  186. }
  187. #endif // ( ! defined __EXT_MFC_NO_LIST_VIEW_CTRL )
  188. void CPageListCtrl::OnCheckEnableSorting()
  189. {
  190. bool bEnableSorting = ( m_checkSorting.GetCheck() != 0 ) ? true : false;
  191. m_checkSortingByMultipleColumns.EnableWindow( bEnableSorting ? TRUE : FALSE );
  192. bool bMultiColumnSorting = false;
  193. if( bEnableSorting )
  194. bMultiColumnSorting = ( m_checkSortingByMultipleColumns.GetCheck() != 0 ) ? true : false;
  195. m_wndList.m_bSortEnabled = bEnableSorting;
  196. m_wndList.m_bSortEnabledMultiple = bMultiColumnSorting;
  197. }
  198. void CPageListCtrl::OnCheckMultiColumnSorting()
  199. {
  200. OnCheckEnableSorting();
  201. }
  202. void CPageListCtrl::OnCheckEnableColumnDnd()
  203. {
  204. bool bEnableColumnDND = ( m_checkColumnDND.GetCheck() != 0 ) ? true : false;
  205. DWORD dwExtendedListStyle = m_wndList.GetExtendedStyle();
  206. if( bEnableColumnDND )
  207. dwExtendedListStyle |= (LVS_EX_HEADERDRAGDROP);
  208. else
  209. dwExtendedListStyle &= ~(LVS_EX_HEADERDRAGDROP);
  210. m_wndList.SetExtendedStyle(  dwExtendedListStyle );
  211. }
  212. void CPageListCtrl::OnCheckColumnAutoSizingByData() 
  213. {
  214. m_wndList.m_bColumnAutoSizingByData = ( m_checkColumnAutoSizingByData.GetCheck() != 0 ) ? true : false;
  215. }
  216. void CPageListCtrl::OnCheckColumnAutoSizingByHeader() 
  217. {
  218. m_wndList.m_bColumnAutoSizingByHeader = ( m_checkColumnAutoSizingByHeader.GetCheck() != 0 ) ? true : false;
  219. }
  220. void CPageListCtrl::OnHyperLinkStateLoad() 
  221. {
  222. CString strPathName;
  223. #if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  224. CExtShellDialogFile dlgShellFile(
  225. NULL,
  226. CExtShellDialogFile::__EFDT_OPEN_SINGLE
  227. );
  228. dlgShellFile.m_comboFileTypes.SetFilter(
  229. _T("List control state files (*.list)|*.list|")
  230. _T("All files (*.*)|*.*|")
  231. _T("|")
  232. );
  233. dlgShellFile.m_nInitialFileTypeIndex = 0;
  234. dlgShellFile.m_bFilesMustExist = true;
  235. dlgShellFile.m_strCustomDialogCaption = _T("Open list control state file");
  236. if( dlgShellFile.DoModal() != IDOK )
  237. return;
  238. ASSERT( dlgShellFile.m_arrRetValNames.GetSize() == 1 );
  239. strPathName = LPCTSTR(dlgShellFile.m_arrRetValNames[0]);
  240. #else // ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  241. CFileDialog dlgFile(
  242. TRUE,
  243. _T("list"),
  244. NULL,
  245. OFN_FILEMUSTEXIST
  246. |OFN_PATHMUSTEXIST
  247. |OFN_HIDEREADONLY
  248. |OFN_LONGNAMES
  249. |OFN_NOCHANGEDIR
  250. ,
  251. _T("List control state files (*.list)|*.list|")
  252. _T("All files (*.*)|*.*|")
  253. _T("|")
  254. ,
  255. this
  256. );
  257. dlgFile.m_ofn.lpstrTitle = _T("Open list control state file");
  258. if( dlgFile.DoModal() != IDOK )
  259. return;
  260. strPathName = dlgFile.GetPathName();
  261. ASSERT( ! strPathName.IsEmpty() );
  262. #endif // else from if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  263. try
  264. {
  265. CFile _file(
  266. LPCTSTR(strPathName),
  267. CFile::modeRead|CFile::typeBinary
  268. );
  269. CArchive ar( &_file, CArchive::load );
  270. m_wndList.StateSerialize( ar );
  271. return;
  272. } // try
  273. catch( CException * pException )
  274. {
  275. pException->Delete();
  276. ASSERT( FALSE );
  277. } // catch( CException * pException )
  278. catch( ... )
  279. {
  280. ASSERT( FALSE );
  281. } // catch( ... )
  282. ::AfxMessageBox(
  283. _T("Failed to load list control state file."),
  284. MB_OK|MB_ICONERROR
  285. );
  286. }
  287. void CPageListCtrl::OnHyperLinkStateSave() 
  288. {
  289. CString strPathName;
  290. #if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  291. CExtShellDialogFile dlgShellFile(
  292. NULL,
  293. CExtShellDialogFile::__EFDT_SAVE_AS
  294. );
  295. dlgShellFile.m_comboFileTypes.SetFilter(
  296. _T("List control state files (*.list)|*.list|")
  297. _T("All files (*.*)|*.*|")
  298. _T("|")
  299. );
  300. dlgShellFile.m_nInitialFileTypeIndex = 0;
  301. dlgShellFile.m_bPathMustExist = true;
  302. dlgShellFile.m_strCustomDialogCaption = _T("Save list control state file");
  303. if( dlgShellFile.DoModal() != IDOK )
  304. return;
  305. ASSERT( dlgShellFile.m_arrRetValNames.GetSize() == 1 );
  306. strPathName = LPCTSTR(dlgShellFile.m_arrRetValNames[0]);
  307. #else // ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  308. CFileDialog dlgFile(
  309. FALSE,
  310. _T("list"),
  311. NULL,
  312. OFN_FILEMUSTEXIST
  313. |OFN_HIDEREADONLY
  314. |OFN_LONGNAMES
  315. |OFN_NOCHANGEDIR
  316. |OFN_OVERWRITEPROMPT
  317. ,
  318. _T("List control state files (*.list)|*.list|")
  319. _T("All files (*.*)|*.*|")
  320. _T("|")
  321. ,
  322. this
  323. );
  324. dlgFile.m_ofn.lpstrTitle = _T("Save list control state file");
  325. if( dlgFile.DoModal() != IDOK )
  326. return;
  327. strPathName = dlgFile.GetPathName();
  328. ASSERT( ! strPathName.IsEmpty() );
  329. #endif // else from if ( ! defined __EXT_MFC_NO_SHELL_DIALOG_FILE )
  330. try
  331. {
  332. CFile _file(
  333. LPCTSTR(strPathName),
  334. CFile::modeCreate|CFile::modeWrite|CFile::typeBinary
  335. );
  336. CArchive ar( &_file, CArchive::store );
  337. m_wndList.StateSerialize( ar );
  338. m_wndList.RedrawWindow( NULL, NULL, RDW_INVALIDATE|RDW_ERASE|RDW_UPDATENOW|RDW_ERASENOW|RDW_ALLCHILDREN );
  339. return;
  340. } // try
  341. catch( CException * pException )
  342. {
  343. pException->Delete();
  344. ASSERT( FALSE );
  345. } // catch( CException * pException )
  346. catch( ... )
  347. {
  348. ASSERT( FALSE );
  349. } // catch( ... )
  350. ::AfxMessageBox(
  351. _T("Failed to save list control state file."),
  352. MB_OK|MB_ICONERROR
  353. );
  354. }
  355. void CPageListCtrl::OnCheckShowHeaderButtons() 
  356. {
  357. CExtBitmap bmpIconItem, bmpIconButton;
  358. bool bShowHeaderButtons = ( m_checkShowHeaderButtons.GetCheck() != 0 ) ? true : false;
  359. bool bShowHeaderIcons = ( m_checkShowHeaderIcons.GetCheck() != 0 ) ? true : false;
  360. if( bShowHeaderButtons )
  361. {
  362. HICON hIcon = ::AfxGetApp()->LoadIcon( IDI_NOTEPAD );
  363. VERIFY( bmpIconButton.AssignFromHICON( hIcon ) );
  364. CExtBitmap::Filter _f( CExtBitmap::Filter::lanczos );
  365. bmpIconButton.Scale( 14, 14, _f );
  366. ::DestroyIcon( hIcon );
  367. }
  368. if( bShowHeaderIcons )
  369. {
  370. HICON hIcon = ::AfxGetApp()->LoadIcon( IDR_MAINFRAME );
  371. VERIFY( bmpIconItem.AssignFromHICON( hIcon ) );
  372. CExtBitmap::Filter _f( CExtBitmap::Filter::lanczos );
  373. bmpIconItem.Scale( 14, 14, _f );
  374. ::DestroyIcon( hIcon );
  375. }
  376. CExtHeaderCtrl & wndHeader = m_wndList.GetHeaderCtrl();
  377. ASSERT( wndHeader.GetSafeHwnd() != NULL );
  378. INT nColNo, nColCount = INT( wndHeader.GetItemCount() );
  379. for( nColNo = 0; nColNo < nColCount; nColNo ++ )
  380. {
  381. CExtHeaderCtrl::EXTENDED_ITEM_DATA & _eii = wndHeader.ExtendedItemDataGet( nColNo );
  382. HD_ITEM _item;
  383. ::memset( &_item, 0, sizeof(HD_ITEM) );
  384. _item.mask = UINT(HDI_TEXT);
  385. TCHAR strText[ 1024 ];
  386. _item.cchTextMax = sizeof( strText ) / sizeof( strText[0] );
  387. _item.pszText = strText;
  388. wndHeader.GetItem( nColNo, &_item );
  389. _eii.m_strTipTextItem.Format( _T("Tooltip for "%s" header item"), LPCTSTR(strText) );
  390. if( bShowHeaderButtons )
  391. {
  392. _eii.m_iconButton.m_bmpNormal = bmpIconButton;
  393. _eii.m_iconButton.m_bmpNormal.Scale( 12, 12 );
  394. _eii.m_strTipTextButton.Format( _T("Button inside "%s" header item"), LPCTSTR(strText) );
  395. }
  396. else
  397. {
  398. _eii.m_iconButton.Empty();
  399. _eii.m_strTipTextButton.Empty();
  400. }
  401. if( bShowHeaderIcons )
  402. _eii.m_iconItem.m_bmpNormal = bmpIconItem;
  403. else
  404. _eii.m_iconItem.m_bmpNormal.Empty();
  405. }
  406. m_wndList.RedrawWindow( NULL, NULL, RDW_INVALIDATE|RDW_ERASE|RDW_UPDATENOW|RDW_ERASENOW|RDW_ALLCHILDREN );
  407. }
  408. void CPageListCtrl::OnCheckShowHeaderIcons() 
  409. {
  410. OnCheckShowHeaderButtons();
  411. }
  412. void CPageListCtrl::OnCheckShowHeaderToolTips()
  413. {
  414. CExtHeaderCtrl & wndHeader = m_wndList.GetHeaderCtrl();
  415. ASSERT( wndHeader.GetSafeHwnd() != NULL );
  416. wndHeader.m_bShowTipsOverHeader = ( m_checkShowToolTipsInHeader.GetCheck() != 0 ) ? true : false;
  417. }
  418. LRESULT CPageListCtrl::OnMsgHeaderButtonClick( WPARAM wParam, LPARAM lParam )
  419. {
  420. lParam;
  421. CExtHeaderCtrl & wndHeader = m_wndList.GetHeaderCtrl();
  422. ASSERT( wndHeader.GetSafeHwnd() != NULL );
  423. HD_ITEM _item;
  424. ::memset( &_item, 0, sizeof(HD_ITEM) );
  425. _item.mask = UINT(HDI_TEXT);
  426. TCHAR strText[ 1024 ];
  427. _item.cchTextMax = sizeof( strText ) / sizeof( strText[0] );
  428. _item.pszText = strText;
  429. wndHeader.GetItem( int(wParam), &_item );
  430. CString str;
  431. str.Format( _T("Button on "%s" header item is clicked"), LPCTSTR(strText) );
  432. ::AfxMessageBox( LPCTSTR(str), MB_OK|MB_ICONINFORMATION );
  433. return 0L;
  434. }