DemoDlg.cpp
上传用户:zhouyunkk
上传日期:2022-07-16
资源大小:98k
文件大小:7k
源码类别:

ListView/ListBox

开发平台:

Visual C++

  1. // DemoDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "CListCtrlExDemo.h"
  5. #include "DemoDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif
  9. // CAboutDlg dialog used for App About
  10. class CAboutDlg : public CDialog
  11. {
  12. public:
  13. CAboutDlg();
  14. // Dialog Data
  15. enum { IDD = IDD_ABOUTBOX };
  16. protected:
  17. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  18. // Implementation
  19. protected:
  20. DECLARE_MESSAGE_MAP()
  21. };
  22. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  23. {
  24. }
  25. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  26. {
  27. CDialog::DoDataExchange(pDX);
  28. }
  29. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  30. END_MESSAGE_MAP()
  31. // CDemoDlg dialog
  32. CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/)
  33. : CDialog(CDemoDlg::IDD, pParent)
  34. {
  35. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  36. }
  37. void CDemoDlg::DoDataExchange(CDataExchange* pDX)
  38. {
  39. CDialog::DoDataExchange(pDX);
  40. DDX_Control(pDX, IDC_LIST_DEMO, m_lstDemo);
  41. DDX_Control(pDX, IDC_DATE, m_wndDT);
  42. DDX_Control(pDX, IDC_COMBO, m_wndCB);
  43. DDX_Control(pDX, IDC_EDIT, m_wndEdit);
  44. }
  45. BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)
  46. ON_WM_SYSCOMMAND()
  47. ON_WM_PAINT()
  48. ON_WM_QUERYDRAGICON()
  49. //}}AFX_MSG_MAP
  50. END_MESSAGE_MAP()
  51. // CDemoDlg message handlers
  52. void CDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)
  53. {
  54. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  55. {
  56. CAboutDlg dlgAbout;
  57. dlgAbout.DoModal();
  58. }
  59. else
  60. {
  61. CDialog::OnSysCommand(nID, lParam);
  62. }
  63. }
  64. // If you add a minimize button to your dialog, you will need the code below
  65. //  to draw the icon.  For MFC applications using the document/view model,
  66. //  this is automatically done for you by the framework.
  67. void CDemoDlg::OnPaint()
  68. {
  69. if (IsIconic())
  70. {
  71. CPaintDC dc(this); // device context for painting
  72. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  73. // Center icon in client rectangle
  74. int cxIcon = GetSystemMetrics(SM_CXICON);
  75. int cyIcon = GetSystemMetrics(SM_CYICON);
  76. CRect rect;
  77. GetClientRect(&rect);
  78. int x = (rect.Width() - cxIcon + 1) / 2;
  79. int y = (rect.Height() - cyIcon + 1) / 2;
  80. // Draw the icon
  81. dc.DrawIcon(x, y, m_hIcon);
  82. }
  83. else
  84. {
  85. CDialog::OnPaint();
  86. }
  87. }
  88. // The system calls this function to obtain the cursor to display while the user drags
  89. //  the minimized window.
  90. HCURSOR CDemoDlg::OnQueryDragIcon()
  91. {
  92. return static_cast<HCURSOR>(m_hIcon);
  93. }
  94. BOOL CDemoDlg::OnInitDialog()
  95. {
  96. CDialog::OnInitDialog();
  97. // Add "About..." menu item to system menu.
  98. // IDM_ABOUTBOX must be in the system command range.
  99. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  100. ASSERT(IDM_ABOUTBOX < 0xF000);
  101. CMenu* pSysMenu = GetSystemMenu(FALSE);
  102. if (pSysMenu != NULL)
  103. {
  104. CString strAboutMenu;
  105. strAboutMenu.LoadString(IDS_ABOUTBOX);
  106. if (!strAboutMenu.IsEmpty())
  107. {
  108. pSysMenu->AppendMenu(MF_SEPARATOR);
  109. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  110. }
  111. }
  112. // Set the icon for this dialog.  The framework does this automatically
  113. //  when the application's main window is not a dialog
  114. SetIcon(m_hIcon, TRUE); // Set big icon
  115. SetIcon(m_hIcon, FALSE); // Set small icon
  116. m_imgList.Create(1, 20, ILC_COLOR, 0, 1);
  117. m_lstDemo.SetImageList(&m_imgList, LVSIL_SMALL);
  118. FillListBox();
  119. m_lstDemo.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
  120. return TRUE;  // return TRUE  unless you set the focus to a control
  121. }
  122. void CDemoDlg::AddColumns(void)
  123. {
  124. m_lstDemo.InsertColumn(0, "Default Editor", LVCFMT_LEFT, 100);
  125. m_lstDemo.InsertColumn(1, "Date Time Editor", LVCFMT_LEFT, 100);
  126. m_lstDemo.InsertColumn(2, "Combobox Editor", LVCFMT_LEFT, 100);
  127. m_lstDemo.InsertColumn(3, "Color Select", LVCFMT_LEFT, 150);
  128. m_lstDemo.InsertColumn(4, "Read Only Column", LVCFMT_LEFT, 100);
  129. m_lstDemo.InsertColumn(5, "Just a Column", LVCFMT_LEFT, 100);
  130. m_lstDemo.SetColumnEditor(1, &CDemoDlg::InitEditor, &CDemoDlg::EndEditor, &m_wndDT);
  131. m_lstDemo.SetColumnEditor(2, &CDemoDlg::InitEditor, &CDemoDlg::EndEditor, &m_wndCB);
  132. m_lstDemo.SetColumnEditor(3, &CDemoDlg::InitEditor, &CDemoDlg::EndEditor, &m_dlgColor);
  133. m_lstDemo.SetColumnReadOnly(4);
  134. m_lstDemo.SetDefaultEditor(NULL, NULL, &m_wndEdit);
  135. m_lstDemo.SetColumnColors(4, RGB(200, 200, 200), RGB(128, 128, 128));
  136. m_lstDemo.SetColumnSorting(0, CListCtrlEx::Auto, CListCtrlEx::StringNoCase);
  137. m_lstDemo.SetColumnSorting(1, CListCtrlEx::Auto, CListCtrlEx::Date);
  138. m_lstDemo.SetColumnSorting(2, CListCtrlEx::Auto, CListCtrlEx::String);
  139. m_lstDemo.SetColumnSorting(3, CListCtrlEx::Auto, CListCtrlEx::StringNoCase);
  140. m_lstDemo.SetColumnSorting(4, CListCtrlEx::Auto, CListCtrlEx::StringNoCase);
  141. }
  142. void CDemoDlg::FillListBox(void)
  143. {
  144. m_lstDemo.Reset();
  145. AddColumns();
  146. CString strDate = COleDateTime(CTime::GetCurrentTime().GetTime()).Format();
  147. for(int i = 0; i < 20; i++)
  148. {
  149. CString str;
  150. str.Format("Some %d Text %d", rand(), rand());
  151. m_lstDemo.InsertItem(i, str);
  152. m_lstDemo.SetItemText(i, 1, strDate);
  153. m_lstDemo.SetItemText(i, 2, "text1");
  154. m_lstDemo.SetItemText(i, 3, "Some Text");
  155. m_lstDemo.SetItemText(i, 4, "Read Only");
  156. m_lstDemo.SetItemText(i, 5, "Some Text");
  157. if(i%9 == 3)
  158. {
  159. m_lstDemo.SetRowColors(i, -1, RGB(255, 0, 0));
  160. m_lstDemo.SetRowEditor(i, NULL, NULL, &m_wndEdit);
  161. }
  162. if(i % 7 == 0)
  163. {
  164. m_lstDemo.SetCellColors(i, 5, RGB(0, 255, 0), RGB(255, 255, 255));
  165. m_lstDemo.SetCellEditor(i, 5, &CDemoDlg::InitEditor, &CDemoDlg::EndEditor, &m_wndDT);
  166. }
  167. if(i % 8 == 0) m_lstDemo.SetCellColors(i, 5, RGB(0, 255, 0), -1);
  168. }
  169. }
  170. BOOL CDemoDlg::InitEditor(CWnd** pWnd, int nRow, int nColumn, CString& strSubItemText, DWORD_PTR dwItemData, void* pThis, BOOL bUpdate)
  171. {
  172. ASSERT(*pWnd);
  173. switch(nColumn)
  174. {
  175. case 1:
  176. case 5:
  177. {
  178. CDateTimeCtrl *pDTC = dynamic_cast<CDateTimeCtrl *>(*pWnd);
  179. COleDateTime dt;
  180. if(dt.ParseDateTime(strSubItemText)) pDTC->SetTime(dt);
  181. }
  182. break;
  183. case 2:
  184. {
  185. CComboBox *pCmb = dynamic_cast<CComboBox *>(*pWnd);
  186. pCmb->SelectString(0, strSubItemText);
  187. }
  188. break;
  189. case 3:
  190. {
  191. CDlgColor *pDlg = dynamic_cast<CDlgColor *>(*pWnd);
  192. pDlg->m_nColor = strSubItemText.CompareNoCase("green")?(strSubItemText.CompareNoCase("blue")?0:2):1;
  193. pDlg->Create(CDlgColor::IDD, (CWnd*)pThis);
  194. pDlg->UpdateData(FALSE);
  195. }
  196. break;
  197. }
  198. return TRUE;
  199. }
  200. BOOL CDemoDlg::EndEditor(CWnd** pWnd, int nRow, int nColumn, CString& strSubItemText, DWORD_PTR dwItemData, void* pThis, BOOL bUpdate)
  201. {
  202. ASSERT(pWnd);
  203. switch(nColumn)
  204. {
  205. case 1:
  206. case 5:
  207. {
  208. CDateTimeCtrl *pDTC = dynamic_cast<CDateTimeCtrl *>(*pWnd);
  209. COleDateTime dt;
  210. pDTC->GetTime(dt);
  211. strSubItemText = dt.Format();
  212. }
  213. break;
  214. case 2:
  215. {
  216. CComboBox *pCmb = dynamic_cast<CComboBox *>(*pWnd);
  217. int index = pCmb->GetCurSel();
  218. if(index >= 0) pCmb->GetLBText(index, strSubItemText);
  219. }
  220. break;
  221. case 3:
  222. {
  223. CDlgColor *pDlg = dynamic_cast<CDlgColor *>(*pWnd);
  224. CListCtrlEx *pList = reinterpret_cast<CListCtrlEx *>(pThis);
  225. pDlg->UpdateData(TRUE);
  226. switch(pDlg->m_nColor)
  227. {
  228. case 1:
  229. strSubItemText = "Green";
  230. pList->SetCellColors(nRow, nColumn, RGB(0, 255, 0), -1);
  231. break;
  232. case 2:
  233. strSubItemText = "Blue";
  234. pList->SetCellColors(nRow, nColumn, RGB(0, 0,255 ), -1);
  235. break;
  236. default:
  237. strSubItemText = "Red";
  238. pList->SetCellColors(nRow, nColumn, RGB(255, 0, 0), -1);
  239. break;
  240. }
  241. pDlg->DestroyWindow();
  242. }
  243. break;
  244. }
  245. return TRUE;
  246. }