MFCListControl控件用法_第1頁
MFCListControl控件用法_第2頁
MFCListControl控件用法_第3頁
MFCListControl控件用法_第4頁
MFCListControl控件用法_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、MFC ListCo ntrol控件用法開發(fā)環(huán)境:visual studio 20081、新建一個基于對話框的MFC應(yīng)用程序。在對話框上拖放一個listcontrol控件和一個button控件,給listcontrol 控件添加一個名為m_Storeltems的變量。添加 button的點擊響應(yīng)函數(shù)。void CDepartmentStoreDlg:OnBnClickedNewitem()/ TODO:在此添加控件通知處理程序代碼srand(unsigned)time(NULL);TCHAR strNumber20;這里不要定義為 char或者CString 類型,不然后面 Ivltem.ps

2、zText 會報錯。int number1 = rand() % 100;int number2 = rand() % 100;wsprintf(strNumber,_T("% d-%d"), numberl, number2);LVITEM lvltem;lvltem.mask = LVIF_TEXT;lvltem.iltem = 0;lvltem.iSubltem = 0;lvltem.pszText = strNumber;m_Storeltems.lnsertltem (&l vltem);運行效果如下,效果相當于listbox控件,就是一個列表,一行一行的

3、:現(xiàn)在設(shè)置為報表視圖,顯示成表格形式。在初始化函數(shù)里添加:BOOL CDepartmentStoreDlg:OnlnitDialog()CDialog:OnlnitDialog();/ TODO:在此添加額外的初始化代碼m_Storeltems.SetView(LVS_REPORT);如果在屬性里面設(shè)置了listview 的 view 是 report,這里就沒必要了,默認的是iconLVCOLUMN lvColumn;IvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; /掩碼設(shè)置了 fmt 值、顯示列標題和指定寬度IvColumn.fmt =

4、 LVCFMT_LEFT; /設(shè)置作對其模式IvColumn.cx = 120;/設(shè)置標題的寬度為120個像素設(shè)置標題(列名)IvColumn.pszText = _T("Full Name"); /m_Storeltems.lnsertColumn(0, & IvColumn); /添加列,索引為 0IvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 100;lvColumn.pszText = _T("Profession

5、");m_Storeltems.lnsertColumn(1, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 80;lvColumn.pszText = _T("Fav Sport");m_Storeltems.lnsertColumn(2, & lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; lvColumn.fmt

6、 = LVCFMT_LEFT;lvColumn.cx = 75;lvColumn.pszText = _T("Hobby");m_StoreItems.InsertColumn(3, & lvColumn);r? department StoreFull NameProfessionFav SportHobbyNew Item下面給報表添加點實際的內(nèi)容。繼續(xù)在初始化函數(shù)里添加:LVITEM Ivltem;int nltem;Ivltem.mask = LVIF_TEXT;這里的掩碼設(shè)置一定要注意,因為item和column的掩碼值很像,例如LVIF_TEXT和LVC

7、F_TEXT,I對應(yīng)的item,C對應(yīng)的column,不然的話會顯示不出來的,這個地方害死 我了,因為有插件自動補全代碼,補全后沒注意看,結(jié)果沒有對應(yīng),郁悶了好一會IvItem.iItem = 0;/行號(索引,從 0開始),報表相當于二維數(shù)組的模式,添加行內(nèi)容時要指定行號和列 號Ivltem.iSubltem = 0;/ 列號(索引,從 0 開始)Ivltem.pszText = _T("Sandra C. Anschwitz");/內(nèi)容nltem = m_StoreItems.InsertItem(&lvltem);插入這一行,返回行號(索引)m_Storelt

8、ems.SetltemText(nltem, 1, _T("Singer");/設(shè)置行索引(行號)和列索引(列號)的值 m_Storeltems.SetltemText(nltem, 2, _T("HandBall");m_Storeltems.SetltemText(nltem, 3, _T("Beach");Ivltem.mask = LVIF_TEXT;Ivltem.iltem = 1;Ivltem.iSubltem = 0;lvItem.pszText = _T("Roger A. Miller");nlt

9、em = m_StoreItems.InsertItem (&l vltem);m_StoreItems.SetItemText(nItem, 1, _T("Footballer");m_StoreItems.SetItemText(nItem, 2, _T("Tennis");m_StoreItems.SetItemText(nItem, 3, _T("Teaching"); lvltem.mask = LVIF_TEXT;lvltem.iltem = 2;lvltem.iSubltem = 0;lvItem.pszText

10、 = _T("Marie-Julie W. Gross");nltem = m_StoreItems.InsertItem (&l vltem);m_StoreItems.SetItemText(nItem, 1, _T("Student");m_StoreItems.SetItemText(nItem, 2, _T("Boxing"); m_StoreItems.SetItemText(nItem, 3, _T("Programming"); lvltem.mask = LVIF_TEXT;lvltem.

11、iltem = 3;lvltem.iSubltem = 0;lvItem.pszText = _T("Ella Pius Roger");nltem = m_Storeltems.lnsertltem (&l vltem);m_Storeltems.SetltemText(nltem, 1, _T("Architect");m_Storeltems.SetltemText(nltem, 2, _T("Ping-Pong");m_StoreItems.SetItemText(nItem, 3, _T("Songo&qu

12、ot;);Department StoreFuU fJameProfessionFav SportHobbySandra U Ansctiwitz Roger A. Milter Marie-Julie W. Gross Ella Pius RogerSinger Footballer Student ArchitectHandBalTennisBoxingPing-PongBeachTeaching Pragra rnming SongoNew Item中途小結(jié):在報表視圖中,要做的主要有下面幾步:1) 確保當前視圖為報表視圖,在屬性窗口設(shè)置view或者在代碼中設(shè)置為 view模式2)添加列

13、:用到的數(shù)據(jù)結(jié)構(gòu)是 LVCOLUMN (就是list view column, 對應(yīng)的掩碼也是 LVCF_,list viewcolumn format)3)添加行:用到的數(shù)據(jù)結(jié)構(gòu)是 LVITEM (list view item, 對應(yīng)的掩碼是 LVIF_,list view item format)添加行的時候先添加第一個元素,即行索引為nltem,列索引為0,然后Insertltem ,返回當前行的索弓I,之后就是設(shè)置該行的其他元素了,指定行、列索引和設(shè)置值即可。4) 刪除行:BOOL Deleteltem(int nltem) ;刪除指定的索引為 nltem的行內(nèi)容。有時候我們會先選中某

14、 行,然后刪除,這個時候需要用到函數(shù)int GetNextltem(int nltem, int nFlags);從指定的索引nltem(不包括該索引,如果要包括該行的話,設(shè)置nltem -1即可)開始尋找滿足nFlags條件的Item,成功則返回找到的Item的索引(如果有多個,則返回第一個),失敗返回-1.這樣的話如果要刪除選中的某行,則可以這樣實現(xiàn) m_Storeltems.Deleteltem(m_Storeltems.GetNextltem(-1 ,L VNI_SELECTED);(建議設(shè)置擴展風格時,把整行選中設(shè)置進來 this->m_Storeltems.SetExtend

15、edStyle( LVS_EX_FULLROWSELECT);這樣選中的時候就是一行了,否則會是一格)。如果要刪除多行選中的,則可以用下面的代碼:int nlndex;donlndex = m_StoreItems.GetNextItem(-1 ,L VNI_SELECTED);m_StoreItems.DeleteItem(nIndex); while (nlndex != -1);這里添加一點調(diào)整列寬的,以下代碼可供參考(摘自 CSDN):void CMyListView:AutoAdjustColumnWidth()CHeaderCtrl*pHeaderCtrl=m_pListCtrl-

16、>GetHeaderCtrl();m_pListCtrl->SetRedraw(FALSE);/ 防止閃爍pHeaderCtrl->SetRedraw(FALSE);/ 防止閃爍intnColumnCount=pHeaderCtrl->GetltemCount(); /獲取列數(shù)for (int i=0; ivnColumnCount; i+)m_pListCtrl->SetColumnWidth(i, LVSCW_AUTOSIZE);intnColumnWidth=m_pListCtrl->GetColumnWidth(i);m_pListCtrl->

17、SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER);intnHeaderWidth=m_pListCtrl->GetColumnWidth(i);m_pListCtrl->SetColumnWidth(i, max(nColumnWidth, nHeaderWidth)+10);pHeaderCtrl->SetRedraw (T RUE);/此處開啟刷新,避免閃爍m_pListCtrl->SetRedraw (TRUE);pHeaderCtrl->lnvalidate(); /Update Window to redraw.pH

18、eaderCtrl->UpdateWindow();下面就開始設(shè)置圖片了。新建兩個bitmap 資源,大小為16*16 , ID分別為IDB_UP和IDB_LOSANGE,初始化函數(shù)CDepartmentStoreDlg:OnlnitDialog()改為如下:m_Storeltems.SetView(LVS_REPORT);LVCOLUMN lvColumn;CBitmap bmpUP, bmpLosange;bmpUP.LoadBitmap(IDB_UP);bmpLosange.LoadBitmap(IDB_LOSANGE);CImageList *ImgHeaders = new C

19、ImageList();ImgHeaders->Create(16, 16, ILC_MASK, 1, 1);ImgHeaders->Add(&bmpUP, RGB(0, 0, 0);ImgHeaders->Add(&bmpLosange, RGB(0, 0, 0);m_Storeltems.SetlmageList(lmgHeaders, LVSIL_SMALL);IvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_IMAGE;IvColumn.fmt = LVCFMT_LEFT | LVCFMT

20、_IMAGE;IvColumn.cx = 120;IvColumn.pszText = _T("Full Name");IvColumn.ilmage = 0;m_Storeltems.lnsertColumn(0, & IvColumn);IvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;IvColumn.fmt = LVCFMT_LEFT;IvColumn.cx = 100;IvColumn.pszText = _T("Profession");m_Storeltems.lnsertColum

21、n(1, &IvColumn);IvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_IMAGE;IvColumn.fmt = LVCFMT_LEFT | LVCFMT_IMAGE;IvColumn.ilmage = 1;IvColumn.cx = 80;IvColumn.pszText = _T("Fav Sport");m_StoreItems.InsertCoIumn(2, & IvColumn);IvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDT

22、H;IvColumn.fmt = LVCFMT_LEFT;IvColumn.cx = 75;IvColumn.pszText = _T("Hobby");m_StoreItems.InsertCoIumn(3, & IvColumn);V Department StoreNew ItemLargeSmailDetailsClose Ful NameProfession Fav .4Hobby繼續(xù)完善。給 CDepartmentStoreDIg 類添加變量:ClmageList m_Smalllmg;CImageList m_LargeImg;函數(shù):DWORD Get

23、ViewType(void);void SetViewType(DWORD dwViewType);cpp中的實現(xiàn):DWORD CDepartmentStoreDlg:GetViewType(void)return (GetStyle() & LVS_TYPEMASK);void CDepartmentStoreDlg:SetViewType(DWORD dwViewType)DWORD dwCurType;HWND hWnd;hWnd = this->m_Storeltems;GetSafeHwnd();dwCurType = :GetWindowLong(hWnd, GWL_

24、STYLE);dwCurType &=LVS_TYPEMASK;dwViewType |= dwCurType;:SetWindowLong(hWnd, GWL_STYLE, dwViewType);窗體上添加Large、Small、List、Details四個button,添加鼠標點擊事件的響應(yīng)函數(shù),如下:void CDepartmentStoreDlg:OnBnClickedLarge()/ TODO:在此添加控件通知處理程序代碼SetViewType(LVSCON);void CDepartmentStoreDlg:OnBnClickedSmall()/ TODO:在此添加控件通

25、知處理程序代碼if( GetViewType() != LVS_SMALLICON)SetViewType(LVS_SMALLICON);void CDepartmentStoreDlg:OnBnClickedDetail()/ TODO:在此添加控件通知處理程序代碼if( GetViewType() != LVS_REPORT)SetViewType(LVS_REPORT);void CDepartmentStoreDlg:OnBnClickedList()/ TODO:在此添加控件通知處理程序代碼 if( GetViewType() != LVS_LIST)SetViewType(LVS_

26、LIST);窗體上的New Item按鈕調(diào)用的窗體如下,用來添加數(shù)據(jù),給窗體創(chuàng)建類,并給控件添加相應(yīng)變量E)epa it men ts to re - New RentOK添加 2個位圖資源,屬性為 ID:IDB_Larging Weight:162 Height:32,ID:IDB_Smalling Weight:80Height:16180®:-r*j.-.v,_. .v.-.WiLT?- ;i l :.門 4-l-X;-:-'I 1 i H I'Ahi t f t!jrI初始化函數(shù)代碼:m_Storeltems.SetView(LVS_REPORT);LVCOL

27、UMN lvColumn;IvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;IvColumn.fmt = LVCFMT_CENTER;IvColumn.cx = 60;IvColumn.pszText = _T("Item #");this->m_Storeltems.lnsertColumn(0, & lvColumn);IvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; lvColumn.fmt = LVCFMT_LEFT;IvColumn.cx = 100

28、;IvColumn.pszText = _T("Category");this->m_StoreItems.InsertCoIumn(1, & lvColumn);IvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;IvColumn.fmt = LVCFMT LEFT;IvColumn.cx = 160;IvColumn.pszText = _T("ltem Name");this->m_Storeltems.lnsertColumn(2, & IvColumn);IvColum

29、n.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 80;lvColumn.pszText = _T("Size");this->m_Storeltems.lnsertColumn(3, & IvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_RIGHT;lvColumn.cx = 60;lvColumn.pszText = _T(&q

30、uot;Unit Price");this->m_Storeltems.lnsertColumn(4, & IvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_RIGHT;lvColumn.cx = 30;IvColumn.pszText = _T("Qty");this->m_StoreItems.InsertCoIumn(5, & IvColumn);設(shè)置this->m_Storeltems.SetExtendedS

31、tyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);擴展風格m_Smalllmg.Create(IDB_Smalling, 16, 1, RGB(255, 255, 255);m_Largelmg.Create(IDB_Larging, 32, 1, RGB(255, 255, 245);m_StoreItems.SetImageList(&m _Smalllmg, LVSIL_SMALL);m_Storeltems.SetlmageList(&m _Largelmg, LVSIL_NORMAL);New Item 按鈕的響應(yīng)函數(shù)為(將添

32、加 item 的類include 進來) void CDepartmentStoreDlg:OnBnClickedNewitem()/ TODO:在此添加控件通知處理程序代碼CNewItemDlg dig;/ 這個是添加新數(shù)據(jù)的窗體類srand(unsigned)time(NULL);TCHAR strNumber20;int numberl = rand() % 100;int number2 = rand() % 100;wsprintf(strNumber,_T("% d-%d"), numberl, number2); dlg.m_ItemNumber = strN

33、umber;if (dlg.DoModal()LVITEM lvItem;int nItem;int imgNbr;if( dlg.m_Category = "Babies")imgNbr = 0;else if( dlg.m_Category = "Teens")imgNbr = 1;else if( dlg.m_Category = "Women")XAsuenollud)-pIn-LU(Dl-u)x(DHLU(Dl-a>S.SLU(Dl-(D01sleAszlX(ood±±urllllr6-p -寸-LU(Dl-u)x(DJ_LU(Dl-a>S.SLU(Dl-(DoCDleAszlx(DNSLU(Dl-ILUd)-pco-LU(Dl-u)x(DHLU(Dl-a>S.SLU(Dl-(DoCDleAszl_(DLueNe(Dl-led)-p 7 -LU(Dl-u)x(DHLU(Dl-a>S.SLU(Dl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論