程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++ 關於MFC List Control 控件的總結

C++ 關於MFC List Control 控件的總結

編輯:關於C++

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 對象。

以上所述就是本文的全體內容了,願望年夜家可以或許愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved