ListCtrlDlg.cpp
上传用户:sunnie
上传日期:2022-07-13
资源大小:4512k
文件大小:9k
源码类别:

界面编程

开发平台:

Visual C++

  1. // ListCtrlDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ListCtrl.h"
  5. #include "ListCtrlDlg.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. // CListCtrlDlg dialog
  32. CListCtrlDlg::CListCtrlDlg(CWnd* pParent /*=NULL*/)
  33. : CDialog(CListCtrlDlg::IDD, pParent)
  34. {
  35. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  36. m_nPos = 0;
  37. }
  38. void CListCtrlDlg::DoDataExchange(CDataExchange* pDX)
  39. {
  40. CDialog::DoDataExchange(pDX);
  41. DDX_Control(pDX, IDC_LST_CTRL, m_lstCtrl);
  42. DDX_Control(pDX, IDC_BTN_INSERTCTRL, m_btnInsertCtrl);
  43. DDX_Control(pDX, IDC_BTN_NORMAL, m_btnInsertNormal);
  44. DDX_Control(pDX, IDC_BTN_SHOWBAR, m_btnShowBar);
  45. DDX_Control(pDX, IDC_BTN_SHOWCHK, m_btnChkBox);
  46. DDX_Control(pDX, IDC_BTN_EDT, m_btnEdit);
  47. }
  48. BEGIN_MESSAGE_MAP(CListCtrlDlg, CDialog)
  49. ON_WM_SYSCOMMAND()
  50. ON_WM_PAINT()
  51. ON_WM_QUERYDRAGICON()
  52. //}}AFX_MSG_MAP
  53. ON_BN_CLICKED(IDC_BTN_INSERTCTRL, &CListCtrlDlg::OnBnClickedBtnInsertctrl)
  54. ON_BN_CLICKED(IDC_BTN_NORMAL, &CListCtrlDlg::OnBnClickedBtnNormal)
  55. ON_WM_SIZE()
  56. ON_BN_CLICKED(IDC_BTN_SHOWBAR, &CListCtrlDlg::OnBnClickedBtnShowbar)
  57. ON_BN_CLICKED(IDC_BTN_SHOWCHK, &CListCtrlDlg::OnBnClickedBtnShowchk)
  58. ON_BN_CLICKED(IDC_BTN_EDT, &CListCtrlDlg::OnBnClickedBtnEdt)
  59. ON_WM_TIMER()
  60. END_MESSAGE_MAP()
  61. // CListCtrlDlg message handlers
  62. /*hdr
  63. ** Copyright  ShangHai Skoito Lamp Ltd.,China
  64. **
  65. ** 函数名: InitLst
  66. ** 作者: RobateWang
  67. ** 日期: 05 - 06 - 2010
  68. **
  69. ** 描述:
  70. ** 初始化列表,新建4列,分别为行号,精度条、编辑框、复选框
  71. **
  72. ** 变量: 变量名  方向 类型 描述
  73. **
  74. **
  75. ** 返回值:
  76. ** 如果成功放回真,否则返回假
  77. **
  78. ** 备注:
  79. **
  80. */
  81. BOOL
  82. CListCtrlDlg::InitLst()
  83. {
  84. //初始化List
  85. LVCOLUMN column;
  86. column.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH /*| LVCF_IMAGE*/;
  87. column.fmt = LVCFMT_LEFT/* | LVCFMT_BITMAP_ON_RIGHT*/;
  88. column.pszText = _T("行号");
  89. column.cx = 80;
  90. m_lstCtrl.InsertColumn(0, &column);
  91. column.pszText = _T("进度条");
  92. column.cx = 150;
  93. m_lstCtrl.InsertColumn(1, &column);
  94. column.pszText = _T("编辑框");
  95. column.cx = 120;
  96. m_lstCtrl.InsertColumn(5, &column);
  97. column.pszText = _T("复选框");
  98. column.cx = 120;
  99. m_lstCtrl.InsertColumn(6, &column);
  100. //  m_lstCtrl.SetBkColor(RGB(230, 230, 255));
  101. //  m_lstCtrl.SetTextBkColor(RGB(230, 230, 255));
  102. m_lstCtrl.SetTextColor(RGB(0, 0, 0));
  103. m_lstCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);
  104. //设置行高,用一个空ImageList将行撑高
  105. CImageList imgLst;
  106. imgLst.Create(1, 22, TRUE|ILC_COLOR32, 1, 0);
  107. m_lstCtrl.SetImageList(&imgLst, LVSIL_SMALL);
  108. return TRUE;
  109. }
  110. BOOL CListCtrlDlg::OnInitDialog()
  111. {
  112. CDialog::OnInitDialog();
  113. // Add "About..." menu item to system menu.
  114. // IDM_ABOUTBOX must be in the system command range.
  115. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  116. ASSERT(IDM_ABOUTBOX < 0xF000);
  117. CMenu* pSysMenu = GetSystemMenu(FALSE);
  118. if (pSysMenu != NULL)
  119. {
  120. BOOL bNameValid;
  121. CString strAboutMenu;
  122. bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
  123. ASSERT(bNameValid);
  124. if (!strAboutMenu.IsEmpty())
  125. {
  126. pSysMenu->AppendMenu(MF_SEPARATOR);
  127. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  128. }
  129. }
  130. // Set the icon for this dialog.  The framework does this automatically
  131. //  when the application's main window is not a dialog
  132. SetIcon(m_hIcon, TRUE); // Set big icon
  133. SetIcon(m_hIcon, FALSE); // Set small icon
  134. InitLst();
  135. m_btnShowBar.EnableWindow(FALSE);
  136. m_btnChkBox.EnableWindow(FALSE);
  137. m_btnEdit.EnableWindow(FALSE);
  138. return TRUE;  // return TRUE  unless you set the focus to a control
  139. }
  140. BOOL CListCtrlDlg::DestroyWindow()
  141. {
  142. m_lstCtrl.ReleaseAll();
  143. KillTimer(1);
  144. return CDialog::DestroyWindow();
  145. }
  146. void CListCtrlDlg::OnSize(UINT nType, int cx, int cy)
  147. {
  148. CDialog::OnSize(nType, cx, cy);
  149. if (!IsWindow(m_lstCtrl.m_hWnd) || (cx == 0) || (cy == 0))
  150. {
  151. return;
  152. }
  153. CRect rcWnd;
  154. CRect rcList;
  155. CRect rcBtnCtrl;
  156. CRect rcBtnNormal;
  157. CRect rcBtnBar;
  158. CRect rcBtnChk;
  159. GetClientRect(&rcWnd);
  160. m_lstCtrl.GetWindowRect(&rcList);
  161. m_btnInsertCtrl.GetWindowRect(&rcBtnCtrl);
  162. m_btnInsertNormal.GetWindowRect(&rcBtnNormal);
  163. m_btnShowBar.GetWindowRect(&rcBtnBar);
  164. m_btnChkBox.GetWindowRect(&rcBtnChk);
  165. ScreenToClient(&rcList);
  166. ScreenToClient(&rcBtnCtrl);
  167. ScreenToClient(&rcBtnNormal);
  168. ScreenToClient(&rcBtnBar);
  169. ScreenToClient(&rcBtnChk);
  170. int nBottomEdge = 10;
  171. int nMoveX = rcWnd.right - rcBtnNormal.right - nBottomEdge;
  172. int nMoveY = rcWnd.bottom - rcList.bottom - nBottomEdge;
  173. //  rcBtnCtrl.right += nMoveX;
  174. //  rcBtnCtrl.left += nMoveX;
  175. rcBtnCtrl.OffsetRect(nMoveX, nMoveY);
  176. //  rcBtnNormal.right += nMoveX;
  177. //  rcBtnNormal.left += nMoveX;
  178. rcBtnNormal.OffsetRect(nMoveX, nMoveY);
  179. rcBtnBar.OffsetRect(nMoveX, nMoveY);
  180. rcBtnChk.OffsetRect(nMoveX, nMoveY);
  181. rcList.bottom += nMoveY;
  182. rcList.right += nMoveX;
  183. m_btnInsertCtrl.MoveWindow(&rcBtnCtrl);
  184. m_btnInsertNormal.MoveWindow(&rcBtnNormal);
  185. m_lstCtrl.MoveWindow(&rcList);
  186. m_btnShowBar.MoveWindow(&rcBtnBar);
  187. m_btnChkBox.MoveWindow(&rcBtnChk);
  188. }
  189. void CListCtrlDlg::OnSysCommand(UINT nID, LPARAM lParam)
  190. {
  191. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  192. {
  193. CAboutDlg dlgAbout;
  194. dlgAbout.DoModal();
  195. }
  196. else
  197. {
  198. CDialog::OnSysCommand(nID, lParam);
  199. }
  200. }
  201. // If you add a minimize button to your dialog, you will need the code below
  202. //  to draw the icon.  For MFC applications using the document/view model,
  203. //  this is automatically done for you by the framework.
  204. void CListCtrlDlg::OnPaint()
  205. {
  206. if (IsIconic())
  207. {
  208. CPaintDC dc(this); // device context for painting
  209. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  210. // Center icon in client rectangle
  211. int cxIcon = GetSystemMetrics(SM_CXICON);
  212. int cyIcon = GetSystemMetrics(SM_CYICON);
  213. CRect rect;
  214. GetClientRect(&rect);
  215. int x = (rect.Width() - cxIcon + 1) / 2;
  216. int y = (rect.Height() - cyIcon + 1) / 2;
  217. // Draw the icon
  218. dc.DrawIcon(x, y, m_hIcon);
  219. }
  220. else
  221. {
  222. CDialog::OnPaint();
  223. }
  224. }
  225. BOOL CListCtrlDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
  226. {
  227. HD_NOTIFY *pHDNotify = (HD_NOTIFY*)lParam;   
  228. switch(pHDNotify->hdr.code)     
  229. {   
  230. case   HDN_ITEMCHANGINGA:   
  231. case   HDN_ITEMCHANGINGW:   
  232. case   HDN_ENDTRACK: 
  233. {
  234. m_lstCtrl.MovePosition();
  235. break;
  236. }
  237. default:
  238. {
  239. break;
  240. }
  241. }
  242. return CDialog::OnNotify(wParam, lParam, pResult);
  243. }
  244. void CListCtrlDlg::OnTimer(UINT_PTR nIDEvent)
  245. {
  246. m_lstCtrl.SetBarPosition(m_nPos);
  247. m_nPos += 2;
  248. if (m_nPos >= 100)
  249. {
  250. m_nPos = 0;
  251. }
  252. CDialog::OnTimer(nIDEvent);
  253. }
  254. // The system calls this function to obtain the cursor to display while the user drags
  255. //  the minimized window.
  256. HCURSOR CListCtrlDlg::OnQueryDragIcon()
  257. {
  258. return static_cast<HCURSOR>(m_hIcon);
  259. }
  260. void CListCtrlDlg::OnBnClickedBtnInsertctrl()
  261. {
  262. LV_ITEM lvitem;
  263. CString strTem = "";
  264. int nRow = m_lstCtrl.GetItemCount();
  265. //Name
  266. lvitem.mask = LVIF_TEXT;
  267. lvitem.iItem = nRow;
  268. lvitem.iSubItem = 0;
  269. strTem.Format("%s%d%s", "第", nRow + 1, "行");
  270. lvitem.pszText = strTem.GetBuffer();
  271. m_lstCtrl.InsertItem(&lvitem);
  272. //Progress bar, edit box, check box
  273. m_lstCtrl.InsertItemEx(nRow, SW_SHOWNORMAL);
  274. m_btnShowBar.EnableWindow(TRUE);
  275. m_btnChkBox.EnableWindow(TRUE);
  276. m_btnEdit.EnableWindow(TRUE);
  277. }
  278. void CListCtrlDlg::OnBnClickedBtnNormal()
  279. {
  280. LV_ITEM lvitem;
  281. CString strTem = "";
  282. int nRow = m_lstCtrl.GetItemCount();
  283. //Name
  284. lvitem.mask = LVIF_TEXT;
  285. lvitem.iItem = nRow;
  286. lvitem.iSubItem = 0;
  287. strTem.Format("%s%d%s", "第", nRow + 1, "行");
  288. lvitem.pszText = strTem.GetBuffer();
  289. m_lstCtrl.InsertItem(&lvitem);
  290. lvitem.mask = LVIF_TEXT;
  291. lvitem.iItem = nRow;
  292. lvitem.iSubItem = 1;
  293. lvitem.pszText = _T("普通行");
  294. m_lstCtrl.SetItem(&lvitem);
  295. lvitem.mask = LVIF_TEXT;
  296. lvitem.iItem = nRow;
  297. lvitem.iSubItem = 2;
  298. lvitem.pszText = _T("普通行");
  299. m_lstCtrl.SetItem(&lvitem);
  300. lvitem.mask = LVIF_TEXT;
  301. lvitem.iItem = nRow;
  302. lvitem.iSubItem = 3;
  303. lvitem.pszText = _T("普通行");
  304. m_lstCtrl.SetItem(&lvitem);
  305. }
  306. void CListCtrlDlg::OnBnClickedBtnShowbar()
  307. {
  308. //  m_lstCtrl.SetBarPosition(5);
  309. SetTimer(1, 100, NULL);
  310. }
  311. void CListCtrlDlg::OnBnClickedBtnShowchk()
  312. {
  313. m_lstCtrl.SetChkBox();
  314. }
  315. void CListCtrlDlg::OnBnClickedBtnEdt()
  316. {
  317. m_lstCtrl.SetEdtBox();
  318. }