<div><P style="TEXT-INDENT: 2em">ÒÔÏÂδ¾ËµÃ÷£¬listctrlĬÈÏview ·ç¸ñΪreport</P>
<P style="TEXT-INDENT: 2em">1. CListCtrl ·ç¸ñ</P>
<P style="TEXT-INDENT: 2em"> LVS_ICON: Ϊÿ¸öitemÏÔʾ´óͼ±ê</P>
<P style="TEXT-INDENT: 2em"> LVS_SMALLICON: Ϊÿ¸öitemÏÔʾСͼ±ê</P>
<P style="TEXT-INDENT: 2em"> LVS_LIST: ÏÔʾһÁдøÓÐСͼ±êµÄitem</P>
<P style="TEXT-INDENT: 2em"> LVS_REPORT: ÏÔʾitemÏêϸ×ÊÁÏ</P>
<P style="TEXT-INDENT: 2em"> Ö±¹ÛµÄÀí½â£ºwindows×ÊÔ´¹ÜÀíÆ÷£¬¡°²é¿´¡±±êǩϵġ°´óͼ±ê£¬Ð¡Í¼±ê£¬ÁÐ±í£¬Ïêϸ×ÊÁÏ¡±</P>
<P style="TEXT-INDENT: 2em">2. ÉèÖÃlistctrl ·ç¸ñ¼°À©Õ¹·ç¸ñ</P>
<P style="TEXT-INDENT: 2em"> LONG lStyle;</P>
<P style="TEXT-INDENT: 2em"> lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//»ñÈ¡µ±Ç°´°¿Ústyle</P>
<P style="TEXT-INDENT: 2em"> lStyle &= ~LVS_TYPEMASK; //Çå³ýÏÔʾ·½Ê½Î»</P>
<P style="TEXT-INDENT: 2em"> lStyle |= LVS_REPORT; //ÉèÖÃstyle</P>
<P style="TEXT-INDENT: 2em"> SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//ÉèÖÃstyle</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> DWORD dwStyle = m_list.GetExtendedStyle();</P>
<P style="TEXT-INDENT: 2em"> dwStyle |= LVS_EX_FULLROWSELECT;//Ñ¡ÖÐijÐÐʹÕûÐиßÁÁ£¨Ö»ÊÊÓÃÓëreport·ç¸ñµÄlistctrl£©</P>
<P style="TEXT-INDENT: 2em"> dwStyle |= LVS_EX_GRIDLINES;//Íø¸ñÏߣ¨Ö»ÊÊÓÃÓëreport·ç¸ñµÄlistctrl£©</P>
<P style="TEXT-INDENT: 2em"> dwStyle |= LVS_EX_CHECKBOXES;//itemǰÉú³Écheckbox¿Ø¼þ</P>
<P style="TEXT-INDENT: 2em"> m_list.SetExtendedStyle(dwStyle); //ÉèÖÃÀ©Õ¹·ç¸ñ</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> ×¢£ºlistviewµÄstyleÇë²éÔÄmsdn</P>
<P style="TEXT-INDENT: 2em"> <A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp</A></P>
<P style="TEXT-INDENT: 2em">3. ²åÈëÊý¾Ý</P>
<P style="TEXT-INDENT: 2em"> m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//²åÈëÁÐ</P>
<P style="TEXT-INDENT: 2em"> m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );</P>
<P style="TEXT-INDENT: 2em"> int nRow = m_list.InsertItem(0, ¡°11¡±);//²åÈëÐÐ</P>
<P style="TEXT-INDENT: 2em"> m_list.SetItemText(nRow, 1, ¡°jacky¡±);//ÉèÖÃÊý¾Ý</P>
<P style="TEXT-INDENT: 2em">4. һֱѡÖÐitem</P>
<P style="TEXT-INDENT: 2em"> Ñ¡ÖÐstyleÖеÄShow selection always£¬»òÕßÔÚÉÏÃæµÚ2µãÖÐÉèÖÃLVS_SHOWSELALWAYS</P>
<P style="TEXT-INDENT: 2em">5. Ñ¡ÖкÍÈ¡ÏûÑ¡ÖÐÒ»ÐÐ</P>
<P style="TEXT-INDENT: 2em"> int nIndex = 0;</P>
<P style="TEXT-INDENT: 2em"> //Ñ¡ÖÐ</P>
<P style="TEXT-INDENT: 2em"> m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);</P>
<P style="TEXT-INDENT: 2em"> //È¡ÏûÑ¡ÖÐ</P>
<P style="TEXT-INDENT: 2em"> m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);</P>
<P style="TEXT-INDENT: 2em">6. µÃµ½listctrlÖÐËùÓÐÐеÄcheckboxµÄ״̬</P>
<P style="TEXT-INDENT: 2em"> m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);</P>
<P style="TEXT-INDENT: 2em"> CString str;</P>
<P style="TEXT-INDENT: 2em"> for(int i=0; i {</P>
<P style="TEXT-INDENT: 2em"> if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> str.Format(_T("µÚ%dÐеÄcheckboxΪѡÖÐ״̬"), i);</P>
<P style="TEXT-INDENT: 2em"> AfxMessageBox(str);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em">7. µÃµ½listctrlÖÐËùÓÐÑ¡ÖÐÐеÄÐòºÅ</P>
<P style="TEXT-INDENT: 2em"> ·½·¨Ò»£º</P>
<P style="TEXT-INDENT: 2em"> CString str;</P>
<P style="TEXT-INDENT: 2em"> for(int i=0; i {</P>
<P style="TEXT-INDENT: 2em"> if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> str.Format(_T("Ñ¡ÖÐÁ˵Ú%dÐÐ"), i);</P>
<P style="TEXT-INDENT: 2em"> AfxMessageBox(str);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> ·½·¨¶þ£º</P>
<P style="TEXT-INDENT: 2em"> POSITION pos = m_list.GetFirstSelectedItemPosition();</P>
<P style="TEXT-INDENT: 2em"> if (pos == NULL)</P>
<P style="TEXT-INDENT: 2em"> TRACE0("No items were selected!\n");</P>
<P style="TEXT-INDENT: 2em"> else</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> while (pos)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> int nItem = m_list.GetNextSelectedItem(pos);</P>
<P style="TEXT-INDENT: 2em"> TRACE1("Item %d was selected!\n", nItem);</P>
<P style="TEXT-INDENT: 2em"> // you could do your own processing on nItem here</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em">8. µÃµ½itemµÄÐÅÏ¢</P>
<P style="TEXT-INDENT: 2em"> TCHAR szBuf[1024];</P>
<P style="TEXT-INDENT: 2em"> LVITEM lvi;</P>
<P style="TEXT-INDENT: 2em"> lvi.iItem = nItemIndex;</P>
<P style="TEXT-INDENT: 2em"> lvi.iSubItem = 0;</P>
<P style="TEXT-INDENT: 2em"> lvi.mask = LVIF_TEXT;</P>
<P style="TEXT-INDENT: 2em"> lvi.pszText = szBuf;</P>
<P style="TEXT-INDENT: 2em"> lvi.cchTextMax = 1024;</P>
<P style="TEXT-INDENT: 2em"> m_list.GetItem(&lvi);</P>
<P style="TEXT-INDENT: 2em"> ¹ØÓڵõ½ÉèÖÃitemµÄ״̬£¬»¹¿ÉÒԲο¼msdnÎÄÕÂ</P>
<P style="TEXT-INDENT: 2em"> Q173242: Use Masks to Set/Get Item States in CListCtrl</P>
<P style="TEXT-INDENT: 2em"> <A href="http://support.microsoft.com/kb/173242/en-us">http://support.microsoft.com/kb/173242/en-us</A></P>
<P style="TEXT-INDENT: 2em">9. µÃµ½listctrlµÄËùÓÐÁеÄheader×Ö·û´®ÄÚÈÝ</P>
<P style="TEXT-INDENT: 2em"> LVCOLUMN lvcol;</P>
<P style="TEXT-INDENT: 2em"> char str[256];</P>
<P style="TEXT-INDENT: 2em"> int nColNum;</P>
<P style="TEXT-INDENT: 2em"> CString strColumnName[4];//¼ÙÈçÓÐ4ÁÐ</P>
<P style="TEXT-INDENT: 2em"> nColNum = 0;</P>
<P style="TEXT-INDENT: 2em"> lvcol.mask = LVCF_TEXT;</P>
<P style="TEXT-INDENT: 2em"> lvcol.pszText = str;</P>
<P style="TEXT-INDENT: 2em"> lvcol.cchTextMax = 256;</P>
<P style="TEXT-INDENT: 2em"> while(m_list.GetColumn(nColNum, &lvcol))</P>
<P style="TEXT-INDENT: 2em"> { </P>
<P style="TEXT-INDENT: 2em"> strColumnName[nColNum] = lvcol.pszText;</P>
<P style="TEXT-INDENT: 2em"> nColNum++;</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em">10. ʹlistctrlÖÐÒ»Ïî¿É¼û£¬¼´¹ö¶¯¹ö¶¯Ìõ</P>
<P style="TEXT-INDENT: 2em"> m_list.EnsureVisible(i, FALSE);</P>
<P style="TEXT-INDENT: 2em">11. µÃµ½listctrlÁÐÊý</P>
<P style="TEXT-INDENT: 2em"> int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();</P>
<P style="TEXT-INDENT: 2em">12. ɾ³ýËùÓÐÁÐ</P>
<P style="TEXT-INDENT: 2em"> ·½·¨Ò»£º</P>
<P style="TEXT-INDENT: 2em"> while ( m_list.DeleteColumn (0))</P>
<P style="TEXT-INDENT: 2em"> ÒòΪÄãɾ³ýÁ˵ÚÒ»Áк󣬺óÃæµÄÁлáÒÀ´ÎÏòÉÏÒÆ¶¯¡£</P>
<P style="TEXT-INDENT: 2em"> ·½·¨¶þ£º</P>
<P style="TEXT-INDENT: 2em"> int nColumns = 4;</P>
<P style="TEXT-INDENT: 2em"> for (int i=nColumns-1; i>=0; i--)</P>
<P style="TEXT-INDENT: 2em"> m_list.DeleteColumn (i);</P>
<P style="TEXT-INDENT: 2em">13. µÃµ½µ¥»÷µÄlistctrlµÄÐÐÁкÅ</P>
<P style="TEXT-INDENT: 2em"> Ìí¼Ólistctrl¿Ø¼þµÄNM_CLICKÏûÏ¢ÏàÓ¦º¯Êý</P>
<P style="TEXT-INDENT: 2em"> void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> // ·½·¨Ò»£º</P>
<P style="TEXT-INDENT: 2em"> /*</P>
<P style="TEXT-INDENT: 2em"> DWORD dwPos = GetMessagePos();</P>
<P style="TEXT-INDENT: 2em"> CPoint point( LOWORD(dwPos), HIWORD(dwPos) );</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> m_list.ScreenToClient(&point);</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> LVHITTESTINFO lvinfo;</P>
<P style="TEXT-INDENT: 2em"> lvinfo.pt = point;</P>
<P style="TEXT-INDENT: 2em"> lvinfo.flags = LVHT_ABOVE;</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> int nItem = m_list.SubItemHitTest(&lvinfo);</P>
<P style="TEXT-INDENT: 2em"> if(nItem != -1)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> CString strtemp;</P>
<P style="TEXT-INDENT: 2em"> strtemp.Format("µ¥»÷µÄÊǵÚ%dÐеÚ%dÁÐ", lvinfo.iItem, lvinfo.iSubItem);</P>
<P style="TEXT-INDENT: 2em"> AfxMessageBox(strtemp);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> */</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> // ·½·¨¶þ:</P>
<P style="TEXT-INDENT: 2em"> /*</P>
<P style="TEXT-INDENT: 2em"> NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;</P>
<P style="TEXT-INDENT: 2em"> if(pNMListView->iItem != -1)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> CString strtemp;</P>
<P style="TEXT-INDENT: 2em"> strtemp.Format("µ¥»÷µÄÊǵÚ%dÐеÚ%dÁÐ",</P>
<P style="TEXT-INDENT: 2em"> pNMListView->iItem, pNMListView->iSubItem);</P>
<P style="TEXT-INDENT: 2em"> AfxMessageBox(strtemp);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> */</P>
<P style="TEXT-INDENT: 2em"> *pResult = 0;</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em">14. ÅжÏÊÇ·ñµã»÷ÔÚlistctrlµÄcheckboxÉÏ</P>
<P style="TEXT-INDENT: 2em"> Ìí¼Ólistctrl¿Ø¼þµÄNM_CLICKÏûÏ¢ÏàÓ¦º¯Êý</P>
<P style="TEXT-INDENT: 2em"> void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> DWORD dwPos = GetMessagePos();</P>
<P style="TEXT-INDENT: 2em"> CPoint point( LOWORD(dwPos), HIWORD(dwPos) );</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> m_list.ScreenToClient(&point);</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> LVHITTESTINFO lvinfo;</P>
<P style="TEXT-INDENT: 2em"> lvinfo.pt = point;</P>
<P style="TEXT-INDENT: 2em"> lvinfo.flags = LVHT_ABOVE;</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> UINT nFlag;</P>
<P style="TEXT-INDENT: 2em"> int nItem = m_list.HitTest(point, &nFlag);</P>
<P style="TEXT-INDENT: 2em"> //ÅжÏÊÇ·ñµãÔÚcheckboxÉÏ</P>
<P style="TEXT-INDENT: 2em"> if(nFlag == LVHT_ONITEMSTATEICON)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> AfxMessageBox("µãÔÚlistctrlµÄcheckboxÉÏ");</P>
<P style="TEXT-INDENT: 2em"> } </P>
<P style="TEXT-INDENT: 2em"> *pResult = 0;</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em">15. ÓÒ¼üµã»÷listctrlµÄitemµ¯³ö²Ëµ¥</P>
<P style="TEXT-INDENT: 2em"> Ìí¼Ólistctrl¿Ø¼þµÄNM_RCLICKÏûÏ¢ÏàÓ¦º¯Êý</P>
<P style="TEXT-INDENT: 2em"> void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;</P>
<P style="TEXT-INDENT: 2em"> if(pNMListView->iItem != -1)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> DWORD dwPos = GetMessagePos();</P>
<P style="TEXT-INDENT: 2em"> CPoint point( LOWORD(dwPos), HIWORD(dwPos) );</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> CMenu menu;</P>
<P style="TEXT-INDENT: 2em"> VERIFY( menu.LoadMenu( IDR_MENU1 ) );</P>
<P style="TEXT-INDENT: 2em"> CMenu* popup = menu.GetSubMenu(0);</P>
<P style="TEXT-INDENT: 2em"> ASSERT( popup != NULL );</P>
<P style="TEXT-INDENT: 2em"> popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );</P>
<P style="TEXT-INDENT: 2em"> } </P>
<P style="TEXT-INDENT: 2em"> *pResult = 0;</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em">16. itemÇл»½¹µãʱ(°üÀ¨ÓüüÅ̺ÍÊó±êÇл»itemʱ)£¬×´Ì¬µÄһЩ±ä»¯Ë³Ðò</P>
<P style="TEXT-INDENT: 2em"> Ìí¼Ólistctrl¿Ø¼þµÄLVN_ITEMCHANGEDÏûÏ¢ÏàÓ¦º¯Êý</P>
<P style="TEXT-INDENT: 2em"> void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;</P>
<P style="TEXT-INDENT: 2em"> // TODO: Add your control notification handler code here</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> CString sTemp;</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED && </P>
<P style="TEXT-INDENT: 2em"> (pNMListView->uNewState & LVIS_FOCUSED) == 0)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> sTemp.Format("%d losted focus",pNMListView->iItem);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&</P>
<P style="TEXT-INDENT: 2em"> (pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> sTemp.Format("%d got focus",pNMListView->iItem);</P>
<P style="TEXT-INDENT: 2em"> } </P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&</P>
<P style="TEXT-INDENT: 2em"> (pNMListView->uNewState & LVIS_SELECTED) == 0)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> sTemp.Format("%d losted selected",pNMListView->iItem);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&</P>
<P style="TEXT-INDENT: 2em"> (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> sTemp.Format("%d got selected",pNMListView->iItem);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> *pResult = 0;</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em">17. µÃµ½ÁíÒ»¸ö½ø³ÌÀïµÄlistctrl¿Ø¼þµÄitemÄÚÈÝ</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/threads/int64_memsteal.asp">http://www.codeproject.com/threads/int64_memsteal.asp</A></P>
<P style="TEXT-INDENT: 2em">18. Ñ¡ÖÐlistviewÖеÄitem </P>
<P style="TEXT-INDENT: 2em">Q131284: How To Select a Listview Item Programmatically</P>
<P style="TEXT-INDENT: 2em"><A href="http://support.microsoft.com/kb/131284/en-us">http://support.microsoft.com/kb/131284/en-us</A></P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em">19. ÈçºÎÔÚCListViewÖÐʹÓÃCListCtrlµÄÅÉÉúÀà</P>
<P style="TEXT-INDENT: 2em"><A href="http://www.codeguru.com/cpp/controls/listview/introduction/article.php/c919/">http://www.codeguru.com/cpp/controls/listview/introduction/article.php/c919/</A></P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em"> 20. listctrlµÄsubitemÌí¼Óͼ±ê</P>
<P style="TEXT-INDENT: 2em"> m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);</P>
<P style="TEXT-INDENT: 2em"> m_list.SetItem(..); //¾ßÌå²ÎÊýÇë²Î¿¼msdn</P>
<P style="TEXT-INDENT: 2em"> 21. ÔÚCListCtrlÏÔʾÎļþ£¬²¢¸ù¾ÝÎļþÀàÐÍÀ´ÏÔʾͼ±ê</P>
<P style="TEXT-INDENT: 2em"> ÍøÉÏÕÒµ½µÄ´úÂ룬share</P>
<P style="TEXT-INDENT: 2em"> BOOL CTest6Dlg::OnInitDialog()</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> CDialog::OnInitDialog();</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> HIMAGELIST himlSmall;</P>
<P style="TEXT-INDENT: 2em"> HIMAGELIST himlLarge;</P>
<P style="TEXT-INDENT: 2em"> SHFILEINFO sfi;</P>
<P style="TEXT-INDENT: 2em"> char cSysDir[MAX_PATH];</P>
<P style="TEXT-INDENT: 2em"> CString strBuf;</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> memset(cSysDir, 0, MAX_PATH);</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> GetWindowsDirectory(cSysDir, MAX_PATH);</P>
<P style="TEXT-INDENT: 2em"> strBuf = cSysDir;</P>
<P style="TEXT-INDENT: 2em"> sprintf(cSysDir, "%s", strBuf.Left(strBuf.Find("<A href="file:///">\\")+1</A>));</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> himlSmall = (HIMAGELIST)SHGetFileInfo ((LPCSTR)cSysDir, </P>
<P style="TEXT-INDENT: 2em"> 0, </P>
<P style="TEXT-INDENT: 2em"> &sfi, </P>
<P style="TEXT-INDENT: 2em"> sizeof(SHFILEINFO), </P>
<P style="TEXT-INDENT: 2em"> SHGFI_SYSICONINDEX | SHGFI_SMALLICON );</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir, </P>
<P style="TEXT-INDENT: 2em"> 0, </P>
<P style="TEXT-INDENT: 2em"> &sfi, </P>
<P style="TEXT-INDENT: 2em"> sizeof(SHFILEINFO), </P>
<P style="TEXT-INDENT: 2em"> SHGFI_SYSICONINDEX | SHGFI_LARGEICON);</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> if (himlSmall && himlLarge)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> ::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,</P>
<P style="TEXT-INDENT: 2em"> (WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);</P>
<P style="TEXT-INDENT: 2em"> ::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,</P>
<P style="TEXT-INDENT: 2em"> (WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> return TRUE; // return TRUE unless you set the focus to a control</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> void CTest6Dlg::AddFiles(LPCTSTR lpszFileName, BOOL bAddToDocument)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> int nIcon = GetIconIndex(lpszFileName, FALSE, FALSE);</P>
<P style="TEXT-INDENT: 2em"> CString strSize;</P>
<P style="TEXT-INDENT: 2em"> CFileFind filefind;</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> // get file size</P>
<P style="TEXT-INDENT: 2em"> if (filefind.FindFile(lpszFileName))</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> filefind.FindNextFile();</P>
<P style="TEXT-INDENT: 2em"> strSize.Format("%d", filefind.GetLength());</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> else</P>
<P style="TEXT-INDENT: 2em"> strSize = "0";</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> // split path and filename</P>
<P style="TEXT-INDENT: 2em"> CString strFileName = lpszFileName;</P>
<P style="TEXT-INDENT: 2em"> CString strPath;</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> int nPos = strFileName.ReverseFind('\\');</P>
<P style="TEXT-INDENT: 2em"> if (nPos != -1)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> strPath = strFileName.Left(nPos);</P>
<P style="TEXT-INDENT: 2em"> strFileName = strFileName.Mid(nPos + 1);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> // insert to list</P>
<P style="TEXT-INDENT: 2em"> int nItem = m_list.GetItemCount();</P>
<P style="TEXT-INDENT: 2em"> m_list.InsertItem(nItem, strFileName, nIcon);</P>
<P style="TEXT-INDENT: 2em"> m_list.SetItemText(nItem, 1, strSize);</P>
<P style="TEXT-INDENT: 2em"> m_list.SetItemText(nItem, 2, strFileName.Right(3));</P>
<P style="TEXT-INDENT: 2em"> m_list.SetItemText(nItem, 3, strPath);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> int CTest6Dlg::GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> SHFILEINFO sfi;</P>
<P style="TEXT-INDENT: 2em"> memset(&sfi, 0, sizeof(sfi));</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> if (bIsDir)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> SHGetFileInfo(lpszPath, </P>
<P style="TEXT-INDENT: 2em"> FILE_ATTRIBUTE_DIRECTORY, </P>
<P style="TEXT-INDENT: 2em"> &sfi, </P>
<P style="TEXT-INDENT: 2em"> sizeof(sfi), </P>
<P style="TEXT-INDENT: 2em"> SHGFI_SMALLICON | SHGFI_SYSICONINDEX |</P>
<P style="TEXT-INDENT: 2em"> SHGFI_USEFILEATTRIBUTES |(bSelected ? SHGFI_OPENICON : 0)); </P>
<P style="TEXT-INDENT: 2em"> return sfi.iIcon;</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> else</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> SHGetFileInfo (lpszPath, </P>
<P style="TEXT-INDENT: 2em"> FILE_ATTRIBUTE_NORMAL, </P>
<P style="TEXT-INDENT: 2em"> &sfi, </P>
<P style="TEXT-INDENT: 2em"> sizeof(sfi), </P>
<P style="TEXT-INDENT: 2em"> SHGFI_SMALLICON | SHGFI_SYSICONINDEX | </P>
<P style="TEXT-INDENT: 2em"> SHGFI_USEFILEATTRIBUTES | (bSelected ? SHGFI_OPENICON : 0));</P>
<P style="TEXT-INDENT: 2em"> return sfi.iIcon;</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> return -1;</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em">22. listctrlÄÚÈݽøÐдóÊý¾ÝÁ¿¸üÐÂʱ£¬±ÜÃâÉÁ˸</P>
<P style="TEXT-INDENT: 2em"> m_list.SetRedraw(FALSE);</P>
<P style="TEXT-INDENT: 2em"> //¸üÐÂÄÚÈÝ</P>
<P style="TEXT-INDENT: 2em"> m_list.SetRedraw(TRUE);</P>
<P style="TEXT-INDENT: 2em"> m_list.Invalidate();</P>
<P style="TEXT-INDENT: 2em"> m_list.UpdateWindow();</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em">»òÕ߲ο¼ </P>
<P style="TEXT-INDENT: 2em"><A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.setredraw.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.setredraw.asp</A></P>
<P style="TEXT-INDENT: 2em">23. listctrlÅÅÐò </P>
<P style="TEXT-INDENT: 2em">Q250614£ºHow To Sort Items in a CListCtrl in Report View</P>
<P style="TEXT-INDENT: 2em"><A href="http://support.microsoft.com/kb/250614/en-us">http://support.microsoft.com/kb/250614/en-us</A></P>
<P style="TEXT-INDENT: 2em">24. ÔÚlistctrlÖÐÑ¡ÖÐij¸öitemʱ¶¯Ì¬¸Ä±äÆäicon»òbitmap</P>
<P style="TEXT-INDENT: 2em">Q141834: How to change the icon or the bitmap of a CListCtrl item in Visual C++</P>
<P style="TEXT-INDENT: 2em"><A href="http://support.microsoft.com/kb/141834/en-us">http://support.microsoft.com/kb/141834/en-us</A></P>
<P style="TEXT-INDENT: 2em">25. ÔÚÌí¼Óitemºó£¬ÔÙInsertColumn()ºóµ¼ÖÂÕûÁÐÊý¾ÝÒÆ¶¯µÄÎÊÌâ</P>
<P style="TEXT-INDENT: 2em">Q151897: CListCtrl::InsertColumn() Causes Column Data to Shift </P>
<P style="TEXT-INDENT: 2em"><A href="http://support.microsoft.com/kb/151897/en-us">http://support.microsoft.com/kb/151897/en-us</A></P>
<P style="TEXT-INDENT: 2em">26. ¹ØÓÚlistctrlµÚÒ»ÁÐʼÖÕ¾Ó×óµÄÎÊÌâ</P>
<P style="TEXT-INDENT: 2em">½â¾ö°ì·¨£º°ÑµÚÒ»Áе±Ò»¸öÐéÁУ¬´ÓµÚ¶þÁпªÊ¼²åÈëÁм°Êý¾Ý£¬×îºóɾ³ýµÚÒ»ÁС£</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em">¾ßÌå½âÊͲÎÔÄ <A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/structures/lvcolumn.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/structures/lvcolumn.asp</A></P>
<P style="TEXT-INDENT: 2em">27. Ëø¶¨column headerµÄÍ϶¯</P>
<P style="TEXT-INDENT: 2em"><A href="http://msdn.microsoft.com/msdnmag/issues/03/06/CQA/">http://msdn.microsoft.com/msdnmag/issues/03/06/CQA/</A></P>
<P style="TEXT-INDENT: 2em">28. ÈçºÎÒþ²ØclistctrlµÄÁÐ</P>
<P style="TEXT-INDENT: 2em"> °ÑÐèÒþ²ØµÄÁеĿí¶ÈÉèΪ0,È»ºó¼ì²âµ±¸ÃÁÐΪÒþ²ØÁÐʱ£¬ÓÃÉÏÃæµÚ27µãµÄËø¶¨column µÄÍ϶¯À´ÊµÏÖ</P>
<P style="TEXT-INDENT: 2em">29. listctrl½øÐдóÊý¾ÝÁ¿²Ù×÷ʱ£¬Ê¹ÓÃvirtual list </P>
<P style="TEXT-INDENT: 2em"><A href="http://www.codeguru.com/cpp/controls/listview/advanced/article.php/c4151/">http://www.codeguru.com/cpp/controls/listview/advanced/article.php/c4151/</A></P>
<P style="TEXT-INDENT: 2em"><A href="http://www.codeproject.com/listctrl/virtuallist.asp">http://www.codeproject.com/listctrl/virtuallist.asp</A></P>
<P style="TEXT-INDENT: 2em">30. ¹ØÓÚitemÖ»ÄÜÏÔʾ259¸ö×Ö·ûµÄÎÊÌâ</P>
<P style="TEXT-INDENT: 2em">½â¾ö°ì·¨£ºÐèÒªÔÚitemÉÏ·ÅÒ»¸öedit¡£</P>
<P style="TEXT-INDENT: 2em">31. ÏìÓ¦ÔÚlistctrlµÄcolumn headerÉϵÄÊó±êÓÒ¼üµ¥»÷</P>
<P style="TEXT-INDENT: 2em">Q125694: How To Find Out Which Listview Column Was Right-Clicked</P>
<P style="TEXT-INDENT: 2em"><A href="http://support.microsoft.com/kb/125694/en-us">http://support.microsoft.com/kb/125694/en-us</A></P>
<P style="TEXT-INDENT: 2em">32. ÀàËÆÓÚwindows×ÊÔ´¹ÜÀíÆ÷µÄlistview</P>
<P style="TEXT-INDENT: 2em">Q234310: How to imple**** ListView control that is similar to Windows Explorer by using DirLV.exe</P>
<P style="TEXT-INDENT: 2em"><A href="http://support.microsoft.com/kb/234310/en-us">http://support.microsoft.com/kb/234310/en-us</A></P>
<P style="TEXT-INDENT: 2em">33. ÔÚListCtrlÖÐOnTimerÖ»ÏìÓ¦Á½´ÎµÄÎÊÌâ</P>
<P style="TEXT-INDENT: 2em">Q200054£º</P>
<P style="TEXT-INDENT: 2em">PRB: OnTimer() Is Not Called Repeatedly for a List Control</P>
<P style="TEXT-INDENT: 2em"><A href="http://support.microsoft.com/kb/200054/en-us">http://support.microsoft.com/kb/200054/en-us</A></P>
<P style="TEXT-INDENT: 2em">34. ÒÔÏÂΪһЩΪʵÏÖ¸÷ÖÖ×Ô¶¨Ò幦ÄܵÄlistctrlÅÉÉúÀà</P>
<P style="TEXT-INDENT: 2em"> (1) ÍÏ·Å </P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/dragtest.asp">http://www.codeproject.com/listctrl/dragtest.asp</A></P>
<P style="TEXT-INDENT: 2em"> ÔÚCListCtrlºÍCTreeCtrl¼äÍÏ·Å</P>
<P style="TEXT-INDENT: 2em"> <A href="http://support.microsoft.com/kb/148738/en-us">http://support.microsoft.com/kb/148738/en-us</A></P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> (2) ¶à¹¦ÄÜlistctrl</P>
<P style="TEXT-INDENT: 2em"> Ö§³Ösubitem¿É±à¼£¬Í¼±ê£¬radiobutton£¬checkbox£¬×Ö·û´®¸Ä±äÑÕÉ«µÄÀà</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/quicklist.asp">http://www.codeproject.com/listctrl/quicklist.asp</A></P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> Ö§³ÖÅÅÐò£¬subitem¿É±à¼£¬subitemͼ±ê£¬subitem¸Ä±äÑÕÉ«µÄÀà</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/ReportControl.asp">http://www.codeproject.com/listctrl/ReportControl.asp</A></P>
<P style="TEXT-INDENT: 2em"> (3) subitemÖÐÏÔʾ³¬Á´½Ó</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/CListCtrlLink.asp">http://www.codeproject.com/listctrl/CListCtrlLink.asp</A></P>
<P style="TEXT-INDENT: 2em"> (4) subitemµÄtooltipÌáʾ</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/ctooltiplistctrl.asp">http://www.codeproject.com/listctrl/ctooltiplistctrl.asp</A></P>
<P style="TEXT-INDENT: 2em"> (5) subitemÖÐÏÔʾ½ø¶ÈÌõ </P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/ProgressListControl.asp">http://www.codeproject.com/listctrl/ProgressListControl.asp</A></P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/napster.asp">http://www.codeproject.com/listctrl/napster.asp</A></P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeguru.com/Cpp/controls/listview/article.php/c4187/">http://www.codeguru.com/Cpp/controls/listview/article.php/c4187/</A></P>
<P style="TEXT-INDENT: 2em"> (6) ¶¯Ì¬¸Ä±äsubitemµÄÑÕÉ«ºÍ±³¾°É«</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/highlightlistctrl.asp">http://www.codeproject.com/listctrl/highlightlistctrl.asp</A></P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeguru.com/Cpp/controls/listbox/colorlistboxes/article.php/c4757/">http://www.codeguru.com/Cpp/controls/listbox/colorlistboxes/article.php/c4757/</A></P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> (7) ÀàvbÊôÐÔ¶Ô»°¿ò</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/propertylistctrl.asp">http://www.codeproject.com/listctrl/propertylistctrl.asp</A></P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c995/">http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c995/</A> </P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c1041/">http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c1041/</A> </P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> (8) Ñ¡ÖÐsubitem(Ö»¸ßÁÁÑ¡ÖеÄitem)</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/SubItemSel.asp">http://www.codeproject.com/listctrl/SubItemSel.asp</A></P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/ListSubItSel.asp">http://www.codeproject.com/listctrl/ListSubItSel.asp</A></P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> (9) ¸Ä±äÐиß</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/changerowheight.asp">http://www.codeproject.com/listctrl/changerowheight.asp</A></P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> (10) ¸Ä±äÐÐÑÕÉ«</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/coloredlistctrl.asp">http://www.codeproject.com/listctrl/coloredlistctrl.asp</A></P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> (11) ¿É±à¼subitemµÄlistctrl</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/nirs2000.asp">http://www.codeproject.com/listctrl/nirs2000.asp</A></P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/editing_subitems_in_listcontrol.asp">http://www.codeproject.com/listctrl/editing_subitems_in_listcontrol.asp</A></P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> (12) subitem¿É±à¼£¬²åÈëcombobox£¬¸Ä±äÐÐÑÕÉ«£¬subitemµÄtooltipÌáʾ</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/reusablelistcontrol.asp">http://www.codeproject.com/listctrl/reusablelistcontrol.asp</A></P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> (13) header ÖÐÔÊÐí¶àÐÐ×Ö·û´®</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/headerctrlex.asp">http://www.codeproject.com/listctrl/headerctrlex.asp</A></P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> (14) ²åÈëcombobox</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c979/">http://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c979/</A></P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> (15) Ìí¼Ó±³¾°Í¼Æ¬</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c4173/">http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c4173/</A></P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c983/">http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c983/</A></P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.vchelp.net/vchelp/archive.asp?type_id=9&class_id=1&cata_id=1&article_id=1088&search_term">http://www.vchelp.net/vchelp/archive.asp?type_id=9&class_id=1&cata_id=1&article_id=1088&search_term</A>=</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> (16) ×ÔÊÊÓ¦¿í¶ÈµÄlistctrl</P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/useritems/AutosizeListCtrl.asp">http://www.codeproject.com/useritems/AutosizeListCtrl.asp</A></P>
<P style="TEXT-INDENT: 2em"> (17) ¸Ä±äListCtrl¸ßÁÁʱµÄÑÕÉ«(ĬÈÏΪÀ¶É«)</P>
<P style="TEXT-INDENT: 2em"> ´¦Àí</P>
<P style="TEXT-INDENT: 2em">NM_CUSTOMDRAW </P>
<P style="TEXT-INDENT: 2em"> <A href="http://www.codeproject.com/listctrl/lvcustomdraw.asp">http://www.codeproject.com/listctrl/lvcustomdraw.asp</A></P>
<P style="TEXT-INDENT: 2em">CListCtrlʹÓÃÏê½â </P>
<P style="TEXT-INDENT: 2em">1¡£ÏÈÀ´½éÉÜREPORTÀàÐ͵ÄCListCtrl£º</P>
<P style="TEXT-INDENT: 2em">Ê×ÏÈʹÓÃÏÂÃæµÄÓï¾äÉèÖÃCListCtrlµÄstyle£º</P>
<P style="TEXT-INDENT: 2em"> DWORD SetExtendedStyle( DWORD dwNewStyle );</P>
<P style="TEXT-INDENT: 2em">ÆäÖÐ</P>
<P style="TEXT-INDENT: 2em"> LVS_EX_CHECKBOXES ±íʾÌí¼ÓCheckBox</P>
<P style="TEXT-INDENT: 2em"> LVS_EX_FULLROWSELECT ±íʾѡÔñÕûÐÐ</P>
<P style="TEXT-INDENT: 2em"> LVS_EX_GRIDLINES ±íʾÌí¼Ó±í¸ñÏß</P>
<P style="TEXT-INDENT: 2em">Èç¹ûÉèÖÃÁËLVS_EX_CHECKBOXESÊôÐÔ£¬Ôò¿ÉÒÔÓÃ</P>
<P style="TEXT-INDENT: 2em"> BOOL GetCheck( int nItem ) const;</P>
<P style="TEXT-INDENT: 2em">À´µÃµ½Ä³Ò»ÐÐÊÇ·ñChecked¡£</P>
<P style="TEXT-INDENT: 2em">¿ÉÒÔÏÈÓÃÏÂÃæµÄÓï¾äÀ´É¾³ýÒÔǰµÄ¶«Î÷£º</P>
<P style="TEXT-INDENT: 2em"> for(int k=2;k>=0;k--) //×¢ÒâÒª´ÓºóÍùǰɾ£¬·ñÔò³ö´í</P>
<P style="TEXT-INDENT: 2em"> m_ListCtrl.DeleteColumn(k);</P>
<P style="TEXT-INDENT: 2em"> m_ListCtrl.DeleteAllItems();</P>
<P style="TEXT-INDENT: 2em">ÓÃÏÂÃæµÄÓï¾äн¨ÁУº</P>
<P style="TEXT-INDENT: 2em"> m_ListCtrl.InsertColumn(0,_T("ÎļþÃû"),LVCFMT_IMAGE|LVCFMT_LEFT);</P>
<P style="TEXT-INDENT: 2em"> m_ListCtrl.InsertColumn(1,_T("ÒÇÆ÷Àà±ð"));</P>
<P style="TEXT-INDENT: 2em"> m_ListCtrl.InsertColumn(2,_T("ÏîÄ¿Àà±ð"));</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em">ÆäÖÐLVCFMT_IMAGE±íʾ¿ÉÒÔÔÚµÚÒ»ÁмÓÈëͼ±ê¡£Èç¹û²»ÒªÍ¼±ê¿ÉÒÔɾȥ¡£</P>
<P style="TEXT-INDENT: 2em">È»ºóÉèÖÃÁÐ¿í£º</P>
<P style="TEXT-INDENT: 2em"> for(j=0;j<3;j++)</P>
<P style="TEXT-INDENT: 2em"> m_ListCtrl.SetColumnWidth(j ,100);</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em">ÒÔÏÂΪÁбí¼ÓÈëͼ±ê£¬Èç¹û²»ÐèҪͼ±ê£¬¿ÉÒÔÌø¹ýÕâÒ»²½¡£×¢ÒâÖ»ÔÚµÚÒ»´Î¼ÓÈ룬Èç¹û¶à´Î¼ÓÈë»á³ö´í£¡</P>
<P style="TEXT-INDENT: 2em">ÏÈÔÚÍ·ÎļþÖмÓÈëÉùÃ÷£º</P>
<P style="TEXT-INDENT: 2em"> CImageList m_ImageList;</P>
<P style="TEXT-INDENT: 2em">ÕâÊDZØÒªµÄ£¬Èç¹ûÔÚcppµÄij¸öº¯ÊýÖмÓÈëÓÉÓÚÉúÃüÆÚ½áÊø£¬CImageList×Ô¶¯ÊÍ·Å£¬ÔòЧ¹ûÊÇÁбíÖп´²»µ½Í¼±ê£¬Ö»¿´µ½Ò»¸ö°×·½¿é¡£</P>
<P style="TEXT-INDENT: 2em">ÏÂÃæÉú³ÉCImageList£¬²¢½«Æä°ó¶¨µ½CListCtrlÖУ¬ÕâÊÇCImageListÖл¹Ã»ÓÐͼ±ê£¬Ö»ÊÇÒ»¸öÈÝÆ÷£º</P>
<P style="TEXT-INDENT: 2em"> static int flag=2;</P>
<P style="TEXT-INDENT: 2em"> if(flag==2){//Ö»µ÷ÓÃÒ»´ÎSetImageList£¬·ñÔò³ö´í</P>
<P style="TEXT-INDENT: 2em"> m_ImageList.Create(128, 128, ILC_COLORDDB|ILC_MASK, 20, 1); </P>
<P style="TEXT-INDENT: 2em"> m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> flag=(flag+1)%2;</P>
<P style="TEXT-INDENT: 2em">Èç¹ûCListCtrlÒѾÓùý£¬Ôø¾¼Ó¹ýͼ±ê½øÈ¥£¬Õâʱ¾ÍҪɾ³ýÉϴηŽøm_ImageListÖеÄImage</P>
<P style="TEXT-INDENT: 2em"> for(int kk=0;kk<m_ImageList.GetImageCount();kk++)</P>
<P style="TEXT-INDENT: 2em"> m_ImageList.Remove(k);</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em">ÏÂÃæ½éÉÜÈçºÎÏòCListCtrlÀïÃæ¼ÓÈëÐУ¬²¢Í¬Ê±ÎªÃ¿Ò»Ðж¯Ì¬¼ÓÈëͼ±ê£º</P>
<P style="TEXT-INDENT: 2em">¼ÙÉèm_listRowCountΪҪ¼ÓÈëµÄÐÐÊý¡£</P>
<P style="TEXT-INDENT: 2em"> CBitmap* bitmap;</P>
<P style="TEXT-INDENT: 2em"> bitmap=new CBitmap[m_list1rowCount];</P>
<P style="TEXT-INDENT: 2em"> HBITMAP hbitmap; </P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> for(int i = 0; i < m_listRowCount; i++)</P>
<P style="TEXT-INDENT: 2em"> {</P>
<P style="TEXT-INDENT: 2em"> //ΪÿһÐвåÈëÏàÓ¦µÄËõÂÔͼ</P>
<P style="TEXT-INDENT: 2em"> CFile f;</P>
<P style="TEXT-INDENT: 2em"> CFileException e; </P>
<P style="TEXT-INDENT: 2em"> if( !f.Open(m_FileName, CFile::modeRead, &e )){ //m_FileNameΪbmpÎļþÃû£¬ÓÉÄãÀ´¶¨</P>
<P style="TEXT-INDENT: 2em"> hbitmap = (HBITMAP)LoadImage(NULL,path+"blank.bmp",IMAGE_BITMAP,0,0,</P>
<P style="TEXT-INDENT: 2em"> LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);</P>
<P style="TEXT-INDENT: 2em"> }else{</P>
<P style="TEXT-INDENT: 2em"> f.Close();</P>
<P style="TEXT-INDENT: 2em"> hbitmap = (HBITMAP)LoadImage(NULL,bmpFile,IMAGE_BITMAP,0,0,</P>
<P style="TEXT-INDENT: 2em"> LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> bitmap[i].Attach(hbitmap);</P>
<P style="TEXT-INDENT: 2em"> m_ImageList.Add(&bitmap[i], RGB(0, 128, 128));</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> //²åÈëÐÐ</P>
<P style="TEXT-INDENT: 2em"> m_ListCtrl.InsertItem(i,m_FileName,i);</P>
<P style="TEXT-INDENT: 2em"> m_ListCtrl.SetItemText(i,1,type);</P>
<P style="TEXT-INDENT: 2em"> m_ListCtrl.SetItemText(i,2,m_Path);</P>
<P style="TEXT-INDENT: 2em"> }</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> //¼ÇµÃɾ³ýÒѾûÓõÄÁÙʱÎļþ</P>
<P style="TEXT-INDENT: 2em"> if(m_list1rowCount!=0)</P>
<P style="TEXT-INDENT: 2em"> delete[] bitmap;</P>
<P style="TEXT-INDENT: 2em">2¡£Èç¹ûÊÇICONÀàÐ͵ÄCListCtrl£¬ÔòÒª×öÒ»µãµã¸Ä¶¯£º</P>
<P style="TEXT-INDENT: 2em">°Ñ°ó¶¨Í¼±ê¼¯µÄ´úÂëÓÉ</P>
<P style="TEXT-INDENT: 2em"> SetImageList(&m_ImageList,LVSIL_SMALL);</P>
<P style="TEXT-INDENT: 2em">¸ÄΪ</P>
<P style="TEXT-INDENT: 2em"> SetImageList(&m_ImageList,LVSIL_NORMAL);</P>
<P style="TEXT-INDENT: 2em">²åÈëÐÐʱֻÓÃ</P>
<P style="TEXT-INDENT: 2em"> InsertItem(i,mainSet.m_FileName,i);</P>
<P style="TEXT-INDENT: 2em">²»ÓÃ</P>
<P style="TEXT-INDENT: 2em"> SetItemText(i,1,type);</P>
<P style="TEXT-INDENT: 2em">Ö®ÀàµÄ´úÂë¡£</P>
<P style="TEXT-INDENT: 2em"></P></div>
¡¡¡¡[]¡¡¡¡[]
<div><P style="TEXT-INDENT: 2em">»¬¶¯Ìõ¿ØÖÆ£¨Slider Control£©Ò²½Ð¹ìµÀÌõ¿ØÖÆ£¬ÆäÖ÷ÒªÊÇÓÃÒ»¸ö´øÓйìµÀºÍ»¬±êµÄС´°¿ÚÒÔ¼°´°¿ÚÉϵĿ̶ȣ¬À´ÈÃÓû§Ñ¡ÔñÒ»¸öÀëÉ¢Êý¾Ý»òÒ»¸öÁ¬ÐøµÄÊýÖµÇø¼ä¡£Í¨¹ýÊó±ê»ò¼üÅÌÀ´½øÐÐÊý¾ÝµÄÑ¡Ôñ²Ù×÷£¬ÕâÔÚWIN98/95ÖеĺܶàÓ¦ÓóÌÐòÖж¼¿ÉÒÔ¿´µ½£¬Èç¿ØÖÆÃæ°åÖеÄÊó±êµÈ£¬»¬¶¯Ìõ¼È¿ÉÒÔÊÇˮƽ·½Ê½µÄÒ²¿ÉÒÔÊÇ´¹Ö±·½Ê½µÄ¡£»¬¶¯Ìõ¿ØÖƵķç¸ñÈçÏ£º</P>
<P style="TEXT-INDENT: 2em">TBS_HORZ »¬¶¯ÌõÊÇˮƽ·½ÏòµÄ TBS_VERT »¬¶¯ÌõÊÇ´¹Ö±·½ÏòµÄ</P>
<P style="TEXT-INDENT: 2em">TBS_LEFT »¬¶¯ÌõλÓÚ´°¿Ú×ó²à TBS_RIGHT »¬¶¯ÌõλÓÚ´°¿ÚÓÒ²à</P>
<P style="TEXT-INDENT: 2em">TBS_TOP »¬¶¯ÌõλÓÚ´°¿Ú¶¥²¿ TBS_BOTTOM »¬¶¯ÌõλÓÚ´°¿Úµ×²¿</P>
<P style="TEXT-INDENT: 2em">TBS_BOTH »¬¶¯ÌõλÓÚ´°¿ÚÁ½²à TBS_AUTOTICKS»¬¶¯Ìõ¾ßÓп̶ȣ¬Ä¬ÈÏ</P>
<P style="TEXT-INDENT: 2em">TBS_NOTICKS »¬¶¯Ìõ²»¾ßÓп̶È</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡»¬¶¯ÌõµÄ¿Ì¶ÈÌõÔÚÿһ¸öÊýֵλÖÃÏÔʾһ¸ö¿Ì¶È±ê¼Ç£¬Èç¹ûÔÚ»¬¶¯ÌõÉÏÏÔʾijһÊýֵѡÔñÇø¼ä£¬ÔòӦʹÓ÷ç¸ñTBS_ENABLESELRANGE£¬´ËʱѡÔñÇø¼äÁ½¸ö²»ÔÙÊǿ̶ȱê¼Ç£¬¶øÊÇÒ»¸öСµÄÈý½ÇÐηûºÅ¡£ÁíÍ⣬ʹÓ÷ç¸ñTBS_NOTHUMB»áʹ»¬±êÏûÒþÆðÀ´¡£</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡»¬¶¯Ìõ¿ØÖÆÔÚMFCÀà¿âÖб»·âװΪCSliderCtrl¿ØÖÆ£¬ÆäÖ÷Òª²Ù×÷ÊÇÉèÖÿ̶ȷ¶Î§¡¢»æÖƿ̶ȱê¼Ç¡¢ÉèÖÃÑ¡Ôñ·¶Î§ºÍµ±Ç°»¬±êλÖõȡ£µ±Óû§½øÐн»»¥²Ù×÷ʱ£¬»¬¶¯Ìõ¿ØÖƽ«ÏòÆä¸¸´°¿Ú·¢ËÍÏûÏ¢WM_HSCROLL£¬ËùÒÔÔÚÓ¦ÓóÌÐòÖÐÓ¦ÖØÔØ¸¸´°¿ÚµÄOnHScroll()³ÉÔ±º¯Êý£¬ÒÔ±ã¶ÔÏûÏ¢½øÐÐÕýÈ·´¦Àíϵͳ·¢Ë͵Ä֪ͨ´úÂë¡¢»¬±êλÖúÍÖ¸ÏòCSliderCtrl¶ÔÏóµÄÖ¸ÕëµÈ¡£ÓÉÓÚ¿¼Âǵ½ºÍˮƽ¾í¶¯¸Ë¹«ÓÃͬһ¸ö³ÉÔ±º¯Êý£¬OnHScroll()º¯Êý²ÎÊý±íÖеÄÖ¸Õë±äÁ¿±»¶¨ÒåΪCScrollBar*ÀàÐÍ£¬ÓÉÓÚʵ¼ÊÉÏÏûÏ¢ÊÇÓÉ»¬¶¯Ìõ²úÉúµÄ£¬ËùÒÔÔÚ³ÌÐòÖбØÐë°ÑÕâ¸öÖ¸Õë±äÁ¿Ç¿ÖÆ×ª»»ÎªCSliderCtrl*ÀàÐÍ¡£»¬¶¯ÌõºÍ¾í¶¯¸ËµÄÏûÏ¢´úÂëºÍº¬Òå¶¼·Ç³£ÀàËÆÈçTB_BOTTOMµÈ£¬ËùÒÔÕâÖÖ´¦Àí·½·¨±È½ÏºÏÀí¡£SetRange()º¯ÊýÓÃÀ´ÉèÖ÷¶Î§£¬SetPos()º¯ÊýÓÃÀ´ÉèÖõ±Ç°Î»Öá£</P>
<P style="TEXT-INDENT: 2em">£¨¶þ£©»¬¶¯Ìõ¿ØÖƵĶÔÏó½á¹¹</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡»¬¶¯Ìõ¿ØÖƵĽ¨Á¢·½·¨</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡¡¡CsliderCtrl &SliderCtrl ½¨Á¢»¬¶¯Ìõ¿ØÖƶÔÏó½á¹¹£»Create ½¨Á¢»¬¶¯Ìõ¿ØÖƶÔÏ󲢰󶨶ÔÏó</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡¡¡»¬¶¯Ìõ¿ØÖÆÀàCSliderCtrl::CreateµÄµ÷ÓøñʽÈçÏ£º</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡ÆäÖвÎÊýdwStyleÓÃÀ´È·¶¨»¬¶¯Ìõ¿ØÖÆ·ç¸ñ£»²ÎÊýrectÓÃÀ´È·¶¨»¬¶¯Ìõ¿ØÖƵĴóСºÍλÖ㻲ÎÊýpParentWndÓÃÀ´È·¶¨»¬¶¯Ìõ¿ØÖƵĸ¸´°¿ÚÖ¸Õ룻²ÎÊýnIDÓÃÀ´È·¶¨»¬¶¯Ìõ¿ØÖƵĿØÖÆ·ûIDÖµ¡£</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡2¡¢»¬¶¯Ìõ¿ØÖƵÄÀàÊôÐÔ</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡»¬¶¯Ìõ¿ØÖƶÔÏóµÄÀàÊôÐÔ°üÀ¨È¡µÃ»¬¶¯Ìõ´óСGetLineSize¡¢ÉèÖû¬¶¯Ìõ´óСSetLineSize¡¢È¡µÃ»¬¶¯ÌõÒ³´óСGetPageSize¡¢ÉèÖû¬¶¯ÌõÒ³´óСSetPageSize¡¢È¡µÃ»¬¶¯Ìõ×î´óλÖÃGetRangeMax¡¢È¡µÃ»¬¶¯Ìõ×îСλÖÃGetRangeMin¡¢È¡µÃ»¬¶¯Ìõ·¶Î§GetRange¡¢ÉèÖû¬¿é×îСλÖÃSetRangeMin¡¢ÉèÖû¬¿é×î´óλÖÃSetRangeMax¡¢ÉèÖû¬¶¯Ìõ·¶Î§SetRange¡¢È¡µÃ»¬¿éµ±Ç°Î»ÖÃGetSelection¡¢ÉèÖû¬¿éµ±Ç°Î»ÖÃSetSelection¡¢È¡µÃ»¬¶¯Ìõµ±Ç°Î»ÖÃGetPosºÍÉèÖû¬¶¯Ìõµ±Ç°Î»ÖÃSetPosµÈ¡£</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡3¡¢»¬¶¯Ìõ¿ØÖƵIJÙ×÷·½·¨</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡»¬¶¯Ìõ¿ØÖƵIJÙ×÷·½·¨°üÀ¨Çå³ý»¬¶¯Ìõµ±Ç°Ñ¡ÔñClearSel¡¢ÑéÖ¤»¬¶¯Ìõµ±Ç°Î»ÖÃÊÇ·ñÔÚ×î´ó×îСλÖÃÖ®¼äVerifyPosºÍÇå³ýµ±Ç°¿Ì¶È±êÖ¾ClearTics¡£</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡»¬¶¯Ìõ¿ØÖƵÄÓ¦Óü¼ÇÉʾÀý</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡1¡¢ÀûÓÃÓ¦ÓóÌÐòÏòµ¼AppWizardÉú³É»ùÓÚ¶ÔÏó¿òµÄÓ¦ÓóÌÐòCSlidDlg£»</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡2¡¢ÔÚ¶Ô»°¿òÖÐÉèÖû¬¶¯Ìõ¿ØÖÆ£¬ÆäIDΪIDC_SLIDER£»</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡3¡¢ÔÚ¶Ô»°¿ò³õʼ´úÂëÖÐÔö¼Ó¿ØÖƵķ¶Î§ºÍλÖãº</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡£¨1£©ÔÚSlidDlg.hÖÐÉèÖÃÊý¾Ý³ÉÔ±£¬ÓÃÀ´±íʾ»¬¶¯ÌõµÄµ±Ç°Öµ£º</P>
<P style="TEXT-INDENT: 2em">//SlidDlg.h</P>
<P style="TEXT-INDENT: 2em">class CSlidDlg:public Cdialog</P>
<P style="TEXT-INDENT: 2em">{ £®£®£®£®£®£®//ÆäËü´úÂë</P>
<P style="TEXT-INDENT: 2em"> public:</P>
<P style="TEXT-INDENT: 2em"> int m_nCur;</P>
<P style="TEXT-INDENT: 2em"> £®£®£®£®£®£®//ÆäËü´úÂë</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">£¨2£©ÔÚSlidDlg.cppÖÐÉèÖóõʼ״̬</P>
<P style="TEXT-INDENT: 2em">BOOL CSlidDlg::OnInitDialog()</P>
<P style="TEXT-INDENT: 2em">{ Cdialog::OnInitDialog();</P>
<P style="TEXT-INDENT: 2em"> £®£®£®£®£®£®//ÆäËü´úÂë</P>
<P style="TEXT-INDENT: 2em"> //TODO:Add extra initialization here</P>
<P style="TEXT-INDENT: 2em"> CSliderCtrl *pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLLIDER);</P>
<P style="TEXT-INDENT: 2em"> pSlidCtrl->SetRange(1,5,TRUE);//ÉèÖû¬¶¯Ìõ·¶Î§</P>
<P style="TEXT-INDENT: 2em"> pSlidCtrl->SetPos(2);//ÉèÖû¬¶¯ÌõλÖÃ</P>
<P style="TEXT-INDENT: 2em"> £®£®£®£®£®£®//ÆäËü´úÂë</P>
<P style="TEXT-INDENT: 2em"> return TRUE;</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">£¨3£©ÍêÉÆ»¬¶¯ÌõµÄÏûÏ¢´¦Àí£¬ÀûÓÃÀàÏòµ¼ClassWizardÔö¼Ó¶Ô»°¿ò´°¿ÚµÄWM_HSCROLLÏûÏ¢´¦Àíº¯Êý£¬²¢È¡µÃ»¬±êËùָλÖÃÖµ£º</P>
<P style="TEXT-INDENT: 2em">void CSlidDlg::OnHScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar)</P>
<P style="TEXT-INDENT: 2em">{ //TODO:Add your message handler?</P>
<P style="TEXT-INDENT: 2em"> Cdialog::OnHScroll(nSBCode,nPos,pScrollBar);</P>
<P style="TEXT-INDENT: 2em"> CSliderCtrl *pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLLIDER);</P>
<P style="TEXT-INDENT: 2em"> m_nCur=pSlidCtrl->GetPos();//È¡µÃµ±Ç°Î»ÖÃÖµ</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em">VCͨÓÿؼþ±à³ÌÖ®CStatusBar¿Ø¼þ</P>
<P style="TEXT-INDENT: 2em">£¨Ò»£©×´Ì¬Ìõ¿ØÖƵÄÖ÷Òª¹¦ÄÜ </P>
<P style="TEXT-INDENT: 2em">״̬Ìõ¿ØÖÆ(Status Bar <A href="http://www.yesky.com/key/478/125478.html">Control</A>)±È½ÏÈÝÒ×Àí½â£¬Ê¹ÓÃÆðÀ´Ò²±È½Ï¼òµ¥¡£×´Ì¬ÌõÊÇλÓÚ¸¸´°¿Úµ×²¿µÄÒ»¸öˮƽ×Ó´°¿Ú£¬Ëü¿ÉÒÔ±»·Ö³É¶à¸öÏÔʾÐÅÏ¢µÄÐ¡ÇøÓò¡£ÆäMFCÖзâ×°µÄCstatusBarCtrl¿ØÖÆÀàÌṩÁËÓ¦ÓõĻù±¾·½·¨¡£</P>
<P style="TEXT-INDENT: 2em">£¨¶þ£©×´Ì¬Ìõ¿ØÖƵĶÔÏó½á¹¹</P>
<P style="TEXT-INDENT: 2em">1¡¢×´Ì¬Ìõ¿ØÖƵĽ¨Á¢·½·¨</P>
<P style="TEXT-INDENT: 2em">CStatusBarCtrl &StatusBarCtrl ½¨Á¢×´Ì¬Ìõ¿ØÖƶÔÏó½á¹¹£»Create ½¨Á¢×´Ì¬Ìõ¿ØÖƶÔÏó²¢°ó¶¨×´Ì¬Ìõ¿ØÖÆÀàCstatusBarCtrl::CreateµÄµ÷ÓøñʽÈçÏ£º</P>
<P style="TEXT-INDENT: 2em">BOOL Create( DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID);</P>
<P style="TEXT-INDENT: 2em">ÆäÖвÎÊýdwStyleÓÃÀ´È·¶¨×´Ì¬ÌõµÄ¿ØÖÆ·ç¸ñ£»²ÎÊýrectÓÃÀ´È·¶¨×´Ì¬Ìõ´°¿ÚµÄ´óСºÍλÖ㻲ÎÊýpParentWndÓÃÀ´È·¶¨×´Ì¬Ìõ¸¸´°¿ÚµÄÖ¸Õ룻nIDÓÃÀ´È·¶¨×´Ì¬Ìõ¿ØÖƵıêʶ·û¡£</P>
<P style="TEXT-INDENT: 2em">״̬Ìõ¿ØÖÆ·ç¸ñ¿ÉÒÔÊÇÏÂÁÐÖµµÄ×éºÏ£ºCCS_BOTTOM¡¢CCS_NODIVIDER¡¢CCS_NOHILITE¡¢CCS_NOMOVEY¡¢CCS_NOPARENTALIGN¡¢CCS_NORESIZEºÍCCS_TOPµÈ£¬¾ßÌåÄÚÈݺͺ¬ÒåÇë¼û¹¤¾ßÌõ¿ØÖÆÖеÄÓйز¿·Ö¡£</P>
<P style="TEXT-INDENT: 2em">2¡¢×´Ì¬Ìõ¿ØÖƵÄÀàÊôÐÔ</P>
<P style="TEXT-INDENT: 2em">״̬Ìõ¿ØÖÆÀàÊôÐÔ°üÀ¨ÉèÖøø¶¨²¿·ÖÏÔʾÎı¾SetText¡¢È¡µÃ¸ø¶¨²¿·ÖµÄÎı¾GetText¡¢ÉèÖÃ״̬ÌõÇøÓò»®·ÖÊý¼°Æäÿ²¿·ÖµÄÓÒ±ß×ø±êSetParts¡¢È¡µÃ״̬ÌõÇøÓò»®·ÖÊýÁ¿GetParts¡¢È¡µÃ״̬ÌõµÄˮƽºÍ´¹Ö±¿í¶ÈGetBordersºÍÈ¡µÃ״̬Ìõ¾ØÐÎÇøÓòGetRect¡£</P>
<P style="TEXT-INDENT: 2em">£¨Èý£©×´Ì¬Ìõ¿ØÖƵÄÓ¦Óü¼ÇÉ</P>
<P style="TEXT-INDENT: 2em">״̬Ìõ¿ØÖƳý¿ÉÒÔÏÔʾһ¶¨µÄ°ïÖúºÍÌáʾÐÅÏ¢Í⣬»¹¿ÉÒÔʵÏÖÏìÓ¦Êó±êÊäÈëµÈ¹¦ÄÜ¡£ÕâÀïÒÔÔÚ״̬ÌõÉÏÏÔʾÊó±êÒÆ¶¯×ø±êΪÀý£¬¾ßÌå˵Ã÷ÆäÓ¦Óü¼ÇÉ¡£</P>
<P style="TEXT-INDENT: 2em">ÀûÓÃÓ¦ÓóÌÐòÏòµ¼Éú³ÉµÄ³ÌÐò´úÂëÖУ¬×´Ì¬Ìõ×÷ΪÖ÷´°¿ÚµÄ×Ó´°¿Ú£¬Æä¾ßÓÐÒ»¸öAFX_IDW_STATUS _BAR±êʶ·û£¬Í¨¹ýËüµ÷Óú¯ÊýGetDescendantWindow()ºÍAfxGetMainWnd()£¬¾Í¿ÉÒÔÈ¡µÃ״̬Ìõ´°¿ÚµÄÖ¸Õë¡£ÓÉÓÚ»ùÓÚÎĵµµÄÓ¦ÓóÌÐòÔÚ½¨Á¢Ê±¾Í¾ßÓÐ״̬ÌõÇøÓò£¬ËùÒÔÖ»ÒªÀûÓÃÀàÏòµ¼¼òµ¥µØ¼ÓÈëÊó±êÒÆ¶¯ÏûÏ¢´¦Àí¹¦Äܺ¯ÊýºÍÏÂÊöº¯Êý´úÂ룬¾Í¿ÉÒÔʵÏÖÕâÒ»¹¦ÄÜ£º</P>
<P style="TEXT-INDENT: 2em">Void CTestView::OnMouseMove(UINT nFlags,Cpoint point)</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">CclientDC dc(this);//½¨Á¢É豸Îı¾</P>
<P style="TEXT-INDENT: 2em">OnPrepareDC(&dc,NULL);//É豸ӳÉä´¦Àí</P>
<P style="TEXT-INDENT: 2em">dc.DPtoLP(&point);//Êó±êÖ¸Õëת»»</P>
<P style="TEXT-INDENT: 2em">char text[128];</P>
<P style="TEXT-INDENT: 2em">CstatusBar *pStatus=(CstatusBar *)AfxGetApp()->m_pMainWnd-></P>
<P style="TEXT-INDENT: 2em">GetDescendanWindow(AFX_IDW_STATUS_BAR);//È¡µÃ´°¿ÚÖ¸Õë</P>
<P style="TEXT-INDENT: 2em">If(pStatus){//Èç¹û´æÔÚÏÔʾÊó±ê×ø±ê</P>
<P style="TEXT-INDENT: 2em">Sprintf(text,¡±X×ø±ê=%4d,Y×ø±ê=%4d¡±,point.x,point.y);</P>
<P style="TEXT-INDENT: 2em">pStatus->SetPaneText(0,text);}</P>
<P style="TEXT-INDENT: 2em">CscrollView::OnMouseMove(nFlags,point); </P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">VCͨÓÿؼþ±à³ÌÖ®CProgress¿Ø¼þ</P>
<P style="TEXT-INDENT: 2em">£¨Ò»£©½ø¶ÈÌõµÄÖ÷Òª¹¦ÄÜ </P>
<P style="TEXT-INDENT: 2em">¡¡¡¡½ø¶ÈÌõ¿ØÖÆ£¨Progress Control£©Ö÷ÒªÓÃÀ´½øÐÐÊý¾Ý¶Áд¡¢Îļþ¿½±´ºÍ´ÅÅ̸ñʽµÈ²Ù×÷ʱµÄ¹¤×÷½ø¶ÈÌáʾÇé¿ö£¬Èç°²×°³ÌÐòµÈ£¬°éËæ¹¤×÷½ø¶ÈµÄ½øÕ¹£¬½ø¶ÈÌõµÄ¾ØÐÎÇøÓò´Ó×óµ½ÓÒÀûÓõ±Ç°»î¶¯´°¿Ú±êÌâÌõµÄÑÕÉ«À´²»¶ÏÌî³ä¡£</P>
<P style="TEXT-INDENT: 2em">½ø¶ÈÌõ¿ØÖÆÔÚMFCÀà¿âÖеķâ×°ÀàΪCProgressCtrl£¬Í¨³£½ö×÷ΪÊä³öÀà¿ØÖÆ£¬ËùÒÔÆä²Ù×÷Ö÷ÒªÊÇÉèÖýø¶ÈÌõµÄ·¶Î§ºÍµ±Ç°Î»Ö㬲¢²»¶ÏµØ¸üе±Ç°Î»Ö᣽ø¶ÈÌõµÄ·¶Î§ÓÃÀ´±íʾÕû¸ö²Ù×÷¹ý³ÌµÄʱ¼ä³¤¶È£¬µ±Ç°Î»ÖñíʾÍê³ÉÇé¿öµÄµ±Ç°Ê±¿Ì¡£SetRange()º¯ÊýÓÃÀ´ÉèÖ÷¶Î§£¬³õʼ·¶Î§Îª0-100£¬SetPos()º¯ÊýÓÃÀ´ÉèÖõ±Ç°Î»Ö㬳õʼֵΪ0£¬SetStep()º¯ÊýÓÃÀ´ÉèÖò½³¤£¬³õʼ²½³¤Îª10£¬StepIt()º¯ÊýÓÃÀ´°´ÕÕµ±Ç°²½³¤¸üÐÂλÖã¬OffsetPos()º¯ÊýÓÃÀ´Ö±½Ó½«µ±Ç°Î»ÖÃÒÆ¶¯Ò»¶Î¾àÀë¡£Èç¹û·¶Î§»òλÖ÷¢Éú±ä»¯£¬ÄÇô½ø¶ÈÌõ½«×Ô¶¯ÖØ»æ½ø¶ÈÇøÓòÀ´¼°Ê±·´Ó³µ±Ç°¹¤×÷µÄ½øÕ¹Çé¿ö¡£</P>
<P style="TEXT-INDENT: 2em">½ø¶ÈÌõµÄ¶ÔÏó½á¹¹</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡½ø¶ÈÌõ¿ØÖƵĽ¨Á¢·½·¨</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡CProgressCtrl &ProgressCtrl ½¨Á¢½ø¶ÈÌõ¿ØÖƶÔÏó½á¹¹</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡Create ½¨Á¢½ø¶ÈÌõ¿ØÖƶÔÏ󲢰󶨶ÔÏó</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡½ø¶ÈÌõ¿ØÖÆÀàCprogressCtrl::CreateµÄµ÷ÓøñʽÈçÏ£º</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡ÆäÖвÎÊýdwStyleÓÃÀ´È·¶¨½ø¶ÈÌõ¿ØÖƵĿØÖÆ·ç¸ñ£»²ÎÊýrectÓÃÀ´È·¶¨½ø¶ÈÌõ¿ØÖƵĴóСºÍλÖ㻲ÎÊýpParentWndÓÃÀ´È·¶¨½ø¶ÈÌõ¸¸´°¿ÚÖ¸Õ룻²ÎÊýnIDÓÃÀ´È·¶¨½ø¶ÈÌõ¿ØÖƵĿØÖÆ·ûIDÖµ¡£</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡2¡¢½ø¶ÈÌõ¿ØÖƵÄÀàÊôÐÔ</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡½ø¶ÈÌõ¿ØÖƵÄÀàÊôÐÔ°üÀ¨ÉèÖýø¶ÈÌõ×î´ó×îС¿ØÖÆ·¶Î§SetRange¡¢ÉèÖýø¶ÈÌõµ±Ç°Î»Öà SetPos¡¢ÉèÖýø¶ÈÌõµ±Ç°Î»ÖÃÆ«ÒÆÖµOffsetPosºÍÉèÖýø¶ÈÌõ¿ØÖÆÔöÁ¿ÖµSetStep¡£</P>
<P style="TEXT-INDENT: 2em">¡¡3¡¢½ø¶ÈÌõ¿ØÖƵIJÙ×÷·½·¨</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡½ø¶ÈÌõ¿ØÖƵIJÙ×÷·½·¨Ö÷ÒªÊÇʹ½ø¶ÈÌõ¿ØÖƲ¢ÖØ»æ½ø¶ÈÌõµÄStepItº¯Êý¡£</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡½ø¶ÈÌõ¿ØÖƵÄÓ¦Óü¼ÇÉʾÀý</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡1¡¢ÀûÓÃÓ¦ÓóÌÐòÏòµ¼AppWizardÉú³É»ùÓÚ¶ÔÏó¿òµÄÓ¦ÓóÌÐòCProgDlg£»</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡2¡¢ÔÚ¶Ô»°¿òÖÐÉèÖýø¶ÈÌõºÍ¾²Ì¬Îı¾¿ØÖÆ£¬ÆäID·Ö±ðΪIDC_PROGºÍIDCPERCENT£»</P>
<P style="TEXT-INDENT: 2em">ÔÚ¶Ô»°¿ò³õʼ´úÂëÖÐÔö¼Ó¿ØÖƵķ¶Î§ºÍλÖãº</P>
<P style="TEXT-INDENT: 2em">¡¡¡¡ÔÚProgDlg.hÖÐÉèÖÃÁ½¸öÊý¾Ý³ÉÔ±£¬ÓÃÀ´±íʾ½ø¶ÈÌõµÄ×î´óÖµºÍ²½³¤£º</P>
<P style="TEXT-INDENT: 2em">//ProgDlg.h</P>
<P style="TEXT-INDENT: 2em">class CProgDlg:public Cdialog</P>
<P style="TEXT-INDENT: 2em">{ £®£®£®£®£®£®//ÆäËü´úÂë</P>
<P style="TEXT-INDENT: 2em"> public:</P>
<P style="TEXT-INDENT: 2em"> int m_nMax,m_nStep;</P>
<P style="TEXT-INDENT: 2em"> £®£®£®£®£®£®¡¡//ÆäËü´úÂë</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">(2)ÔÚProgDlg.cppÖÐÉèÖóõʼ״̬</P>
<P style="TEXT-INDENT: 2em">BOOL CProgDlg::OnInitDialog()</P>
<P style="TEXT-INDENT: 2em">(3)ÍêÉÆWM_TIMERÏûÏ¢´¦Àí£¬Ê¹½ø¶ÈÌõ°´ÕÕµ±Ç°²½³¤½øÐиüУ¬Í¬Ê±Íê³É½ø¶ÈÌõµÄ°Ù·Ö±ÈÏÔʾ£º</P>
<P style="TEXT-INDENT: 2em">void CProgDlg::OnTimer(UINT nIDEvent)</P>
<P style="TEXT-INDENT: 2em">{ //TODO:Add your message handler?</P>
<P style="TEXT-INDENT: 2em"> CProgressCtrl *pProgCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROG);</P>
<P style="TEXT-INDENT: 2em"> int nPrePos=pProgCtrl->StepIt();//È¡µÃ¸üÐÂǰλÖÃ</P>
<P style="TEXT-INDENT: 2em"> char test[10];</P>
<P style="TEXT-INDENT: 2em"> int nPercent=(int)(((nPrePos+m_nStep)/m_nMax*100+0.5);</P>
<P style="TEXT-INDENT: 2em"> wsprintf(test,?%d%%?,nPercent);</P>
<P style="TEXT-INDENT: 2em"> GetDlgItem(IDC_PERCENT)->SetWindowText(text);</P>
<P style="TEXT-INDENT: 2em"> Cdialog::OnTimer(nIDEvent);</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">VCͨÓÿؼþ±à³ÌÖ®CList¿Ø¼þ</P>
<P style="TEXT-INDENT: 2em">£¨Ò»£©ÁÐ±í¿ØÖÆµÄÖ÷Òª¹¦ÄÜ </P>
<P style="TEXT-INDENT: 2em"> ÁÐ±í¿ØÖÆºÍÊÓ£¨List Control&View)Ö÷ÒªÓÃÀ´ÒÔ¸÷ÖÖ·½Ê½ÏÔʾһ×éÊý¾Ý¼Ç¼¹©Óû§½øÐи÷ÖÖ²Ù×÷£¬Windows98/95ÖÐ×ÊÔ´¹ÜÀíÆ÷Öеġ°²é¿´¡±±êǩϵġ°´óͼ±ê£üСͼ±ê£üÁбí£üÏêϸ×ÊÔ´¡±¾ÍÊÇÒ»¸ö·Ç³£ºÃµÄµäÐÍÓ¦Óá£ÁбíÖеļǼ¿ÉÒÔ°üÀ¨¶à¸öÊý¾ÝÏҲ¿ÉÒÔ°üÀ¨±íʾÊý¾ÝÄÚÈݵĴóСͼ±ê£¬ÓÃÀ´±íʾÊý¾Ý¼Ç¼µÄ¡¡ÁÐ±í¿ØÖÆÌṩÁ˶ÔWindowsÁÐ±í¹¦ÄܲÙ×÷µÄ»ù±¾·½·¨£¬¶øÊ¹ÓÃÁбíÊÓµÄÊÓº¯Êý¿ÉÒÔ¶ÔÁбíÊÓ½øÐи÷ÖÖ²Ù×÷£¬Í¨¹ýµ÷ÓÃÊÓ³ÉÔ±GetListCtrl»ñȡǶÔÚÁбíÊÓÄÚÁÐ±í¿ØÖÆµÄÒýÓã¨GetListCtrl& ctrlList = GetListCtrl()£©£¬¾Í¿ÉÒÔºÍÁÐ±í¿ØÖÆÒ»Ñù½øÐи÷ÖÖ²Ù×÷¡£²Ù×÷Ò»¸öÁÐ±í¿ØÖÆºÍÊӵĻù±¾·½·¨Îª£º´´½¨ÁÐ±í¿ØÖÆ£»´´½¨ÁÐ±í¿ØÖÆËùÐèÒªµÄͼÏñÁÐ±í£»ÏòÁÐ±í¿ØÖÆÌí¼Ó±íÁкͱíÏ¶ÔÁÐ±í½øÐи÷ÖÖ¿ØÖÆ£¬Ö÷Òª°üÀ¨²éÕÒ¡¢ÅÅÐò¡¢É¾³ý¡¢ÏÔʾ·½Ê½¡¢ÅÅÁз½Ê½ÒÔ¼°¸÷ÖÖÏûÏ¢´¦Àí¹¦Äܵȣ»×îºó³·ÏûÁÐ±í¿ØÖÆ¡£</P>
<P style="TEXT-INDENT: 2em">¶ÔÓÚÒ»¸öÁÐ±í¿ØÖÆ£¬Æä×îµäÐÍ×î³£ÓõÄÏÔʾ¿ØÖÆ·½Ê½Îª£º´óͼ±ê·½Ê½£¨LVS_ICON£©¡¢Ð¡Í¼±ê·½Ê½£¨LVS_SMALLICON£©¡¢ÁбíÏÔʾ·½Ê½£¨LVS_LIST£©ºÍÏêϸ×ÊÁÏ£¨¼´±¨¸æLVS_REPORT£©ÏÔʾ·½Ê½¡£Õâ¿ÉÒÔͨ¹ýÉèÖÃÆäÏÔʾ·½Ê½ÊôÐÔÀ´ÊµÏÖ¡£Òª¿ØÖÆÁбíËùÔÚ´°¿ÚµÄ·ç¸ñ£¬¿Éͨ¹ý¹¦Äܺ¯ÊýGetWindowLongºÍSetWindowLongÀ´ÊµÏÖ£¬Òª¿ØÖÆÁбíͼ±êµÄ¶ÔÆë·½Ê½£¬¿Éͨ¹ýÉèÖÃÁÐ±í´°¿ÚµÄ·ç¸ñLVS_ALIGNTOP»òLVS_ALIGNLEFTÀ´ÊµÏÖ£¬</P>
<P style="TEXT-INDENT: 2em">£¨¶þ£©ÁÐ±í¿ØÖÆµÄ¶ÔÏó½á¹¹</P>
<P style="TEXT-INDENT: 2em">1¡¢ÁÐ±í¿ØÖÆµÄ½¨Á¢·½·¨</P>
<P style="TEXT-INDENT: 2em">CListCtrl£¦listCtrl ¶¨ÒåÁбí¶ÔÏóµÄ½á¹¹</P>
<P style="TEXT-INDENT: 2em">Create ½¨Á¢ÁÐ±í¿ØÖÆ²¢°ó¶¨¶ÔÏó</P>
<P style="TEXT-INDENT: 2em">ÁÐ±í¿ØÖÆCListCtrl::CreateµÄµ÷ÓøñʽÈçÏ£º</P>
<P style="TEXT-INDENT: 2em">BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );</P>
<P style="TEXT-INDENT: 2em">ÆäÖвÎÊýdwStyleÓÃÀ´È·¶¨ÁÐ±í¿ØÖÆµÄ·ç¸ñ£»rectÓÃÀ´È·¶¨ÁÐ±í¿ØÖÆµÄ´óСºÍλÖã»pParentWndÓÃÀ´È·¶¨ÁÐ±í¿ØÖÆµÄ¸¸´°¿Ú£¬Í¨³£ÊÇÒ»¸ö¶Ô»°¿ò£»nIDÓÃÀ´È·¶¨ÁÐ±í¿ØÖÆµÄ±êʶ¡£ÆäÖÐÁÐ±í¿ØÖÆµÄ·ç¸ñ¿ÉÒÔÊÇÏÂÁÐÖµµÄ×éºÏ£º</P>
<P style="TEXT-INDENT: 2em">LVS_ALIGNLEFT ÓÃÀ´È·¶¨±íÏîµÄ´óСͼ±êÒÔ×ó¶ÔÆë·½Ê½ÏÔʾ£»</P>
<P style="TEXT-INDENT: 2em">LVS_ALIGNTOP ÓÃÀ´È·¶¨±íÏîµÄ´óСͼ±êÒÔ¶¥¶ÔÆë·½Ê½ÏÔʾ£»</P>
<P style="TEXT-INDENT: 2em">LVS_AUTOARRANGE ÓÃÀ´È·¶¨±íÏîµÄ´óÐ