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 對象。
以上所述就是本文的全體內容了,願望年夜家可以或許愛好。