鏁呮葷粨浜嗕竴涓嬭嚜宸辯殑浣跨敤緇忛獙錛屼互渚涘弬鑰冧嬌鐢ㄣ?/p>
銆銆鍏堟敞鏄庝竴涓嬶紝榪欓噷錛屾垜浠敤m_listctrl鏉ヨ〃紺轟竴涓狢ListCtrl鐨勭被瀵硅薄錛?/p>
鐒跺悗榪欓噷鎴戜滑鐨凩istCtrl閮芥槸report褰㈠紡錛岃嚦浜庡叾浠栫殑濡備粈涔堝ぇ鍥炬爣錛屽皬鍥炬爣
鐨勬殏鏃朵笉璁詫紝姣曠珶report鏄ぇ浼楄瘽鐨勪嬌鐢ㄣ傚叾嬈★紝鎴戜滑榪欓噷鐢ㄦ潯嬈句竴錛屾潯嬈句簩
鏉ユ弿榪扮涓鐐癸紝絎簩鐐癸紝榪欎釜鏄弬鐓с奅ffective C++銆嬬殑鍙硶錛屼亢瑙夊緱榪欎箞
鍙瘮杈僀OOL :)
銆鏉℃涓錛氳緗甃istCtrl鐨勯鏍?/p>
銆鍦–SDN涓婂父甯哥湅鍒版湁浜洪棶鎬庝箞璁劇疆椋庢牸鐨勶紝浠栦滑ListCtrl鐨勬牱瀛愭槸涓涓垪琛?/p>
錛屾湁妯潯鍜岀珫鏉″垎鐣岀嚎錛岀劧鍚庨変腑涓琛岋紝瑕佹暣涓琛岄兘閫変腑錛岃屼笉鏄彧鏈夋煇涓鍒?/p>
琚変腑錛岀瓑絳夛紝榪欓噷緇欎竴涓瘮杈冨叏闈㈢殑璁劇疆鏂規(guī)硶銆?/p>
//鑾峰緱鍘熸湁椋庢牸
DWORD dwStyle = ::GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);
dwStyle &= ~(LVS_TYPEMASK);
dwStyle &= ~(LVS_EDITLABELS);
//璁劇疆鏂伴鏍?br> SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,
dwStyle,|LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);
//璁劇疆鎵╁睍椋庢牸
DWORD styles =
LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES;
ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles,
styles );
鍏朵腑LVS_EX_FULLROWSELECT銆灝辨槸鍓嶉潰璇村緱鏁磋閫変腑
LVS_EX_GRIDLINES銆緗戞牸綰匡紙鍙傜敤涓巖eport椋庢牸鐨刲istctrl錛?/p>
LVS_EX_CHECKBOXES銆鍓嶉潰鍔犱釜checkbox
pListCtrl->SetExtendedStyle( m_listctrl.GetExtendedStyle()
|LVS_EX_SUBITEMIMAGES);
榪欎篃鏄竴涓緢閲嶈鐨勫睘鎬э紝榪欐牱鐨勮瘽錛屽彲浠ュ湪鍒楄〃涓姞ICON錛岃寰梬indows鐨?/p>
浠誨姟綆$悊鍣ㄥ悧錛屼綘鎯沖仛寰楅偅鏍鳳紝榪欎釜灞炴т篃瑕佸姞鍝︼紝榪欎釜鎴戜互鍚庝細璁茬殑锝?/p>
鏉℃浜岋細鍔犲叆鍒楀ご
銆銆榪欐槸涓涓瘮杈冨疄璐ㄧ殑涓滆タ錛岀粰鍒楄〃妗嗗垎鍒楋紝鐒跺悗鍔犱笂鍒楀ご
銆銆浠g爜璇磋瘽錛屾潵浜?/p>
銆銆TCHAR rgtsz[2][10] = {_T("鍒楀ご1"), _T("鍒楀ご2")};
LV_COLUMN lvcolumn;
CRect rect;
m_listctrl.GetWindowRect(&rect);
for(int i=0;i<2;i++)
{
銆lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT
銆銆銆銆銆銆銆銆 | LVCF_WIDTH | LVCF_ORDER;
銆lvcolumn.fmt = LVCFMT_LEFT;
銆lvcolumn.pszText = rgtsz[i];
銆 lvcolumn.iSubItem = i;
銆lvcolumn.iOrder = i;
銆 if(i==0)
銆{
銆銆銆lvcolumn.cx = rect.Width()*3/5 ;
銆 }
銆 else
銆銆lvcolumn.cx = rect.Width()*2/5;
銆銆銆銆
銆銆銆m_listctrl.InsertColumn(i, &lvcolumn);
銆}
榪欐槸鎻掑叆涓ゅ垪鐨勫仛娉曪紝浣犺鎻掑叆20鍒楋紵錛熼殢渚夸綘錛屼緷鏍風(fēng)敾钁姦锝烇綖
銆lvcolumn.mask 涓偅涓猰ask鍙互鏈夊悇縐嶅睘鎬э紝鍏蜂綋鍘葷湅msdn鍚э紝
鏉℃涓夛細鎶婅褰曪紝鎻掑叆鍒楄〃妗嗕腑
銆int nIndex = m_listctrl.GetItemCount();
LV_ITEM lvitemAdd = {0};
lvitemAdd.mask = LVIF_TEXT;
lvitemAdd.iItem = nIndex ;
lvitemAdd.iSubItem = 0;
lvitemAdd.pszText =_T("姣涙瘺1");;
if (m_listctrl.InsertItem(&lvitemAdd) != -1)
{
LV_ITEM lvitem = {0};
lvitem.mask = LVIF_TEXT;
lvitem.iItem = nIndex ;
lvitem.iSubItem = 1;
lvitem.pszText =_T("姣涙瘺2");
m_listctrl.SetItem(&lvitem);
}
nIndex 鏄綋鍓嶇殑琛屾暟錛岀劧鍚庢妸鏂扮殑涓琛岋紝鎻掑湪鏈涓嬮潰錛?/p>
鏉℃鍥涳細緇欏垪琛ㄤ腑鎻掑叆鍥炬爣
銆鍦╮eport鏍煎紡涓紝涔熻兘鎻掑叆鍥炬爣
銆緇х畫浠g爜璇磋瘽
銆m_image鏄釜CImageList瀵硅薄
銆m_image.Create(16,16, TRUE|ILC_COLOR24, 3, 1);
m_listctrl.SetImageList(&m_image,LVSIL_SMALL);
鐒跺悗璋冪敤CImageList鐨勬垚鍛樺嚱鏁癷nt CImageList::Add( HICON hIcon );
鎶奍CON鎻掑叆鍒癷magelist錛?/p>
銆鐒跺悗鍦ㄦ彃鍏ヨ褰曠殑鏃跺?/p>
銆lvitemAdd.mask = LVIF_TEXT;銆錛嶃嬨lvitemAdd.mask =
LVIF_TEXT|LVIF_IMAGE
銆鐒跺悗娣誨姞涓涓猯vitemAdd.iImage = n;
銆榪欎釜n鏄痠magelist涓殑搴忓彿錛岃〃紺烘槸鍏蜂綋鐨勫摢涓涓浘鏍囷紝list涔堬紝鍛靛懙
鏉℃浜旓細銆鎻掑叆璁板綍鏃朵嬌鐢ㄩ澶栫殑淇℃伅錛宭Param 鐨勪嬌鐢?/p>
銆銆銆鏈夋椂鍊欙紝浣犳兂瀵逛簬鏌愪竴琛岋紝鍔犲叆涓浜涢澶栫殑淇℃伅錛岄偅涔堝氨鍙互浣跨敤榪欎釜
lParam
銆銆锝嶏綋锝勶綆鏄繖涔堟弿榪扮殑Specifies the 32-bit value of the item
銆銆鎴戜笂嬈℃槸涓轟簡鍦ㄦ煇涓琛屽姞鍏ヤ竴涓俊鎭紝紿楀彛鍙ユ焺錛岀劧鍚庢槸榪欎箞鍔犵殑錛?/p>
銆銆int nIndex = m_listctrl.GetItemCount();
LV_ITEM lvitemAdd = {0};
lvitemAdd.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
lvitemAdd.iItem = nIndex ;
lvitemAdd.iSubItem = 0;
lvitemAdd.pszText =_T("姣涙瘺1");;
lvitemAdd.iImage = n;
lvitemAdd.lParam = (LPARAM)hwnd;(鏌愪釜紿楀彛鐨勭獥鍙e彞鏌?
if (m_listctrl.InsertItem(&lvitemAdd) != -1)
{
LV_ITEM lvitem = {0};
lvitem.mask = LVIF_TEXT;
lvitem.iItem = nIndex ;
lvitem.iSubItem = 1;
lvitem.pszText =_T("姣涙瘺2");
m_listctrl.SetItem(&lvitem);
}
ok錛岃繖鏄竴涓瘮杈冨叏鐨勪緥瀛愮殑錛屽張鎻捍CON錛屽張浣跨敤PARAM鐨?/p>
鏉℃鍏錛氥鐐瑰嚮鍒楄〃妗嗭紝鑾峰彇閫変腑琛屼俊鎭?/p>
銆銆鍝嶅簲NM_CLICK娑堟伅錛屽鏋滀綘鏈塎SDN錛屽彲浠ョ湅鍒幫紝鏈変笓闂ㄥ叧浜巐istview鐨?/p>
NM_CLICK鐨勪粙緇?/p>
void CMyDlg::OnItemClick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int nItem = -1;
LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR;
if(lpNMItemActivate != NULL)
{
nItem = lpNMItemActivate->iItem;
}
}
鐜板湪nItem灝辨槸鐐瑰嚮閫変腑閭h鐨刬ndex浜嗭紝鏈変簡index錛岃幏鍙栭偅琛岀殑淇℃伅榪橀毦鍚?/p>
錛?/p>
鎳掓眽璇達細闅撅紝鍥犱負浣犺繕娌¤錛屾檿錛岄偅灝辯戶緇
鏉℃涓冿細銆鏍規(guī)嵁琛岀殑index錛岃幏鍙栬琛岀殑淇℃伅
銆鐩存帴涓婁唬鐮佸惂
銆LV_ITEM lvitem = {0};
lvitem.iItem = nIndex;
lvitem.iSubItem = 0;
lvitem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
m_listctrl.GetItem(&lvitem)
榪欐牱錛屽氨鎶妌index,絎竴鍒楃殑淇℃伅鍙栧嚭鏉ヤ簡錛屽寘鎷垰鎵嶆垜浠姞鍏ョ殑ICON,鍜岄偅涓?/p>
棰濆淇℃伅錛堢獥鍙e彞鏌勶級錛?/p>
姣斿鎴戣鑾峰彇紿楀彛鍙ユ焺錛屽氨鍙互hwnd = (HWND)lvitem.lParam;
mask 鐢ㄦ潵鎸囨槑浣犳兂鑾峰彇閭d簺淇℃伅
鍏蜂綋鍙互鏌sdn涓璍VITEM Structure鐨勫畾涔夊拰CListCtrl::GetItem
鏉℃鍏細鐢ㄧ▼搴忛変腑鏌愪竴琛岋紝浣夸箣閫変腑
閫変腑涔嬨
m_listctrl.SetItemState
(nIndex,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
涓嶉変腑錛屽彇娑堥変腑涔?/p>
m_listctrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);
鏉℃涔?jié)锛氳幏鍙栧綋鍓嶆墍鏈夐変腑鐨勮錛堝閫夛級
銆銆榪欎釜錛屼亢灝辨瘮杈冩噿浜嗭紝鎶刴sdn鐨勪唬鐮佸惂錛屽弽姝e緢綆鍗?/p>
銆銆
Example
// CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem
(IDC_YOURLISTCONTROL);
ASSERT(pListCtrl != NULL);
POSITION pos = pList->GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = pList->GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
// you could do your own processing on nItem here
}
}
鏉℃鍗侊細鍒犻櫎鏉℃涔?jié)涓変腑鐨勮
銆銆榪欎釜鐩稿鍓嶉潰涔?jié)涓潯娆炬槸姣旇緝楹荤儲鐨勫Q屽洜涓哄鏋滀綘瑕佸垹闄ゅ琛岀殑璇濄傚線寰瑕佸嚭閿?/p>
銆銆姣斿錛屾垜鐜板湪瑕佸垹闄ょ0琛屽拰絎?琛岋紙鍒楄〃鐨勮搴忓垪鏄粠0寮濮嬬殑錛?/p>
銆銆閭d箞濂藉晩銆傛垜鏉ュ垹浜?/p>
銆銆m_listctrl.DeleteItem(0)
m_listctrl.DeleteItem(1)
銆銆鎭枩浣狅紝閿欎簡錛屾垜濂藉紑蹇冨晩銆錛氾級
銆銆鍥犱負浣犲垹闄ょ0琛屼互鍚庯紝涓嬮潰鐨勮浼氬線涓婄Щ錛岄偅涔堝師鏉ョ殑絎?琛屽氨鍙樻垚浜嗙0琛岋紝閭d箞浣犲啀 m_listctrl.DeleteItem(1)錛岄偅涔堝垹闄ょ殑鏄師鏉ョ殑絎紥琛岋紝鐪熼夯鐑︼紝
銆銆銆鎵浠ワ紝鍙湁浠庝笅寰涓婂垹錛屾墠鏄畨鍏ㄧ殑錛屽厛鍒犵殑錛屼笉浼氬獎鍝嶅悗闈㈢殑鎿嶄綔錛?/p>
銆銆銆銆m_listctrl.DeleteItem(1)
m_listctrl.DeleteItem(0)
銆銆浣嗘湁鏃跺欙紝鎴戜滑涔熶笉鐭ラ亾瑕佸垹闄ゅ摢浜涜錛屽彧鐭ラ亾瑕佸垹闄ら変腑鐨勯偅浜涜錛屽儚鏉℃涔?jié)涓殑閭d?/p>
銆銆銆濡傛灉鎴戜滑榪樻槸鐢?/p>
銆銆銆
POSITION pos = m_listctrl.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_listctrl.GetNextSelectedItem(pos);
銆m_listctrl.DeleteItem(nItem );
}
}
浣犲氨絳夌潃鏀跺案鍚?/p>
榪欐椂鍊欐垜浠氨瑕丅4寰蔣浜嗭紝涓鴻櫨綾蟲湪鏈塆etLastselectedItemPosition 鍜孏etPrevSelectedItem
澶氬啓涓瀵規(guī)垚鍛樺嚱鏁頒細姝誨晩銆:(
銆娌″姙娉曪紝鍔炴硶鑷繁鎯籌紝榪欓噷鏈変釜絎ㄥ姙娉?/p>
銆POSITION sSelPos = NULL;
while(sSelPos = m_listctrl.GetFirstSelectedItemPosition())
{
int nSelItem = -1;
nSelItem = m_listctrl.GetNextSelectedItem(sSelPos);
if(nSelItem >= 0 && nSelItem<m_listctrl.GetItemCount())
{
濂戒簡錛岃繖涓猲SelItem 灝辨槸鎴戜滑瑕佺殑DD
}
}
GetNextSelectedItem榪欎釜鍑芥暟錛岀湅msdn鐨勭敤娉曪紝鍏跺疄鏄繑鍥炵涓涓殑index錛岀劧鍚庤蛋鍒頒笅涓涓変腑鐨勮鍘伙紝鎵浠ヨ繖涔堝仛涔熸槸瀹夊叏鐨勶紝鍦ㄥ疄闄呬腑錛屼亢涔熸槸榪欎箞鍋氱殑錛屾祴璇曚篃閫氳繃錛屾病闂鐨?/p>
褰撶劧錛岃繕鏈変釜鍔炴硶錛屽厛閫氳繃GetFirstSelectedItemPosition鍜孏etNextSelectedItem
鏉ヨ幏鍙栨墍鏈夌殑閫変腑琛岀殑index錛岀劧鍚庢妸榪欎簺index鏀懼埌涓涓暟緇勯噷錛岀劧鍚庡啀浠庝笅寰涓婂垹
鍞夌湡楹葷儲鍟婏紝榪樿涓嶅畾鏁扮粍錛屼笉璇寸敤new鍦ㄥ爢涓婂紑鍚э紝閭d箞涓涓獀ector鎬繪槸瑕佺殑鍚э紝楹葷儲鍟?/p>
鎵浠ユ垜鏆傛椂鏄敤涓婅堪鐨勫姙娉曟潵鍒犻櫎錛屼篃渚涘ぇ瀹跺弬鑰冿紝甯屾湜鑳芥壘鍒版洿濂界殑鍔炴硶銆?/p>
濂戒簡錛屼粖澶╁氨鏆傛椂鍏堟暣鐞嗕笂榪板崄鐐廣俵istctrl鍏朵粬楂樼駭鐨勭敤娉曪紝緗戜笂璧勬枡涔熷緢澶氾紝鎴戜篃鏆傛椂涓嶆葷粨錛屼互鍚庢湁鏈轟細鍐嶈鍚с?/p>
鎼炰簡濂介暱鏃墮棿鍟婏紝瑕佺潯瑙夊幓浜嗭紝绱浜嗐錛氾級