{"id":60,"date":"2017-07-29T23:23:59","date_gmt":"2017-07-29T17:23:59","guid":{"rendered":"https:\/\/qtvz.com\/?p=60"},"modified":"2017-09-11T21:30:43","modified_gmt":"2017-09-11T15:30:43","slug":"%e5%a6%82%e4%bd%95%e5%be%97%e5%88%b0listcontrol%e9%80%89%e4%b8%ad%e7%9a%84%e9%a1%b9-listcontrol%e9%80%89%e4%b8%ad%e4%b8%80%e8%a1%8c","status":"publish","type":"post","link":"https:\/\/qtvz.com\/60.html","title":{"rendered":"\u5982\u4f55\u5f97\u5230ListControl\u9009\u4e2d\u7684\u9879 ListControl\u9009\u4e2d\u4e00\u884c"},"content":{"rendered":"<!--wp-compress-html--><!--wp-compress-html no compression--><pre class=\"lang:default decode:true\">1. ListCtrl \u98ce\u683c\r\n      LVS_ICON: \u4e3a\u6bcf\u4e2aitem\u663e\u793a\u5927\u56fe\u6807\r\n      LVS_SMALLICON: \u4e3a\u6bcf\u4e2aitem\u663e\u793a\u5c0f\u56fe\u6807\r\n      LVS_LIST: \u663e\u793a\u4e00\u5217\u5e26\u6709\u5c0f\u56fe\u6807\u7684item\r\n      LVS_REPORT: \u663e\u793aitem\u8be6\u7ec6\u8d44\u6599\r\n      \u76f4\u89c2\u7684\u7406\u89e3\uff1awindows\u8d44\u6e90\u7ba1\u7406\u5668\uff0c\u201c\u67e5\u770b\u201d\u6807\u7b7e\u4e0b\u7684\u201c\u5927\u56fe\u6807\uff0c\u5c0f\u56fe\u6807\uff0c\u5217\u8868\uff0c\u8be6\u7ec6\u8d44\u6599\u201d\r\n--------------------------------------------------------------------------------\r\n2. \u8bbe\u7f6elistctrl \u98ce\u683c\u53ca\u6269\u5c55\u98ce\u683c\r\n      LONG lStyle;\r\n      lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);\/\/\u83b7\u53d6\u5f53\u524d\u7a97\u53e3style\r\n      lStyle &amp;= ~LVS_TYPEMASK; \/\/\u6e05\u9664\u663e\u793a\u65b9\u5f0f\u4f4d\r\n      lStyle |= LVS_REPORT; \/\/\u8bbe\u7f6estyle\r\n      SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);\/\/\u8bbe\u7f6estyle\r\n \r\n      DWORD dwStyle = m_list.GetExtendedStyle();\r\n      dwStyle |= LVS_EX_FULLROWSELECT;\/\/\u9009\u4e2d\u67d0\u884c\u4f7f\u6574\u884c\u9ad8\u4eae\uff08\u53ea\u9002\u7528\u4e0ereport\u98ce\u683c\u7684listctrl\uff09\r\n      dwStyle |= LVS_EX_GRIDLINES;\/\/\u7f51\u683c\u7ebf\uff08\u53ea\u9002\u7528\u4e0ereport\u98ce\u683c\u7684listctrl\uff09\r\n      dwStyle |= LVS_EX_CHECKBOXES;\/\/item\u524d\u751f\u6210checkbox\u63a7\u4ef6\r\n      m_list.SetExtendedStyle(dwStyle); \/\/\u8bbe\u7f6e\u6269\u5c55\u98ce\u683c\r\n--------------------------------------------------------------------------------\r\n3. \u63d2\u5165\u6570\u636e\r\n      m_list.InsertColumn( 0, \"ID\", LVCFMT_LEFT, 40 );\/\/\u63d2\u5165\u5217\r\n      m_list.InsertColumn( 1, \"NAME\", LVCFMT_LEFT, 50 );\r\n      int nRow = m_list.InsertItem(0, \u201c11\u201d);\/\/\u63d2\u5165\u884c\r\n      m_list.SetItemText(nRow, 1, \u201cjacky\u201d);\/\/\u8bbe\u7f6e\u6570\u636e\r\n--------------------------------------------------------------------------------\r\n4. \u4e00\u76f4\u9009\u4e2ditem\r\n    \u9009\u4e2dstyle\u4e2d\u7684Show selection always\uff0c\u6216\u8005\u5728\u4e0a\u9762\u7b2c2\u70b9\u4e2d\u8bbe\u7f6eLVS_SHOWSELALWAYS\r\n--------------------------------------------------------------------------------\r\n5. \u9009\u4e2d\u548c\u53d6\u6d88\u9009\u4e2d\u4e00\u884c\r\n    int nIndex = 0;\r\n    \/\/\u9009\u4e2d\r\n    m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);\r\n    \/\/\u53d6\u6d88\u9009\u4e2d\r\n    m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);\r\n--------------------------------------------------------------------------------\r\n6. \u5f97\u5230listctrl\u4e2d\u6240\u6709\u884c\u7684checkbox\u7684\u72b6\u6001\r\n      m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);\r\n      CString str;\r\n      for(int i=0; i&lt;m_list.GetItemCount(); i++ )\r\n      {\r\n           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))\r\n           {\r\n                str.Format(_T(\"\u7b2c%d\u884c\u7684checkbox\u4e3a\u9009\u4e2d\u72b6\u6001\"), i);\r\n                AfxMessageBox(str);\r\n           }\r\n      }\r\nCString strIns;\r\nstrIns=\"delete from tmpStatByGround\";\r\nm_pRs.CreateInstance(__uuidof(Recordset));\r\nm_pRs-&gt;CursorLocation = adUseClient;\r\nm_pRs-&gt;Open((LPCTSTR)strIns, vDispatch, adOpenKeyset,\r\nadLockOptimistic, adCmdUnknown);\r\n-------------------------------------------------------------------------------------------------\r\n(3)\u8bbe\u7f6e\u67d0\u4e2aitem\u7684checkbox\u7684\u72b6\u6001\r\nvoid SetLVCheck (WPARAM ItemIndex, BOOL bCheck)\r\n{\r\n    ListView_SetItemState (m_lvTestList.m_hWnd, ItemIndex, \r\n        UINT((int(bCheck) + 1) &lt;&lt; 12), LVIS_STATEIMAGEMASK);\r\n}\r\n--------------------------------------------------------------------------------\r\n7. \u5f97\u5230listctrl\u4e2d\u6240\u6709\u9009\u4e2d\u884c\u7684\u5e8f\u53f7\r\n      \u65b9\u6cd5\u4e00\uff1a\r\n      CString str;\r\n      for(int i=0; i&lt;m_list.GetItemCount(); i )\r\n      {\r\n           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )\r\n           {\r\n                str.Format(_T(\"\u9009\u4e2d\u4e86\u7b2c%d\u884c\"), i);\r\n                AfxMessageBox(str);\r\n           }\r\n      }\r\n      \u65b9\u6cd5\u4e8c\uff1a\r\n      POSITION pos = m_list.GetFirstSelectedItemPosition();\r\n      if (pos == NULL)\r\n           TRACE0(\"No items were selected!\\n\");\r\n      else\r\n      {\r\n           while (pos)\r\n           {\r\n                int nItem = m_list.GetNextSelectedItem(pos);\r\n                TRACE1(\"Item %d was selected!\\n\", nItem);\r\n                \/\/ you could do your own processing on nItem here\r\n           }\r\n      }\r\n--------------------------------------------------------------------------------\r\n8. \u5f97\u5230item\u7684\u4fe1\u606f\r\n      TCHAR szBuf[1024];\r\n      LVITEM lvi;\r\n      lvi.iItem = nItemIndex;\r\n      lvi.iSubItem = 0;\r\n      lvi.mask = LVIF_TEXT;\r\n      lvi.pszText = szBuf;\r\n      lvi.cchTextMax = 1024;\r\n      m_list.GetItem(&amp;lvi);\r\n--------------------------------------------------------------------------------\r\n9. \u5f97\u5230listctrl\u7684\u6240\u6709\u5217\u7684header\u5b57\u7b26\u4e32\u5185\u5bb9\r\n      LVCOLUMN lvcol;\r\n      char  str[256];\r\n      int   nColNum;\r\n      CString  strColumnName[4];\/\/\u5047\u5982\u67094\u5217\r\n      nColNum = 0;\r\n      lvcol.mask = LVCF_TEXT;\r\n      lvcol.pszText = str;\r\n      lvcol.cchTextMax = 256;\r\n      while(m_list.GetColumn(nColNum, &amp;lvcol))\r\n      {\r\n           strColumnName[nColNum] = lvcol.pszText;\r\n           nColNum ;\r\n      }\r\n--------------------------------------------------------------------------------\r\n10. \u4f7flistctrl\u4e2d\u4e00\u9879\u53ef\u89c1\uff0c\u5373\u6eda\u52a8\u6eda\u52a8\u6761\r\n    m_list.EnsureVisible(i, FALSE);\r\n--------------------------------------------------------------------------------\r\n11. \u5f97\u5230listctrl\u5217\u6570\r\n    int nHeadNum = m_list.GetHeaderCtrl()-&gt;GetItemCount();\r\n--------------------------------------------------------------------------------\r\n12. \u5220\u9664\u6240\u6709\u5217\r\n      \u65b9\u6cd5\u4e00\uff1a\r\n         while ( m_list.DeleteColumn (0))\r\n       \u56e0\u4e3a\u4f60\u5220\u9664\u4e86\u7b2c\u4e00\u5217\u540e\uff0c\u540e\u9762\u7684\u5217\u4f1a\u4f9d\u6b21\u5411\u4e0a\u79fb\u52a8\u3002\r\n      \u65b9\u6cd5\u4e8c\uff1a\r\n      int nColumns = 4;\r\n      for (int i=nColumns-1; i&gt;=0; i--)\r\n          m_list.DeleteColumn (i);\r\n--------------------------------------------------------------------------------\r\n13. \u5f97\u5230\u5355\u51fb\u7684listctrl\u7684\u884c\u5217\u53f7\r\n      \u6dfb\u52a0listctrl\u63a7\u4ef6\u7684NM_CLICK\u6d88\u606f\u76f8\u5e94\u51fd\u6570\r\n      void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)\r\n      {\r\n           \/\/ \u65b9\u6cd5\u4e00\uff1a\r\n           \/*\r\n           DWORD dwPos = GetMessagePos();\r\n           CPoint point( LOWORD(dwPos), HIWORD(dwPos) );\r\n  \r\n           m_list.ScreenToClient(&amp;point);\r\n  \r\n           LVHITTESTINFO lvinfo;\r\n           lvinfo.pt = point;\r\n           lvinfo.flags = LVHT_ABOVE;\r\n    \r\n           int nItem = m_list.SubItemHitTest(&amp;lvinfo);\r\n           if(nItem != -1)\r\n           {\r\n                CString strtemp;\r\n                strtemp.Format(\"\u5355\u51fb\u7684\u662f\u7b2c%d\u884c\u7b2c%d\u5217\", lvinfo.iItem, lvinfo.iSubItem);\r\n                AfxMessageBox(strtemp);\r\n           }\r\n          *\/\r\n  \r\n          \/\/ \u65b9\u6cd5\u4e8c:\r\n          \/*\r\n           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;\r\n           if(pNMListView-&gt;iItem != -1)\r\n           {\r\n                CString strtemp;\r\n                strtemp.Format(\"\u5355\u51fb\u7684\u662f\u7b2c%d\u884c\u7b2c%d\u5217\",\r\n                                pNMListView-&gt;iItem, pNMListView-&gt;iSubItem);\r\n                AfxMessageBox(strtemp);\r\n           }\r\n          *\/\r\n           *pResult = 0;\r\n      }\r\n--------------------------------------------------------------------------------\r\n14. \u5224\u65ad\u662f\u5426\u70b9\u51fb\u5728listctrl\u7684checkbox\u4e0a\r\n      \u6dfb\u52a0listctrl\u63a7\u4ef6\u7684NM_CLICK\u6d88\u606f\u76f8\u5e94\u51fd\u6570\r\n      void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)\r\n      {\r\n           DWORD dwPos = GetMessagePos();\r\n           CPoint point( LOWORD(dwPos), HIWORD(dwPos) );\r\n  \r\n           m_list.ScreenToClient(&amp;point);\r\n  \r\n           LVHITTESTINFO lvinfo;\r\n           lvinfo.pt = point;\r\n           lvinfo.flags = LVHT_ABOVE;\r\n    \r\n           UINT nFlag;\r\n           int nItem = m_list.HitTest(point, &amp;nFlag);\r\n           \/\/\u5224\u65ad\u662f\u5426\u70b9\u5728checkbox\u4e0a\r\n           if(nFlag == LVHT_ONITEMSTATEICON)\r\n           {\r\n                AfxMessageBox(\"\u70b9\u5728listctrl\u7684checkbox\u4e0a\");\r\n           }\r\n           *pResult = 0;\r\n      }\r\n--------------------------------------------------------------------------------\r\n15. \u53f3\u952e\u70b9\u51fblistctrl\u7684item\u5f39\u51fa\u83dc\u5355\r\n      \u6dfb\u52a0listctrl\u63a7\u4ef6\u7684NM_RCLICK\u6d88\u606f\u76f8\u5e94\u51fd\u6570\r\n      void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)\r\n      {\r\n           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;\r\n           if(pNMListView-&gt;iItem != -1)\r\n           {\r\n                DWORD dwPos = GetMessagePos();\r\n                CPoint point( LOWORD(dwPos), HIWORD(dwPos) );\r\n   \r\n                CMenu menu;\r\n                VERIFY( menu.LoadMenu( IDR_MENU1 ) );\r\n                CMenu* popup = menu.GetSubMenu(0);\r\n                ASSERT( popup != NULL );\r\n                popup-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );\r\n           }\r\n           *pResult = 0;\r\n  }\r\n\/\/\u6dfb\u52a0\u53f3\u952e\u83dc\u5355\u7684\u54cd\u5e94\u51fd\u6570\r\n--------------------------------------------------------------------------------\r\n16. item\u5207\u6362\u7126\u70b9\u65f6(\u5305\u62ec\u7528\u952e\u76d8\u548c\u9f20\u6807\u5207\u6362item\u65f6)\uff0c\u72b6\u6001\u7684\u4e00\u4e9b\u53d8\u5316\u987a\u5e8f\r\n      \u6dfb\u52a0listctrl\u63a7\u4ef6\u7684LVN_ITEMCHANGED\u6d88\u606f\u76f8\u5e94\u51fd\u6570\r\n      void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)\r\n      {\r\n           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;\r\n           \/\/ TODO: Add your control notification handler code here\r\n   \r\n           CString sTemp;\r\n \r\n           if((pNMListView-&gt;uOldState &amp; LVIS_FOCUSED) == LVIS_FOCUSED &amp;&amp;\r\n            (pNMListView-&gt;uNewState &amp; LVIS_FOCUSED) == 0)\r\n           {\r\n                sTemp.Format(\"%d losted focus\",pNMListView-&gt;iItem);\r\n           }\r\n           else if((pNMListView-&gt;uOldState &amp; LVIS_FOCUSED) == 0 &amp;&amp;\r\n               (pNMListView-&gt;uNewState &amp; LVIS_FOCUSED) == LVIS_FOCUSED)\r\n           {\r\n                sTemp.Format(\"%d got focus\",pNMListView-&gt;iItem);\r\n           }\r\n \r\n           if((pNMListView-&gt;uOldState &amp; LVIS_SELECTED) == LVIS_SELECTED &amp;&amp;\r\n            (pNMListView-&gt;uNewState &amp; LVIS_SELECTED) == 0)\r\n           {\r\n                sTemp.Format(\"%d losted selected\",pNMListView-&gt;iItem);\r\n           }\r\n           else if((pNMListView-&gt;uOldState &amp; LVIS_SELECTED) == 0 &amp;&amp;\r\n            (pNMListView-&gt;uNewState &amp; LVIS_SELECTED) == LVIS_SELECTED)\r\n           {\r\n                sTemp.Format(\"%d got selected\",pNMListView-&gt;iItem);\r\n           }\r\n   \r\n           *pResult = 0;\r\n      }\r\n--------------------------------------------------------------------------------\r\n17. listctrl\u7684  subitem \u6dfb\u52a0\u56fe\u6807\r\n      \u6ce8\u610f: \u9996\u5148\u8981\u7528 InsertItem() \u63d2\u5165\u4e00\u884c\u7684\u7b2c\u4e00\u5217, \u7136\u540e\u624d\u80fd\u7528 SetItem \u8bbe\u7f6e\u5176\u4ed6\u9879 \r\n      m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);\r\n      m_userlist.SetItem(..);\r\n--------------------------------------------------------------------------------\r\n18. \u5728CListCtrl\u663e\u793a\u6587\u4ef6\uff0c\u5e76\u6839\u636e\u6587\u4ef6\u7c7b\u578b\u6765\u663e\u793a\u56fe\u6807\r\n      \u7f51\u4e0a\u627e\u5230\u7684\u4ee3\u7801\uff0c\u81ea\u5df1\u8bd5\u7528\u5e76\u6539\u6b63\u8fc7, share\r\n \u6b65\u9aa41: \u8bbe\u7f6e list \u7684\u56fe\u50cf\u5217\u8868\u4e3a \u7cfb\u7edf\u56fe\u50cf\u5217\u8868   \r\n BOOL SetSystemImageList( CListCtrl &amp; list )\r\n{     \r\n HIMAGELIST himlSmall;\r\n HIMAGELIST himlLarge;\r\n SHFILEINFO sfi;\r\n char  cSysDir[MAX_PATH];\r\n CString  strBuf;\r\n memset(cSysDir, 0, MAX_PATH);\r\n GetWindowsDirectory(cSysDir, MAX_PATH);\r\n strBuf = cSysDir ;\r\n \r\n \/\/ SHGetFileInfo:\r\n \/\/ If uFlags contains SHGFI_SYSICONINDEX, the return value is a handle to\r\n \/\/ an image list that contains the large icon images.\r\n \/\/ If SHGFI_SMALLICON is included with SHGFI_SYSICONINDEX, the return value\r\n \/\/ is the handle to an image list that contains the small icon images.\r\n \/\/\r\n himlSmall = (HIMAGELIST)SHGetFileInfo ( (LPCSTR)cSysDir, \r\n     0, \r\n     &amp;sfi,\r\n     sizeof(SHFILEINFO), \r\n     SHGFI_SYSICONINDEX | SHGFI_SMALLICON );\r\n himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir, \r\n     0, \r\n     &amp;sfi, \r\n     sizeof(SHFILEINFO), \r\n     SHGFI_SYSICONINDEX | SHGFI_LARGEICON);\r\n if (himlSmall &amp;&amp; himlLarge)\r\n {\r\n  ::SendMessage(list.m_hWnd, LVM_SETIMAGELIST,\r\n      (WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);\r\n  \r\n  ::SendMessage(list.m_hWnd, LVM_SETIMAGELIST,\r\n      (WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge);\r\n }\r\n return TRUE;\r\n}\r\n\u6b65\u9aa42:  \u7ed9\u5217\u8868\u6dfb\u52a0\u6307\u5b9a\u7684\u6587\u4ef6, \u540c\u65f6\u83b7\u5f97\u8be5\u6587\u4ef6\u7684\u7684\u56fe\u6807\u7d22\u5f15, \u7ed9 list \u6dfb\u52a0\u56fe\u6807\r\nint GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected) ; \/\/  \u5411\u524d\u58f0\u660e\r\nvoid AddFiles(CListCtrl &amp; list, LPCTSTR lpszFileName, BOOL bAddToDocument)\r\n{\r\n int nIcon = GetIconIndex(lpszFileName, FALSE, TRUE);\r\n CString strSize;\r\n CFileFind filefind;\r\n \/\/  get file size\r\n if ( filefind.FindFile(lpszFileName))\r\n {\r\n  filefind.FindNextFile();\r\n  strSize.Format(\"%d\", filefind.GetLength());\r\n }\r\n else\r\n  strSize = \"0\";\r\n \/\/ split path and filename\r\n CString strFileName = lpszFileName;\r\n CString strPath;\r\n int nPos = strFileName.ReverseFind('\\\\');\r\n if (nPos != -1)\r\n {\r\n  strPath = strFileName.Left(nPos);\r\n  strFileName = strFileName.Mid(nPos 1);\r\n }\r\n \/\/ insert to list\r\n int nItem = list.GetItemCount();\r\n \r\n \r\n \/\/list.InsertItem(nItem, strFileName, nIcon);\r\n \/\/list.SetItemText(nItem, 1, strSize);\r\n \/\/\r\n \/\/ \u6b64\u5904\u53ef\u4ee5\u6839\u636e\u5b9e\u9645\u9700\u8981\u4fee\u6539\u4ee3\u7801\r\n \/\/\r\n}\r\n     \r\n--------------------------------------------------------------------------------\r\n19. listctrl\u5185\u5bb9\u8fdb\u884c\u5927\u6570\u636e\u91cf\u66f4\u65b0\u65f6\uff0c\u907f\u514d\u95ea\u70c1\r\n      m_list.SetRedraw(FALSE);\r\n      \/\/\u66f4\u65b0\u5185\u5bb9\r\n      m_list.SetRedraw(TRUE);\r\n      m_list.Invalidate();\r\n      m_list.UpdateWindow();\r\n20. \u6e05\u9664 ListCtrl \u4ee5\u91cd\u65b0\u521d\u59cb\u5316:\r\n      \/\/ \u5220\u9664\u6240\u6709\u884c\r\n m_ctrllist.DeleteAllItems() ;    \r\n \/\/ \u5220\u9664\u6240\u6709\u5217\r\n int iColCount = m_ctrllist.GetHeaderCtrl()-&gt;GetItemCount() ;\r\n \r\n \/\/ \u65b9\u6cd5 1\r\n \/\/ \u539f\u7406: \u5220\u9664\u7b2c\u4e00\u5217\u540e, \u5176\u4ed6\u5217\u5411\u524d\u79fb\u52a8\r\n while( m_ctrllist.DeleteColumn(0) ) ;\r\n   \r\n \/\/ \u65b9\u6cd5 2\r\n for (int i=0; i &lt; iColCount ; i )\r\n {\r\n  m_ctrllist.DeleteColumn(0);\r\n }\r\n \/\/ \u65b9\u6cd5 3\r\n for (int i=iColCount-1; i &gt;= 0; i-- )\r\n {\r\n  m_ctrllist.DeleteColumn( i );\r\n }\r\n---------------------------------------------------------------------------------------\r\n(2)\u5f53\u4e00\u4e2acheckbox\u88abcheck\u6216uncheck\u7684\u65f6\u5019,\u5982\u4f55\u83b7\u5f97\u901a\u77e5\r\n\u6dfb\u52a0\u6d88\u606f\u6620\u5c04\r\n                       ON_NOTIFY(LVN_ITEMCHANGED, IDC_MYLIST, OnItemchangedLinksList)\r\n\u6d88\u606f\u5904\u7406\u51fd\u6570\r\nvoid DemoDlg::OnItemchangedLinksList(NMHDR* pNMHDR, LRESULT* pResult) \r\n{\r\n    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;\r\n    *pResult = 0;\r\n    if (pNMListView-&gt;uOldState == 0 &amp;&amp; pNMListView-&gt;uNewState == 0)\r\n        return;    \/\/ No change\r\n\r\n    \/\/ Old check box state\r\n    BOOL bPrevState = (BOOL)(((pNMListView-&gt;uOldState &amp; \r\n                LVIS_STATEIMAGEMASK)&gt;&gt;12)-1);  \r\n    if (bPrevState &lt; 0)    \/\/ On startup there's no previous state \r\n        bPrevState = 0; \/\/ so assign as false (unchecked)\r\n    \/\/ New check box state\r\n    BOOL bChecked = \r\n            (BOOL)(((pNMListView-&gt;uNewState &amp; LVIS_STATEIMAGEMASK)&gt;&gt;12)-1);   \r\n    if (bChecked &lt; 0) \/\/ On non-checkbox notifications assume false\r\n        bChecked = 0;\r\n    if (bPrevState == bChecked) \/\/ No change in check box\r\n        return;\r\n    \r\n    \/\/ Now bChecked holds the new check box state\r\n    \/\/ ....\r\n}\r\n-------------------------------------------------------------------------------------------------\r\n(3)\u8bbe\u7f6e\u67d0\u4e2aitem\u7684checkbox\u7684\u72b6\u6001\r\nvoid SetLVCheck (WPARAM ItemIndex, BOOL bCheck)\r\n{\r\n    ListView_SetItemState (m_lvTestList.m_hWnd, ItemIndex, \r\n        UINT((int(bCheck) + 1) &lt;&lt; 12), LVIS_STATEIMAGEMASK);\r\n}\r\n--------------------------------------------------------------------------------------------------\r\n(4)\u83b7\u5f97\u67d0\u4e2aitem\u7684checkbox\u7684\u72b6\u6001\r\n\u4f7f\u7528\u5b8f ListView_GetCheckState(hwndLV, i)\r\n\r\n1\u3001\u83b7\u5f97\u7528\u6237\u53cc\u51fb\u884c\u7684\u7d22\u5f15\u53f7\uff0c\u8fd9\u4e2a\u7d22\u5f15\u53f7\u662f\u4ee50\u5f00\u5934\u7684\uff1b\r\nint nIndex = m_ListCtrl.GetNextItem( -1, LVNI_SELECTED );\r\n2\u3001\u6839\u636e\u884c\u7d22\u5f15\u53f7\uff0c\u53d6\u5f97\u4f60\u9700\u8981\u7684\u5217\u7684\u5185\u5bb9\uff1b\r\nCString strValue;\r\nstrValue = m_ListCtrl.GetItemText( nIndex, 0 );\r\n\u6ce8\u610f\uff0c\u4e0a\u8fb9\u51fd\u6570\u7b2c\u4e00\u4e2a\u53c2\u6570\u4e3a\u884c\u7d22\u5f15\u53f7\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u4e3a\u5217\u7d22\u5f15\u53f7\uff0c0 \u8868\u793a\u7b2c\u4e00\u5217\u3002\r\n---------------------------------------------------------------------------------\r\n\u5982\u4f55\u5f97\u5230<a href=\"https:\/\/qtvz.com\/tag\/listcontrol\" class=\"tag-tooltip\" data-toggle=\"tooltip\" title=\"\u67e5\u770b\u66f4\u591a\u5173\u4e8e ListControl \u7684\u6587\u7ae0\" target=\"_blank\">ListControl<\/a>\u9009\u4e2d\u7684\u9879 <a href=\"https:\/\/qtvz.com\/tag\/listcontrol\" class=\"tag-tooltip\" data-toggle=\"tooltip\" title=\"\u67e5\u770b\u66f4\u591a\u5173\u4e8e ListControl \u7684\u6587\u7ae0\" target=\"_blank\">ListControl<\/a>\u9009\u4e2d\u4e00\u884c\r\n\u5927\u5bb6\u90fd\u77e5\u9053\uff0c<a href=\"https:\/\/qtvz.com\/tag\/listcontrol\" class=\"tag-tooltip\" data-toggle=\"tooltip\" title=\"\u67e5\u770b\u66f4\u591a\u5173\u4e8e ListControl \u7684\u6587\u7ae0\" target=\"_blank\">ListControl<\/a>\u53ea\u80fd\u70b9\u51fb\u7b2c\u4e00\u5217\u6765\u9009\u4e2d\u60f3\u9009\u4e2d\u7684\u9879\uff0c\u800c\u5f88\u591a\u670b\u53cb\u60f3\u5b9e\u73b0\u70b9\u51fb\u76f4\u63a5\u9009\u62e9\u4e00\u884c\u7684\u529f\u80fd\uff0c\u5176\u5b9e\u5f88\u7b80\u5355\uff0c\u76f4\u63a5\u628a\u5b83\u7684ExtentedStyle\u8bbe\u7f6e\u4e00\u4e0b\u5c31\u53ef\u4ee5\u4e86\uff0c\u5982\u4e0b\uff1a\r\nm_listcontrol\u4e3a\u63a7\u4ef6CListCtrl*\u53d8\u91cf\r\n\u70b9\u51fb\u9009\u4e2d\u4e00\u884c\uff1am_listcontrol.SetExtendedStyle(m_listcontrol.GetExtendedStyle()|LVS_EX_FULLROWSELECT);\r\n\u800c\u5982\u4f55\u5f97\u5230\u5177\u4f53\u4e00\u9879\u91cc\u9762\u7684\u503c\uff0c\u53c8\u6210\u4e86\u5f88\u591a\u670b\u53cb\u7684\u95ee\u9898\uff0c\u5176\u5b9e\u4e5f\u5f88\u7b80\u5355\uff0c\u4e0b\u9762\u662f\u6211\u77e5\u9053\u7684\u4e00\u79cd\u65b9\u6cd5\uff1a\r\n\u5f97\u5230\u5177\u4f53\u7684\u67d0\u4e00\u9879\uff1a\r\nCString str;\r\nint nId;\r\n\/\/\u9996\u5148\u5f97\u5230\u70b9\u51fb\u7684\u4f4d\u7f6e\r\nPOSITION pos=m_listcontrol.GetFirstSelectedItemPosition();\r\nif(pos==NULL)\r\n{\r\nMessageBox(\"\u8bf7\u81f3\u5c11\u9009\u62e9\u4e00\u9879\",\"\u5a03\u5b50\u7406\u8d22\",MB_ICONEXCLAMATION);\r\nreturn;\r\n}\r\n\/\/\u5f97\u5230\u884c\u53f7\uff0c\u901a\u8fc7POSITION\u8f6c\u5316\r\nnId=(int)m_listcontrol.GetNextSelectedItem(pos);\r\n\/\/\u5f97\u5230\u5217\u4e2d\u7684\u5185\u5bb9\uff080\u8868\u793a\u7b2c\u4e00\u5217\uff0c\u540c\u74061,2,3...\u8868\u793a\u7b2c\u4e8c\uff0c\u4e09\uff0c\u56db...\u5217\uff09\r\nstr=m_listcontrol.GetItemText(nId,0);\r\nstr=m_listcontrol.GetItemText(nId,1);<\/pre>\n<p>\u539f\u6587\uff1a<a href=\"https:\/\/qtvz.com\/redirect\/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVlbGlhbmdnZTkxMDEwMS9hcnRpY2xlL2RldGFpbHMvMTczNDc0MDU=\" target=\"_blank\">http:\/\/blog.csdn.net\/yueliangge910101\/article\/details\/17347405<\/a><\/p>\n<!--wp-compress-html no compression--><!--wp-compress-html-->","protected":false},"excerpt":{"rendered":"1. ListCtrl \u98ce\u683c LVS_ICON: \u4e3a\u6bcf\u4e2aitem\u663e\u793a\u5927\u56fe\u6807 LVS_SMALLICON: \u4e3a\u6bcf\u4e2aitem\u663e\u793a\u5c0f\u56fe\u6807 LVS_LIST: \u663e\u793a\u4e00\u5217\u5e26\u6709\u5c0f\u56fe\u6807\u7684item LVS_REPOR \u00b7\u00b7\u00b7","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[12],"tags":[25],"views":9839,"_links":{"self":[{"href":"https:\/\/qtvz.com\/api\/wp\/v2\/posts\/60"}],"collection":[{"href":"https:\/\/qtvz.com\/api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/qtvz.com\/api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/qtvz.com\/api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/qtvz.com\/api\/wp\/v2\/comments?post=60"}],"version-history":[{"count":3,"href":"https:\/\/qtvz.com\/api\/wp\/v2\/posts\/60\/revisions"}],"predecessor-version":[{"id":63,"href":"https:\/\/qtvz.com\/api\/wp\/v2\/posts\/60\/revisions\/63"}],"wp:attachment":[{"href":"https:\/\/qtvz.com\/api\/wp\/v2\/media?parent=60"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/qtvz.com\/api\/wp\/v2\/categories?post=60"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/qtvz.com\/api\/wp\/v2\/tags?post=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}