乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      list實用技巧

       3D建模仿真 2014-09-10
      1、禁止拖動表頭
       重載OnNotify消息響應(yīng)函數(shù),屏蔽兩個消息通知碼:HDN_BEGINTRACKWHDN_DIVIDERDBLCLICKW。示例如下:
      1. BOOL CXXXX::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)  
      2. {  
      3.     // TODO: Add your specialized code here and/or call the base class   
      4.     //屏蔽兩個消息通知碼,使得禁止拖動List表頭   
      5.     NMHEADER* pNMHeader = (NMHEADER*)lParam;  
      6.     if(((pNMHeader->hdr.code == HDN_BEGINTRACKW) |   
      7.              (pNMHeader->hdr.code == HDN_DIVIDERDBLCLICKW)))  
      8.     {  
      9.         *pResult = TRUE;  
      10.         return TRUE;  
      11.     }  
      12.   
      13.     return CDialog::OnNotify(wParam, lParam, pResult);  
      14. }  

      2、虛擬列表技術(shù)
      給一個鏈接,介紹的比較詳細:http://hi.baidu.com/qi_xian/blog/item/929b04ce27d02c0592457ef8.html

       

             當(dāng)數(shù)據(jù)量大時,使用InsertItem插入數(shù)據(jù)的過程是很漫長的。這時我們有兩個方法來解決該問題:一是使用CListCtrl的虛擬列表技術(shù),二是采用分頁顯示的方法。對于虛擬列表技術(shù),上述鏈接中的文章講的很詳細,我用過它的比較簡單的方法,后來改用了分頁方法。

             使用虛擬列表技術(shù),有三點需要搞清楚:

      使用虛擬技術(shù)時,需要將CListCtrl控件的Owner Data屬性設(shè)置為ture。

      給虛擬列表添加元素時,不需要使用InserItem函數(shù),通過調(diào)用SetItemCount設(shè)置數(shù)據(jù)總個數(shù),然后由系統(tǒng)產(chǎn)生不同的消息,在相應(yīng)的消息響應(yīng)函數(shù)中完成插入工作。

      虛擬列表向父窗口發(fā)送的消息有三種: ⑴ 當(dāng)它需要數(shù)據(jù)時,發(fā)送LVN_GETDISPINFO消息; ⑵ 當(dāng)用戶試圖查找某個元素時,發(fā)送LVN_ODFINDITEM消息; ⑶當(dāng)需要緩沖數(shù)據(jù)時,發(fā)送 LVN_ODCACHEHINT消息。    

              當(dāng)我們使用LVN_GETDISPINFO 的消息處理函數(shù)來插入元素時,必須首先檢查列表請求的是什么數(shù)據(jù)(如LVIF_TEXT、LVIF_IMAGE等),然后插入不同的子項。示例如下:

      1. void CDataAnalysis::OnLvnGetdispinfoAnalysisList(NMHDR *pNMHDR, LRESULT *pResult)  
      2. {  
      3.     NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);  
      4.     // TODO: Add your control notification handler code here   
      5.     LV_ITEM* pItem= &(pDispInfo)->item;  
      6.     int iItemIndex= pItem->iItem;  
      7.     size_t converted = 0;  
      8.     wchar_t wStr[30];            //Unicode字符串   
      9.     if (pItem->mask & LVIF_TEXT) //字符串緩沖區(qū)有效   
      10.     {  
      11.         switch(pItem->iSubItem)  
      12.         {  
      13.         case 0: //填充數(shù)據(jù)項的名字,xxxxx表示要填充的字符   
      14.             mbstowcs_s(&converted, wStr, 30, xxxxxx, _TRUNCATE);  
      15.             lstrcpy(pItem->pszText,wStr);  
      16.             break;  
      17.         case 1: //填充子項1   
      18.             mbstowcs_s(&converted, wStr, 30, xxxxxx, _TRUNCATE);  
      19.             lstrcpy(pItem->pszText,wStr);  
      20.             break;  
      21.         case 2: //填充子項2   
      22.             mbstowcs_s(&converted, wStr, 30, xxxxxx, _TRUNCATE);  
      23.             lstrcpy(pItem->pszText,wStr);  
      24.             break;  
      25.         case 3: //填充子項3   
      26.             lstrcpy(pItem->pszText,xxxxxx);  
      27.             break;  
      28.         }  
      29.     }  
      30.   
      31.     *pResult = 0;  
      32. }  

      3、點擊表頭時進行歸類排序

      系統(tǒng)通過發(fā)送LVM_SORTITEMS消息來處理歸類問題,在該消息的處理函數(shù)中需要調(diào)用一個回調(diào)函數(shù),這個回調(diào)函數(shù)需要我們來設(shè)計,以完成不同的歸類方法?;卣{(diào)函數(shù)原型如下:

       

                            int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)

                針對上述回調(diào)函數(shù),有以下幾點需要搞清楚:

      對于參數(shù)lparam1和lparam2,分別為CListCtrl的兩行數(shù)據(jù),是用于比較的對象。通過CListCtrl的成員函數(shù)SetItemData來設(shè)置,該函數(shù)原型:

                           int SetItemData(int nIndex,  DWORD_PTR dwItemData )

      其第一個參數(shù)為行號,第二個參數(shù)指明了該行對應(yīng)的參數(shù)。參數(shù)dwItemData 通常設(shè)為一行參數(shù)的數(shù)組,如: pData[2][2] = {{1, 3},{2, 3}}; 每次使用pData[i]作為dwItemData。

      對于參數(shù)lParamSort,用于指明列項,即第幾列。該參數(shù)和回調(diào)函數(shù)一同通過CListCtrl的成員函數(shù)SortItems來設(shè)置,其函數(shù)原型為:

                          BOOL SortItems( PFNLVCOMPARE pfnCompare,DWORD_PTR dwData )

      參數(shù) pfnCompare 為回調(diào)函數(shù)入口地址, 參數(shù)dwData 為列項。

      ③ SetItemData在初始插入數(shù)據(jù)時進行調(diào)用來設(shè)置,SortItems則在點擊列表頭時響應(yīng)的消息處理函數(shù)中進行設(shè)置。

      示例如下:

      1. //初始化列表視圖控件   
      2. BOOL CDataAnalysis::InitListCtl()  
      3. {  
      4.     //其他處理,包括設(shè)置風(fēng)格,插入列等等   
      5.     //插入行   
      6.     for(int i=0; i<LineNum; i++)  
      7.     {  
      8.         //要將char*轉(zhuǎn)換為wchar_t*   
      9.         mbstowcs_s(&converted, wStr, 30, m_analysis[i].Date, _TRUNCATE);  
      10.         m_listAnalysis.InsertItem(i, wStr);                             //日期   
      11.         mbstowcs_s(&converted, wStr, 30, m_analysis[i].Time, _TRUNCATE);  
      12.         m_listAnalysis.SetItemText(i, 1, wStr);                         //時間   
      13.         mbstowcs_s(&converted, wStr, 30, m_analysis[i].ID, _TRUNCATE);  
      14.         m_listAnalysis.SetItemText(i, 2, wStr);                         //ID   
      15.         m_listAnalysis.SetItemText(i, 3, m_analysis[i].lpszEvent);      //事件   
      16.   
      17.         //設(shè)置回調(diào)函數(shù)的參數(shù)   
      18.         m_listAnalysis.SetItemData(i, (LPARAM)(m_analysis+i));  
      19.     }  
      20.   
      21.     return TRUE;  
      22. }  
      23. void CDataAnalysis::OnHdnItemclickAnalysisList(NMHDR *pNMHDR, LRESULT *pResult)  
      24. {  
      25.     LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);  
      26.     // TODO: Add your control notification handler code here   
      27.   
      28.     //設(shè)置回調(diào)函數(shù)的參數(shù)和入口地址   
      29.     m_listAnalysis.SortItems(SortFunc, phdr->iItem);  
      30.   
      31.     *pResult = 0;  
      32. }  
      33. //排序的回調(diào)函數(shù)   
      34. int CALLBACK SortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)  
      35. {  
      36.     int result;     //返回值   
      37.   
      38.     //兩行的參數(shù),用于比較   
      39.     ANALYSISFORMAT* pAnalysis1 = (ANALYSISFORMAT*)lParam1;  
      40.     ANALYSISFORMAT* pAnalysis2 = (ANALYSISFORMAT*)lParam2;  
      41.   
      42.     //排序   
      43.     switch(lParamSort)  
      44.     {  
      45.     case 0:     //日期   
      46.         result = strcmp(pAnalysis1->Date, pAnalysis2->Date);  
      47.         break;  
      48.     case 1:     //時間   
      49.         result = strcmp(pAnalysis1->Time, pAnalysis2->Time);  
      50.         break;  
      51.     case 2:     //ID   
      52.         result = strcmp(pAnalysis1->ID, pAnalysis2->ID);  
      53.         break;  
      54.     case 3:     //事件   
      55.         result = wcscmp(pAnalysis1->lpszEvent, pAnalysis2->lpszEvent);  
      56.         break;  
      57.     default:  
      58.         break;  
      59.     }  
      60.   
      61.     return result;  
      62. }  

       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多