C++ 關於MFC List Control 控件的總結。本站提示廣大學習愛好者:(C++ 關於MFC List Control 控件的總結)文章只能為提供參考,不一定能成為您想要的結果。以下是C++ 關於MFC List Control 控件的總結正文
1\在開辟項目時,應用到了 listcontrol 控件,就一些成績,做一下備注,以備今後應用
(1) 給list項目 刪除一切的項目 DeleteAllItems();
(2) 給list項目 添加一個列 .InsertColumn(0, _T("編號"));
(3)給list a項目 設置列的寬度 .SetColumnWidth(0, 50);
(4) 在添加項目之前 可使用 .SetRedraw(false); 來制止 重畫,如許可以進步效力.當添加完成後,可以 應用 .SetRedraw(true); 從新啟用重畫
(5) 添加項目: m_List_IpList.InsertItem(3, _T("4"), 3);
第1個參數是 行數, 假如放在第0行,就寫為0 .這裡的號必需是一個公道的號,不公道的號,會湧現毛病
第2個參數是 行的題目
第3個參數是 對應的 顯示圖標 號,前面會講到,假如不應用,就設置為 -1
(6)關於非 report項目來說,第 (5)條便可以了,然則關於 Report 款式,還須要添加一些其它列的信息,可使用 SetItemText(0, 1, _T("192.168.1.4")); 來添加其它的內容
(7) 可使用 SetItemData() 來在對應的行中,保留一些主要的數據信息.用於法式處置
(8) 關於行高的調劑 調劑行高的辦法有多個,然則建議應用Cimagelist 來調理
設置CListCtrl的行高沒有函數接口,可以經由過程自繪來完成,然則比擬費事。有一個比擬簡略的辦法是經由過程應用一個空白的圖象將行撐起來,使其高度產生變更。示例以下:
例如:
CImageList m_image; m_image.Create(1,24,ILC_COLOR32,1,0); m_listInfo.SetImageList(&m_image, LVSIL_SMALL);
(9 ) 關於字體的設置,我們可使用SetFont函數來完成。以修正CListView的字體為例,在OnInitialUpdate函數中拔出列之前挪用SetFontSelf函數(該函數自界說,以下示例所示)。起首創立一個字體,然後挪用SetFont停止設置。須要留意的是,在加入時須要delete 失落創立的字體,防止內存洩漏。
//設置字體和年夜小 void CMyListView::SetFontSelf(int nHeight, LPCTSTR lpszFacename) { //先刪除原有字體 if(m_font != NULL) delete m_font; m_font = new CFont; //創立字體 m_font->CreateFont( nHeight, // nHeight 0, // nWidth 0, // nEscapement 0, // nOrientation FW_NORMAL, // nWeight FALSE, // bItalic FALSE, // bUnderline 0, // cStrikeOut ANSI_CHARSET, // nCharSet OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily lpszFacename); // lpszFacename //設置字體 CListCtrl &theCtrl = GetListCtrl(); //獲得掌握權,援用變量 theCtrl.SetFont(m_font, TRUE); }
(10) 點擊表頭時停止歸類排序
體系經由過程發送LVM_SORTITEMS新聞來處置歸類成績,在該新聞的處置函數中須要挪用一個回調函數,這個回調函數須要我們來設計,以完成分歧的歸類辦法。回調函數原型以下:
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
針對上述回調函數,有以下幾點須要弄清晰:
① 關於參數lparam1和lparam2,分離為CListCtrl的兩行數據,是用於比擬的對象。經由過程CListCtrl的成員函數SetItemData來設置,該函數原型:
int SetItemData(int nIndex, DWORD_PTR dwItemData )
其第一個參數為行號,第二個參數指清楚明了該行對應的參數。參數dwItemData 平日設為一行參數的數組,如: pData[2][2] = {{1, 3},{2, 3}}; 每次應用pData[i]作為dwItemData。
② 關於參數lParamSort,用於指明列項,即第幾列。該參數和回調函數一同經由過程CListCtrl的成員函數SortItems來設置,其函數原型為:
BOOL SortItems( PFNLVCOMPARE pfnCompare,DWORD_PTR dwData )
參數 pfnCompare 為回調函數進口地址, 參數dwData 為列項。
③ SetItemData在初始拔出數據時停止挪用來設置,SortItems則在點擊列表頭時呼應的新聞處置函數中停止設置。
示例以下:
//初始化列表視圖控件 BOOL CDataAnalysis::InitListCtl() { //其他處置,包含設置作風,拔出列等等 //拔出行 for(int i=0; i<LineNum; i++) { //要將char*轉換為wchar_t* mbstowcs_s(&converted, wStr, 30, m_analysis[i].Date, _TRUNCATE); m_listAnalysis.InsertItem(i, wStr); //日期 mbstowcs_s(&converted, wStr, 30, m_analysis[i].Time, _TRUNCATE); m_listAnalysis.SetItemText(i, 1, wStr); //時光 mbstowcs_s(&converted, wStr, 30, m_analysis[i].ID, _TRUNCATE); m_listAnalysis.SetItemText(i, 2, wStr); //ID m_listAnalysis.SetItemText(i, 3, m_analysis[i].lpszEvent); //事宜 //設置回調函數的參數 m_listAnalysis.SetItemData(i, (LPARAM)(m_analysis+i)); } return TRUE; } void CDataAnalysis::OnHdnItemclickAnalysisList(NMHDR *pNMHDR, LRESULT *pResult) { LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR); // TODO: Add your control notification handler code here //設置回調函數的參數和進口地址 m_listAnalysis.SortItems(SortFunc, phdr->iItem); *pResult = 0; } //排序的回調函數 int CALLBACK SortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { int result; //前往值 //兩行的參數,用於比擬 ANALYSISFORMAT* pAnalysis1 = (ANALYSISFORMAT*)lParam1; ANALYSISFORMAT* pAnalysis2 = (ANALYSISFORMAT*)lParam2; //排序 switch(lParamSort) { case 0: //日期 result = strcmp(pAnalysis1->Date, pAnalysis2->Date); break; case 1: //時光 result = strcmp(pAnalysis1->Time, pAnalysis2->Time); break; case 2: //ID result = strcmp(pAnalysis1->ID, pAnalysis2->ID); break; case 3: //事宜 result = wcscmp(pAnalysis1->lpszEvent, pAnalysis2->lpszEvent); break; default: break; } return result; }
關於若何應用圖標的辦法
須要起首將 list control 控件綁定一個 imagelist 項目
辦法以下
CImageList m_image; m_image.Create(IDB_IP_BITMAP, 16, 1, RGB(255, 255, 0)); m_List_IpList.SetImageList(&m_image, LVSIL_SMALL); m_image.Detach(); //這一句話 異常的主要,假如沒有這句話, 圖標不會顯示
前兩句的意思就是 樹立一個 CImagelist 項目
個中 第二句 在VB6.0上 能夠不存在, 在 VS2012中 可使用
就是直接加載 位圖資本到 圖像列表
在將圖像列表綁定到須要顯示的項目後, 要履行一次 Detach() 函數
目標: 挪用此功效分別圖象列表從 CImageList 對象。
以上所述就是本文的全體內容了,願望年夜家可以或許愛好。