TestDlg.cpp
上传用户:zdjx198
上传日期:2007-01-02
资源大小:95k
文件大小:4k
源码类别:

ListView/ListBox

开发平台:

Visual C++

  1. // TestDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "gridlist.h"
  5. #include "TestDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // TestDlg dialog
  13. TestDlg::TestDlg(CWnd* pParent /*=NULL*/)
  14. : CDialog(TestDlg::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(TestDlg)
  17. //}}AFX_DATA_INIT
  18. m_pImageList = 0;
  19. m_pListEdit = 0;
  20. }
  21. TestDlg::~TestDlg()
  22. {
  23. delete m_pImageList;
  24. delete m_pListEdit;
  25. }
  26. void TestDlg::DoDataExchange(CDataExchange* pDX)
  27. {
  28. CDialog::DoDataExchange(pDX);
  29. //{{AFX_DATA_MAP(TestDlg)
  30. DDX_Control(pDX, IDC_LIST, m_GridListCtrl);
  31. //}}AFX_DATA_MAP
  32. }
  33. BEGIN_MESSAGE_MAP(TestDlg, CDialog)
  34. //{{AFX_MSG_MAP(TestDlg)
  35. ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_LIST, OnBeginlabeleditList)
  36. ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST, OnEndlabeleditList)
  37. //}}AFX_MSG_MAP
  38. END_MESSAGE_MAP()
  39. /////////////////////////////////////////////////////////////////////////////
  40. // TestDlg message handlers
  41. BOOL TestDlg::OnInitDialog() 
  42. {
  43. CDialog::OnInitDialog();
  44. m_GridListCtrl.PrepareControl(0);
  45. TCHAR rgtsz[4][10] = {_T("Column 1"), _T("Column 2"), _T("Column 3"), _T("Column 4")};
  46. LV_ITEM lvitem;
  47. LV_COLUMN lvcolumn;
  48. CRect rect;
  49. m_GridListCtrl.GetWindowRect( &rect );
  50. // Insert Image Lists
  51. m_pImageList = new CImageList();
  52. m_pImageList->Create( IDB_BITMAP1, 16, 1, RGB(255,255,255) );
  53. m_GridListCtrl.SetImageList( m_pImageList, LVSIL_SMALL );
  54. // Insert columns using the order field
  55. int i;
  56. for(i = 0; i < 4; i++)  
  57. {
  58. lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER;
  59. lvcolumn.fmt = LVCFMT_LEFT;
  60. lvcolumn.pszText = rgtsz[i];
  61. lvcolumn.iSubItem = i;
  62. lvcolumn.iOrder = i;
  63. lvcolumn.cx = rect.Width() / 4;  
  64. m_GridListCtrl.InsertColumn(i, &lvcolumn);  
  65. }
  66. int iItem, iSubItem, iActualItem;
  67. TCHAR buffer[30];
  68. for (iItem = 0; iItem < 50; iItem++)  // will now insert the items and subitems into the list view.
  69. for (iSubItem = 0; iSubItem < 4; iSubItem++)
  70. {
  71. lvitem.mask = LVIF_TEXT | (iSubItem == 0? LVIF_IMAGE : 0);
  72. lvitem.iItem = (iSubItem == 0)? iItem : iActualItem;
  73. lvitem.iSubItem = iSubItem;
  74. lvitem.iImage = (iItem%2)?0:2;
  75. sprintf( buffer, "Cell( %d, %d )", iItem+1, iSubItem+1);
  76. lvitem.pszText = buffer;
  77. if (iSubItem == 0)
  78. iActualItem = m_GridListCtrl.InsertItem(&lvitem);
  79. else
  80. m_GridListCtrl.SetItem(&lvitem);
  81. }
  82. return TRUE;  // return TRUE  unless you set the focus to a control
  83. }
  84. void TestDlg::OnBeginlabeleditList(NMHDR* pNMHDR, LRESULT* pResult) 
  85. {
  86. LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
  87. CString str = pDispInfo->item.pszText;
  88. int item = pDispInfo->item.iItem;
  89. int subitem = pDispInfo->item.iSubItem;
  90. // Construct and create the custom multiline edit control.
  91. // We could just as well have used a combobox, checkbox, 
  92. // rich text control, etc.
  93. m_pListEdit = new CInPlaceEdit( item, subitem, str );
  94. // Start with a small rectangle.  We'll change it later.
  95. CRect  rect( 0,0,1,1 );
  96. DWORD dwStyle = ES_LEFT;
  97. dwStyle |= WS_BORDER|WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL;
  98. m_pListEdit->Create( dwStyle, rect, &m_GridListCtrl, 103 );
  99. // Have the Grid position and size the custom edit control
  100. m_GridListCtrl.PositionControl( m_pListEdit, item, subitem );
  101. // Have the edit box size itself to its content.
  102. m_pListEdit->CalculateSize();
  103. // Return TRUE so that the list control will hnadle NOT edit label itself. 
  104. *pResult = 1;
  105. }
  106. void TestDlg::OnEndlabeleditList(NMHDR* pNMHDR, LRESULT* pResult) 
  107. {
  108. LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
  109. // TODO: Add your control notification handler code here
  110. int item = pDispInfo->item.iItem;
  111. int subitem = pDispInfo->item.iSubItem;
  112. // This is coming from the grid list control notification.
  113. if( m_pListEdit )
  114. {
  115. CString str;
  116. if( pDispInfo->item.pszText )
  117. m_GridListCtrl.SetItemText( item, subitem, pDispInfo->item.pszText );
  118. delete m_pListEdit;
  119. m_pListEdit = 0;
  120. }
  121. *pResult = 0;
  122. }