ListCtrlDlg.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. // ListCtrlDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "ListCtrlDlg.h"
  5. #include "Resource.h"
  6. // CListCtrlDlg 对话框
  7. IMPLEMENT_DYNAMIC(CListCtrlDlg, CDlgControlItem)
  8. CListCtrlDlg::CListCtrlDlg(CWnd* pParent /*=NULL*/)
  9. : CDlgControlItem(IDD_LISTCTRL, pParent)
  10. {
  11. }
  12. CListCtrlDlg::~CListCtrlDlg()
  13. {
  14. }
  15. void CListCtrlDlg::DoDataExchange(CDataExchange* pDX)
  16. {
  17. CDlgControlItem::DoDataExchange(pDX);
  18. DDX_Control(pDX,IDC_LIST1,m_ListCtrl1);
  19. DDX_Control(pDX,IDC_LIST2,m_ListCtrl2);
  20. DDX_Control(pDX,IDC_LIST3,m_ListCtrl3);
  21. DDX_Control(pDX,IDC_LIST4,m_ListCtrl4);
  22. DDX_Control(pDX,IDC_LIST5,m_ListCtrl5);
  23. DDX_Control(pDX,IDC_LIST6,m_ListCtrl6);
  24. }
  25. BEGIN_MESSAGE_MAP(CListCtrlDlg, CDlgControlItem)
  26. ON_BN_CLICKED(IDC_BUTTON1,OnBnClickInsert)
  27. ON_BN_CLICKED(IDC_BUTTON2,OnBnClickCheckState)
  28. ON_BN_CLICKED(IDC_BUTTON3,OnBnClickSel)
  29. ON_BN_CLICKED(IDC_BUTTON14,OnBnClickInfo)
  30. ON_BN_CLICKED(IDC_BUTTON15,OnBnClickVis)
  31. ON_BN_CLICKED(IDC_BUTTON16,OnBnClickUnSel)
  32. ON_BN_CLICKED(IDC_BUTTON17,OnBnClickHead)
  33. ON_BN_CLICKED(IDC_BUTTON18,OnBnClickRemoveAll)
  34. ON_BN_CLICKED(IDC_BUTTON19,OnBnClickRemoveItem)
  35. ON_BN_CLICKED(IDC_BUTTON20,OnBnClickRemove)
  36. ON_NOTIFY(NM_CLICK, IDC_LIST4, OnLclickList4)
  37. ON_NOTIFY(NM_RCLICK, IDC_LIST4, OnRclickList1)
  38. ON_BN_CLICKED(IDC_BUTTON4, &CListCtrlDlg::OnBnClickedButton4)
  39. ON_BN_CLICKED(IDC_BUTTON8, &CListCtrlDlg::OnBnClickedButton8)
  40. END_MESSAGE_MAP()
  41. BOOL CListCtrlDlg::OnInitDialog()
  42. {
  43. CDlgControlItem::OnInitDialog();
  44. //加载背景图
  45. if (m_StatusImage.GetSafeHandle()==NULL)
  46. {
  47. CBitmap Image;
  48. BITMAP ImageInfo;
  49. Image.LoadBitmap(IDB_SERVER_LIST_IMAGE);
  50. Image.GetBitmap(&ImageInfo);
  51. m_StatusImage.Create(18,ImageInfo.bmHeight,ILC_COLOR16|ILC_MASK,0,0);
  52. m_StatusImage.Add(&Image,RGB(255,0,255));
  53. }
  54. if ( m_ImageList1.GetSafeHandle() == NULL )
  55. {
  56. m_ImageList1.Create(80,80,ILC_MASK|ILC_COLOR32, 0, 0);
  57. m_ImageList1.Add(AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  58. m_ListCtrl1.SetImageList(&m_ImageList1, LVSIL_NORMAL);
  59. }
  60. m_ListCtrl2.SetImageList(&m_StatusImage,LVSIL_SMALL);
  61. m_ListCtrl3.SetImageList(&m_StatusImage,LVSIL_SMALL);
  62. m_ListCtrl4.SetImageList(&m_StatusImage,LVSIL_SMALL);
  63. for (int i=0;i<40;i++)
  64. {
  65. m_ListCtrl1.InsertItem(i, TEXT("Item"));
  66. m_ListCtrl2.InsertItem(i, TEXT("Item"));
  67. m_ListCtrl3.InsertItem(i, TEXT("Item"));
  68. }
  69. //////////////////////////////////////////////////////////////////////////
  70. m_ListCtrl4.InsertColumn( 0, TEXT("Main_1"), LVCFMT_LEFT, 70 );
  71. m_ListCtrl4.InsertColumn( 1, TEXT("Main_2"), LVCFMT_LEFT, 70 );
  72. m_ListCtrl4.InsertColumn( 2, TEXT("Main_3"), LVCFMT_LEFT, 70 );
  73. m_ListCtrl4.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
  74. //////////////////////////////////////////////////////////////////////////
  75. //重绘控件5调用过程--Report
  76. m_ListCtrl5.m_SkinHeaderCtrl.SetBackImage(TEXT("Res\\ListCtrl\\folder_nav_item_bg_hover.png"),&CRect(2,2,2,2));
  77. m_ListCtrl5.m_SkinHeaderCtrl.SetPressImage(TEXT("Res\\ListCtrl\\folder_nav_item_bg_pressed.png"),&CRect(2,2,2,2));
  78. m_ListCtrl5.m_SkinHeaderCtrl.SetGridImage(TEXT("Res\\ListCtrl\\category_sep.png"));
  79. m_ListCtrl5.SetHovenImage(TEXT("Res\\ListCtrl\\item_bg_hover.png"),&CRect(2,2,2,2));
  80. m_ListCtrl5.SetSelectImage(TEXT("Res\\ListCtrl\\item_bg_selected.png"),&CRect(2,2,2,2));
  81. m_ListCtrl5.SetCheckImage(TEXT("Res\\ListCtrl\\check.png"),TEXT("Res\\ListCtrl\\uncheck.png"));
  82. m_ListCtrl5.SetScrollImage(&m_ListCtrl5,TEXT("Res\\Scroll\\SKIN_SCROLL.bmp"));
  83. m_ListCtrl5.InsertColumn( 0, TEXT("文件名"), LVCFMT_LEFT, 150 );
  84. m_ListCtrl5.InsertColumn( 1, TEXT("大小"), LVCFMT_LEFT, 100 );
  85. m_ListCtrl5.InsertColumn( 2, TEXT("修改时间"), LVCFMT_LEFT, 150 );
  86. for (int i=0;i<8;i++)
  87. {
  88. m_ListCtrl5.InsertItem(i,TEXT("跟我学MFC.zip"));
  89. m_ListCtrl5.SetItemText(i,1,TEXT("126MB"));
  90. m_ListCtrl5.SetItemText(i,2,TEXT("2013-10-17 18:13"));
  91. }
  92. m_ListCtrl5.InsertImage(0,TEXT("Res\\ListCtrl\\DocType.png"));
  93. m_ListCtrl5.InsertImage(1,TEXT("Res\\ListCtrl\\FolderType.png"));
  94. m_ListCtrl5.InsertImage(2,TEXT("Res\\ListCtrl\\ImgType.png"));
  95. m_ListCtrl5.InsertImage(3,TEXT("Res\\ListCtrl\\PdfType.png"));
  96. m_ListCtrl5.InsertImage(4,TEXT("Res\\ListCtrl\\PptType.png"));
  97. m_ListCtrl5.InsertImage(5,TEXT("Res\\ListCtrl\\RarType.png"));
  98. //m_ListCtrl5.InsertImage(6,TEXT("Res\\ListCtrl\\VsdType.png"));
  99. m_ListCtrl5.InsertImage(7,TEXT("Res\\ListCtrl\\VideoType.png"));
  100. //更新资源图片
  101. m_ListCtrl5.InsertImage(0,TEXT("Res\\ListCtrl\\VideoType.png"));
  102. m_ListCtrl5.SetItemHeight(30);
  103. //////////////////////////////////////////////////////////////////////////
  104. //重绘控件6调用过程--Report
  105. m_ListCtrl6.InsertColumn( 0, TEXT("类型"), LVCFMT_LEFT, 50 );
  106. m_ListCtrl6.InsertColumn( 1, TEXT("文件名"), LVCFMT_LEFT, 80 );
  107. m_ListCtrl6.InsertColumn( 2, TEXT("大小"), LVCFMT_LEFT, 50 );
  108. m_ListCtrl6.m_SkinHeaderCtrl.SetBackImage(TEXT("Res\\ListCtrl\\folder_nav_item_bg_hover.png"),&CRect(2,2,2,2));
  109. m_ListCtrl6.m_SkinHeaderCtrl.SetPressImage(TEXT("Res\\ListCtrl\\folder_nav_item_bg_pressed.png"),&CRect(2,2,2,2));
  110. m_ListCtrl6.m_SkinHeaderCtrl.SetGridImage(TEXT("Res\\ListCtrl\\category_sep.png"));
  111. m_ListCtrl6.SetHovenImage(TEXT("Res\\ListCtrl\\item_bg_hover.png"),&CRect(2,2,2,2));
  112. m_ListCtrl6.SetSelectImage(TEXT("Res\\ListCtrl\\item_bg_selected.png"),&CRect(2,2,2,2));
  113. m_ListCtrl6.SetScrollImage(&m_ListCtrl6,TEXT("Res\\Scroll\\SKIN_SCROLL.bmp"));
  114. for (int i=0;i<8;i++)
  115. {
  116. m_ListCtrl6.InsertItem(i,NULL);
  117. m_ListCtrl6.SetItemText(i,1,TEXT("跟我学MFC.zip"));
  118. m_ListCtrl6.SetItemText(i,2,TEXT("126MB"));
  119. m_ListCtrl6.InsertImage(i,TEXT("Res\\ListCtrl\\DocType.png"));
  120. }
  121. m_ListCtrl6.SetItemHeight(30);
  122. //标头控件禁止拖动
  123. m_ListCtrl6.m_SkinHeaderCtrl.EnableWindow(FALSE);
  124. m_ListCtrl6.m_SkinHeaderCtrl.SetLockCount(1);
  125. return TRUE;
  126. }
  127. void CListCtrlDlg::OnBnClickInsert()
  128. {
  129. int nCount = m_ListCtrl4.GetItemCount();
  130. int nRow = m_ListCtrl4.InsertItem(LVIF_IMAGE|LVIF_TEXT|LVIF_PARAM,0,TEXT("Item_1"),0,0,2,0);
  131. m_ListCtrl4.SetItemText(nRow, 1, TEXT("Item_2"));
  132. m_ListCtrl4.SetItemText(nRow, 2, TEXT("Item_3"));
  133. }
  134. void CListCtrlDlg::OnBnClickCheckState()
  135. {
  136. CString str,str1=TEXT("被Check的行数分别为:");
  137. for(int i=0; i<m_ListCtrl4.GetItemCount(); i++)
  138. {
  139. if( m_ListCtrl4.GetCheck(i))
  140. {
  141. str.Format(TEXT("[%d]"),i);
  142. str1+=str;
  143. }
  144. }
  145. AfxMessageBox(str1);
  146. }
  147. void CListCtrlDlg::OnBnClickSel()
  148. {
  149. //方法一:
  150. CString str,str1=TEXT("选中的行数分别为:");
  151. for(int i=0; i<m_ListCtrl4.GetItemCount(); i++)
  152. {
  153. if( m_ListCtrl4.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
  154. {
  155. str.Format(TEXT("[%d]"),i);
  156. str1+=str;
  157. }
  158. }
  159. //方法二:
  160. POSITION pos = m_ListCtrl4.GetFirstSelectedItemPosition();
  161. if (pos == NULL)
  162. {
  163. str1 = TEXT("没有选中任何节点");
  164. }
  165. else
  166. {
  167. while (pos)
  168. {
  169. int nItem = m_ListCtrl4.GetNextSelectedItem(pos);
  170. str.Format(TEXT("[%d]"),nItem);
  171. str1+=str;
  172. }
  173. }
  174. AfxMessageBox(str1);
  175. m_ListCtrl4.SetFocus();
  176. }
  177. void CListCtrlDlg::OnBnClickInfo()
  178. {
  179. TCHAR szBuffer[MAX_PATH]=TEXT("");
  180. CString str=TEXT("节点信息分别为:");
  181. //获取列数
  182. int nColumnCount = m_ListCtrl4.GetHeaderCtrl()->GetItemCount();
  183. LVITEM lvi;
  184. lvi.iItem = m_ListCtrl4.GetItemCount()-1;
  185. lvi.mask = LVIF_TEXT;
  186. lvi.cchTextMax = CountArray(szBuffer);
  187. for (int i=0;i<nColumnCount; i++)
  188. {
  189. lvi.iSubItem = i;
  190. lvi.pszText = szBuffer;
  191. m_ListCtrl4.GetItem(&lvi);
  192. str+=TEXT("[");
  193. str+=szBuffer;
  194. str+=TEXT("] ");
  195. }
  196. AfxMessageBox(str);
  197. }
  198. void CListCtrlDlg::OnBnClickVis()
  199. {
  200. int nItem = m_ListCtrl4.GetItemCount()-1;
  201. m_ListCtrl4.EnsureVisible(nItem, FALSE);
  202. m_ListCtrl4.SetItemState(nItem, LVIS_FOCUSED | LVIS_SELECTED,LVIS_FOCUSED | LVIS_SELECTED);
  203. m_ListCtrl4.SetSelectionMark(nItem);
  204. m_ListCtrl4.SetFocus();
  205. }
  206. void CListCtrlDlg::OnBnClickUnSel()
  207. {
  208. for(int i=0; i<m_ListCtrl4.GetItemCount(); i++)
  209. {
  210. if( m_ListCtrl4.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
  211. {
  212. m_ListCtrl4.SetItemState(i,0,LVIS_SELECTED);
  213. }
  214. }
  215. m_ListCtrl4.SetSelectionMark(-1);
  216. m_ListCtrl4.SetFocus();
  217. }
  218. void CListCtrlDlg::OnBnClickHead()
  219. {
  220. LVCOLUMN lvcol;
  221. TCHAR szBuffer[MAX_PATH]=TEXT("");
  222. int nColumnIndex;;
  223. CString str=TEXT("标题头文本分别为:");
  224. nColumnIndex = 0;
  225. lvcol.mask = LVCF_TEXT;
  226. lvcol.pszText = szBuffer;
  227. lvcol.cchTextMax = CountArray(szBuffer);
  228. while(m_ListCtrl4.GetColumn(nColumnIndex, &lvcol))
  229. {
  230. str+=TEXT("[");
  231. str+= lvcol.pszText;
  232. str+=TEXT("]");
  233. nColumnIndex++;
  234. }
  235. AfxMessageBox(str);
  236. }
  237. void CListCtrlDlg::OnBnClickRemoveAll()
  238. {
  239. //方法一:
  240. //while( m_ListCtrl4.DeleteColumn(0) );
  241. //方法二:
  242. int nColumnCount = m_ListCtrl4.GetHeaderCtrl()->GetItemCount();
  243. for (int i=nColumnCount-1; i>=0; i--)
  244. m_ListCtrl4.DeleteColumn (i);
  245. m_ListCtrl4.SetFocus();
  246. }
  247. void CListCtrlDlg::OnBnClickRemoveItem()
  248. {
  249. m_ListCtrl4.DeleteAllItems();
  250. }
  251. void CListCtrlDlg::OnBnClickRemove()
  252. {
  253. m_ListCtrl4.DeleteItem(m_ListCtrl4.GetItemCount()-1);
  254. }
  255. void CListCtrlDlg::OnLclickList4(NMHDR *pNMHDR, LRESULT *pResult)
  256. {
  257. LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
  258. //方法一:
  259. //DWORD dwPos = GetMessagePos();
  260. //CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
  261. //m_ListCtrl4.ScreenToClient(&point);
  262. //LVHITTESTINFO lvinfo;
  263. //lvinfo.pt = point;
  264. //lvinfo.flags = LVHT_ABOVE;
  265. //int nItem = m_ListCtrl4.SubItemHitTest(&lvinfo);
  266. //if(nItem != -1)
  267. //{
  268. // CString str;
  269. // str.Format(TEXT("单击的是第%d行第%d列"), lvinfo.iItem, lvinfo.iSubItem);
  270. // AfxMessageBox(str);
  271. //}
  272. // 方法二:
  273. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  274. if(pNMListView->iItem != -1)
  275. {
  276. CString str;
  277. str.Format(TEXT("单击的是第%d行第%d列"),pNMListView->iItem, pNMListView->iSubItem);
  278. AfxMessageBox(str);
  279. }
  280. //知道了第几行第几列,也就可以获取里面的数据什么的了
  281. *pResult = 0;
  282. }
  283. void CListCtrlDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
  284. {
  285. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  286. if(pNMListView->iItem != -1)
  287. {
  288. DWORD dwPos = GetMessagePos();
  289. CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
  290. CMenu menu;
  291. if (menu.CreatePopupMenu()==FALSE) return;
  292. menu.AppendMenu(0,2000,TEXT("菜单节点"));
  293. menu.AppendMenu(0,2001,TEXT("菜单节点"));
  294. menu.AppendMenu(0,2002,TEXT("菜单节点"));
  295. menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,point.x,point.y,this);
  296. }
  297. *pResult = 0;
  298. }
  299. // CListCtrlDlg 消息处理程序
  300. void CListCtrlDlg::OnBnClickedButton4()
  301. {
  302. CString str,str1=TEXT("被Check的行数分别为:");
  303. for(int i=0; i<m_ListCtrl5.GetItemCount(); i++)
  304. {
  305. if( m_ListCtrl5.GetCheck(i))
  306. {
  307. str.Format(TEXT("[%d]"),i);
  308. str1+=str;
  309. }
  310. }
  311. AfxMessageBox(str1);
  312. }
  313. void CListCtrlDlg::OnBnClickedButton8()
  314. {
  315. CSkinHeaderCtrl *pHeadWnd = &m_ListCtrl6.m_SkinHeaderCtrl;
  316. pHeadWnd->EnableWindow(!pHeadWnd->IsWindowEnabled());
  317. }