當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]1.添加表頭:  定義一個(gè)CListCtrl控件的關(guān)聯(lián)變量ListControl,在OnInitDialog()函數(shù)里面加上如下代碼?1?????////初始化界面 ?2?????ListContro

1.添加表頭:

  定義一個(gè)CListCtrl控件的關(guān)聯(lián)變量ListControl,在OnInitDialog()函數(shù)里面加上如下代碼

?1?????////初始化界面
?2?????ListControl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
?3?????LONG?lStyle;
?4?????lStyle?=?GetWindowLong(ListControl.m_hWnd,?GWL_STYLE);//獲取當(dāng)前窗口style
?5?????lStyle?&=?~LVS_TYPEMASK;?//清除顯示方式位
?6?????lStyle?|=?LVS_REPORT;?//設(shè)置style
?7?????SetWindowLong(ListControl.m_hWnd,?GWL_STYLE,?lStyle);//設(shè)置style
?8?
?9?????//添加列
10?????ListControl.InsertColumn(?0,?_T("映像名稱"),LVCFMT_CENTER,?150);//插入列
11?????ListControl.InsertColumn(1,_T("PID"),LVCFMT_CENTER,50);????????
12?????ListControl.InsertColumn(2,_T("優(yōu)先級(jí)"),LVCFMT_CENTER,100);????
13?????ListControl.InsertColumn(3,_T("線程數(shù)"),LVCFMT_CENTER,?50);

?

2.插入信息:

1?????????void?InsertData()
2?????????{
3?????????????int?nCount?=?ListControl.GetItemCount();//獲取當(dāng)前已插入的行數(shù)
4?????????????ListControl.InsertItem(nCount,?_T(""));//插入一行
5?????????????ListControl.SetItemText(nCount,?0,?iterBegin->second.strExeFile);//第一列
6?????????????ListControl.SetItemText(nCount,?1,?iterBegin->second.strPID);//第二列
7?????????????ListControl.SetItemText(nCount,?2,?iterBegin->second.strPriority);//第三列
8?????????????ListControl.SetItemText(nCount,?3,?iterBegin->second.strThreadCount);//第四列
9?????????}

3.獲取當(dāng)前選中的項(xiàng):

方法1:

????POSITION?p?=?ListControl.GetFirstSelectedItemPosition();//獲取當(dāng)前選中的行的第一行的位置
????//獲取選中的第一行的行索引
????int?nIndex?=?ListControl.GetNextSelectedItem(p);//可能多選,GetNextSelectedItem使p移動(dòng)一個(gè)位置

????//得到第index行.第2列的內(nèi)容(下標(biāo)從0開(kāi)始)
????CString?strColumn?=?ListControl.GetItemText(nIndex,1);

方法2:

1?????int?nIndex=ListControl.GetSelectionMark();//獲取選中的行
2?????CString?strPID?=ListControl.GetItemText(nIndex,?1);?//選中的行、列的值

?

?

4.獲取選中的行和列

1?void?CMFC_TestDlg::OnNMClickList2(NMHDR?*pNMHDR,?LRESULT?*pResult)
2?{
3?????LPNMLISTVIEW?pNMLV?=?reinterpret_cast(pNMHDR);
4?????m_nSelectColumn?=?pNMLV->iSubItem;//獲取選中的行
5?????m_nSelectLine?=?ListControl.GetSelectionMark();//獲取選中的列
6?}

?

5.右鍵添加菜單

  添加NM_RCLICK消息,消息響應(yīng)代碼如下:

?1?void?CMFC_TestDlg::OnNMRClickList2(NMHDR?*pNMHDR,?LRESULT?*pResult)
?2?{
?3?????CMenu?menu?,*?pSubMenu;?//定義下面要用到的cmenu對(duì)象?
?4?????menu.LoadMenu(IDR_POPMENU);?//裝載自定義的右鍵菜單?IDR_POPMENU彈出菜單的ID

?5?
?6?????//獲取第一個(gè)彈出菜單,所以第一個(gè)菜單必須有子菜單?
?7?????pSubMenu?=?menu.GetSubMenu(0);?

?8?
?9?????CPoint?oPoint;?//定義一個(gè)用于確定光標(biāo)位置的位置?
10?????GetCursorPos(?&oPoint);?//獲取當(dāng)前光標(biāo)的位置,以便使得菜單可以跟隨光標(biāo)11?
12?????pSubMenu->TrackPopupMenu?(TPM_LEFTALIGN,?oPoint.x,?oPoint.y,?this);?//顯示菜單,第四個(gè)為傳遞的參數(shù)
13?????*pResult?=?0;
    //pSubMenu->EnableMenuItem(ID_EDIT_PASTE,?MF_DISABLED?|?MF_GRAYED)禁用菜單的某項(xiàng)
14?}

?

6.列排序

  

?1?BOOL?g_bSort;//全局變量,用于標(biāo)識(shí)是按從大到小還是從小到大排序
?2?
?3?typedef?struct
?4?{
?5?????CListCtrl?*plist;//存儲(chǔ)當(dāng)前的ListCtrl指針
?6?????int?col;//存儲(chǔ)當(dāng)前選中的列
?7?}?SortList;
?8?
?9?
10?//添加LVNCOLUMNCLICK消息
11?void?CMFC_TestDlg::OnLvnColumnclickList2(NMHDR?*pNMHDR,?LRESULT?*pResult)
12?{
13?????LPNMLISTVIEW?pNMLV?=?reinterpret_cast

?

排序函數(shù):

?該函數(shù)返回-1,代表第一項(xiàng)排應(yīng)在第二項(xiàng)前面;
?返回1代表第一項(xiàng)排應(yīng)在第二項(xiàng)后面;
?返回0代表兩項(xiàng)相等。

int?CALLBACK?MylistCompare(LPARAM?lParam1,?LPARAM?lParam2,?LPARAM?lParamSort)?

{
????SortList?*?listData?=?(SortList*)lParamSort;//獲取傳入的參數(shù)
????CListCtrl*???pListCtrl??=??listData->plist;?

????CString??strItem1;
????CString??strItem2;
????strItem1???=???pListCtrl->GetItemText(lParam1,?listData->col);??
????strItem2???=???pListCtrl->GetItemText(lParam2,?listData->col);?

????USES_CONVERSION;
????char?*???s1=T2A(strItem1);??//轉(zhuǎn)換為CString為char?*
????char?*???s2=T2A(strItem2);?

????int?nResult?=?0;
????switch(listData->col)//根據(jù)選擇的列的數(shù)據(jù)類型進(jìn)行自定義排序
????{
//整形的排序
????case?1:
????case?3:
????????{
????????????int???n1?=?atoi(s1);??
????????????int???n2?=?atoi(s2);??

????????????if???(?n1?>=?n2)??
????????????{
????????????????nResult?=?1;??
????????????}

????????????else????
????????????????nResult?=?-1;??
????????}
????????break;

//字符串的排序
????case?0:
????case?2:
????????{
????????????for?(int?i?=?0;?i=?0)
????????????{
????????????????nResult?=?1;
????????????}
????????????else
????????????????nResult?=?-1;

????????}
????????break;
????}

//根據(jù)全局變量的值改變排序方法
????if?(g_bSort)
????{
????????return?nResult;
????}
????else
????{
????????return?-nResult;
????}
}

?

7.全選(CTRL+A)

?1?BOOL?CMFC_TestDlg::PreTranslateMessage(MSG*?pMsg)
?2?{
?3?????if?(pMsg->message?==?WM_KEYDOWN)
?4?????{
?5?????????if(pMsg->wParam?==?'A')
?6?????????{
?7?????????????if?(::GetKeyState(VK_CONTROL)<0)
?8?????????????{
?9?????????????????for?(int?i?=?0;?i<ListControl.GetItemCount();?i++)
10?????????????????{
11?????????????????????ListControl.SetItemState(i,LVIS_SELECTED|LVIS_FOCUSED,?LVIS_SELECTED|LVIS_FOCUSED);
12?????????????????}
13?????????????}
14?????????}
15?????}
16?????return?FALSE;
17?}

?

8.修改列的新名稱

1?????LVCOLUMN?Column;
2?????ListControl.GetColumn(0,&Column);
3?????Column.pszText=L"0列新名稱";
4?????ListControl.SetColumn(0,&Column);

?

9.可編輯狀態(tài)

(1)設(shè)置EDIT Labels的屬性為TRUE

(2)添加事件NM_DBCLICK事件

?1?????*pResult?=?0;
?2?
?3?????//雙擊事件產(chǎn)生edit控件,EditLabel會(huì)先確定list是否setFocus
?4?????POSITION?pos?=?ListControl.GetFirstSelectedItemPosition();
?5?????int?tIndex?=?ListControl.GetNextSelectedItem(pos);
?6?
?7?????if?(?tIndex?>=?0?)
?8?????{
?9?????????ListControl.SetFocus();
10?????????CEdit*?pEdit?=ListControl.EditLabel(?tIndex?);
11?????}

?

(3)添加事件LVN_ENDLABELEDIT事件

?1?????NMLVDISPINFO?*pDispInfo?=?reinterpret_cast(pNMHDR);
?2?????//?TODO:?在此添加控件通知處理程序代碼
?3?????*pResult?=?0;
?4?
?5?????CString?pName?=?pDispInfo->item.pszText;
?6?????int?tIndex?=?pDispInfo->item.iItem;
?7?????ListControl.SetFocus();
?8?
?9?????if(?(?!?pName.IsEmpty()?)?&&?tIndex?>=?0?)
10?????{
11?????????ListControl.SetItemText(?tIndex,?0,?pName);
12?????}

?

10.添加圖標(biāo):

(1)聲明:

1?????//首先聲明一個(gè)類的變量????
2?????CImageList?m_imageList;
3?????//設(shè)置ListCtrl的圖像列表
4?????m_imageList.Create(32,32,?TRUE|ILC_COLOR32,?8,?8);
5?????m_listCtrl.SetImageList(&m_imageList,?LVSIL_SMALL);

(2)獲取圖標(biāo):

1?SHFILEINFO???sfi?=?{0};
2?????SHGetFileInfo("d:\a.txt",0,&sfi,sizeof(SHFILEINFO),SHGFI_ICON);
3?????m_imageList.Add(sfi.hIcon);

?

(3)添加項(xiàng):

1?????LVITEM?lvItem;
2?????lvItem.iItem?=?m_listCtrl.GetItemCount();
3?????lvItem.iSubItem?=?0;
4?????lvItem.iImage?=m_imageList.GetImageCount()-1;//取最后一個(gè)
5?????lvItem.mask?=?LVIF_TEXT|LVIF_IMAGE;
6?????lvItem.pszText?=?_T("TEST");????
7?????m_listCtrl.InsertItem(&lvItem);

?

11.樣式設(shè)置:

(1).

  首先區(qū)分LVS_與LVS_EX_,哪些是常規(guī)樣式,哪些是擴(kuò)展樣式:能在屬性對(duì)話框里看到的樣式都是常規(guī)樣式,例如LVS_REPORT。

擴(kuò)展樣式:

LVS_EX_CHECKBOXES 您可以獲得 ListView_GetCheckState 指定項(xiàng)目的復(fù)選框的狀態(tài)。若要設(shè)置檢查狀態(tài),請(qǐng)使用 ListView_SetCheckState。如果設(shè)置了此樣式,則當(dāng)用戶單擊該復(fù)選框,或按空格鍵在列表視圖控件自動(dòng)切換復(fù)選狀態(tài)。 LVS_EX_FLATSB 扁平滾動(dòng)條
列表視圖中的啟用平面滾動(dòng)條。如果您需要更多的控制列表視圖滾動(dòng)條的外觀,您應(yīng)該操作平的滾動(dòng)欄 Api 使用直接的列表視圖滾動(dòng)條。如果更改系統(tǒng)度量,您負(fù)責(zé)調(diào)整與 FlatSB_SetScrollProp 的滾動(dòng)欄度量。有關(guān)進(jìn)一步的詳細(xì)信息請(qǐng)參閱平滾動(dòng)條。 LVS_EX_FULLROWSELECT 選擇整行
當(dāng)選擇某個(gè)項(xiàng)目時(shí),強(qiáng)調(diào)了項(xiàng)目和其所有子項(xiàng)。此樣式是僅在 LVS_REPORT 風(fēng)格結(jié)合中可用。 LVS_EX_GRIDLINES 繪制表格
顯示項(xiàng)及其子項(xiàng)周圍的網(wǎng)格線。此樣式是僅在 LVS_REPORT 風(fēng)格結(jié)合中可用 LVS_EX_HEADERDRAGDROP 報(bào)表頭可以拖拽
允許拖放的列表視圖控件中的列重新排序。此樣式是只可用于使用 LVS_REPORT 樣式的列表視圖控件。 LVS_EX_INFOTIP 將提示信息窗口的消息通知父窗口
當(dāng)列表視圖控件使用的 LVS_EX_INFOTIP 樣式時(shí),LVN_GETINFOTIP 通知代碼發(fā)送到父窗口顯示工具提示項(xiàng)之前。 LVS_EX_LABELTIP ? LVS_EX_MULTIWORKAREAS 多工作區(qū) LVS_EX_ONECLICKACTIVATE 單擊激活 LVS_EX_REGIONAL ? LVS_EX_SUBITEMIMAGES 子項(xiàng)目圖標(biāo)列表 LVS_EX_TRACKSELECT 自動(dòng)換行 LVS_EX_TWOCLICKACTIVATE 雙擊激活 LVS_EX_UNDERLINECOLD ? LVS_EX_UNDERLINEHOT

?

(2).

?? 下面弄清楚怎么設(shè)置常規(guī)樣式和擴(kuò)展樣式。

?? 設(shè)置常規(guī)樣式使用的函數(shù):GetWindowLong(僅32位下)、SetWindowLong()

?? 設(shè)置擴(kuò)展樣式使用的函數(shù):GetExtendedStyle、SetExtendedStyle

?? 示例代碼:

1?  DWORD?dwStyle=GetWindowLong(m_list.m_hWnd,GWL_STYLE);??
2?  SetWindowLong(m_list.m_hWnd,GWL_STYLE,dwStyle|LVS_REPORT);??
3?
4??? DWORD?styles=m_list.GetExtendedStyle();??
5?
6??? m_list.SetExtendedStyle(styles|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);

?

MFC ListControl技巧匯總

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉