MFC列表控制元件(ListControl)
阿新 • • 發佈:2018-11-06
轉載:https://blog.csdn.net/lsh_2013/article/details/44624239
1. CListCtrl 樣式及設定
[cpp] view plain copy print ?- LVS_ICON: 每個item顯示大圖示
- LVS_SMALLICON: 每個item顯示小圖示
- LVS_LIST: 顯示一列帶有小圖示的item
- LVS_REPORT: 顯示item詳細資料
- 如windows資源管理器,“檢視”標籤下的“大圖示,小圖示,列表,詳細資料”
- LONG lStyle;
- lStyle=GetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE); //獲取當前視窗style
- lStyle &= ~LVS_TYPEMASK; //清除顯示方式位
- lStyle |= LVS_REPORT; //設定style
- SetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE, lStyle); //設定style
LVS_ICON: 每個item顯示大圖示 LVS_SMALLICON: 每個item顯示小圖示 LVS_LIST: 顯示一列帶有小圖示的item LVS_REPORT: 顯示item詳細資料 如windows資源管理器,“檢視”標籤下的“大圖示,小圖示,列表,詳細資料” LONG lStyle; lStyle=GetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE); //獲取當前視窗style lStyle &= ~LVS_TYPEMASK; //清除顯示方式位 lStyle |= LVS_REPORT; //設定style SetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE, lStyle); //設定style
2. 擴充套件樣式設定
[cpp] view plain copy print ?- DWORD dwStyle = m_ListCtrl.GetExtendedStyle(); //獲取當前擴充套件樣式
- dwStyle |= LVS_EX_FULLROWSELECT; //選中某行使整行高亮(report風格時)
- dwStyle |= LVS_EX_GRIDLINES; //網格線(report風格時)
- dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控制元件
- m_ListCtrl.SetExtendedStyle(dwStyle); //設定擴充套件風格
DWORD dwStyle = m_ListCtrl.GetExtendedStyle(); //獲取當前擴充套件樣式
dwStyle |= LVS_EX_FULLROWSELECT; //選中某行使整行高亮(report風格時)
dwStyle |= LVS_EX_GRIDLINES; //網格線(report風格時)
dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控制元件
m_ListCtrl.SetExtendedStyle(dwStyle); //設定擴充套件風格
3. 資料插入
[cpp] view plain copy print ?- m_ListCtrl.InsertColumn(0,“名稱”,LVCFMT_LEFT,50); //插入列
- m_ListCtrl.InsertColumn(1,”備註”,LVCFMT_LEFT,50);
- //直接插入:
- int nRow=m_ListCtrl.InsertItem(0, “VC++”); //插入行
- m_ListCtrl.SetItemText(nRow,1,”Visual C++ 6.0”); //設定資料
- //LVITEM 結構插入:
- LVITEM item={0};
- item.iItem=0; //行號
- item.mask=LVIF_TEXT; /*LVIF_IMAGE支援圖示*/;
- item.cchTextMax=15;//插入字串長度
- item.pszText=”Visual C++ 6.0”;
- int nRow=m_ListCtrl.InsertItem(&item);
- m_ListCtrl.SetItemText(nRow,1,”Visual C++ 6.0”);
m_ListCtrl.InsertColumn(0,"名稱",LVCFMT_LEFT,50); //插入列
m_ListCtrl.InsertColumn(1,"備註",LVCFMT_LEFT,50);
//直接插入:
int nRow=m_ListCtrl.InsertItem(0, "VC++"); //插入行
m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0"); //設定資料
//LVITEM 結構插入:
LVITEM item={0};
item.iItem=0; //行號
item.mask=LVIF_TEXT; /*LVIF_IMAGE支援圖示*/;
item.cchTextMax=15;//插入字串長度
item.pszText="Visual C++ 6.0";
int nRow=m_ListCtrl.InsertItem(&item);
m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0");
4. 一直選中Item
[cpp] view plain copy print ?- 選中style中的 Show selection always,
- 或者新增擴充套件樣式 LVS_SHOWSELALWAYS
選中style中的 Show selection always,
或者新增擴充套件樣式 LVS_SHOWSELALWAYS
5. 選中和取消選中Item
[cpp] view plain copy print ?- int nIndex = 0;
- //選中
- m_ListCtrl.SetItemState(nIndex,LVIS_SELECTED|
- LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
- //取消選中
- m_ListCtrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);
int nIndex = 0;
//選中
m_ListCtrl.SetItemState(nIndex,LVIS_SELECTED|
LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
//取消選中
m_ListCtrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);
6. 得到CListCtrl中所有行的checkbox的狀態
[cpp] view plain copy print ?- CString str;
- for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
- {
- if(m_ListCtrl.GetItemState(i, LVIS_SELECTED)==
- LVIS_SELECTED || m_ListCtrl.GetCheck(i))
- {
- str.Format(_T(”第%d行的checkbox為選中狀態”), i);
- AfxMessageBox(str);
- }
- }
CString str;
for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
{
if(m_ListCtrl.GetItemState(i, LVIS_SELECTED)==
LVIS_SELECTED || m_ListCtrl.GetCheck(i))
{
str.Format(_T("第%d行的checkbox為選中狀態"), i);
AfxMessageBox(str);
}
}
7. 得到CListCtrl中所有選中行的序號
[cpp] view plain copy print ?- //方法一:
- CString str;
- for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
- {
- if(m_ListCtrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
- {
- str.Format(_T(”選中了第%d行”), i);
- AfxMessageBox(str);
- }
- }
- //方法二:
- POSITION pos=m_ListCtrl.GetFirstSelectedItemPosition();
- if(pos==NULL)
- TRACE0(”No items were selected!/n”);
- else
- {
- while(pos)
- {
- int nItem=m_ListCtrl.GetNextSelectedItem(pos);
- TRACE1(”Item %d was selected!/n”, nItem);
- //新增其他操作
- }
- }
//方法一:
CString str;
for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
{
if(m_ListCtrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
{
str.Format(_T("選中了第%d行"), i);
AfxMessageBox(str);
}
}
//方法二:
POSITION pos=m_ListCtrl.GetFirstSelectedItemPosition();
if(pos==NULL)
TRACE0("No items were selected!/n");
else
{
while(pos)
{
int nItem=m_ListCtrl.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!/n", nItem);
//新增其他操作
}
}
8. 得到item的資訊
[cpp] view plain copy print ?- TCHAR szBuf[1024];
- LVITEM lvi;
- lvi.iItem = nItemIndex;
- lvi.iSubItem = 0;
- lvi.mask = LVIF_TEXT;
- lvi.pszText = szBuf;
- lvi.cchTextMax = 1024;
- m_ListCtrl.GetItem(&lvi);
TCHAR szBuf[1024];
LVITEM lvi;
lvi.iItem = nItemIndex;
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
lvi.pszText = szBuf;
lvi.cchTextMax = 1024;
m_ListCtrl.GetItem(&lvi);
9. 得到CListCtrl的所有列的header字串內容
[cpp] view plain copy print ?- LVCOLUMN lvcol;
- char str[256];
- int nColNum;
- CString strColumnName[3];//假如有3列
- nColNum = 0;
- lvcol.mask = LVCF_TEXT;
- lvcol.pszText = str;
- lvcol.cchTextMax = 256;
- while(m_list.GetColumn(nColNum, &lvcol))
- {
- strColumnName[nColNum] = lvcol.pszText;
- nColNum++;
- }
LVCOLUMN lvcol;
char str[256];
int nColNum;
CString strColumnName[3];//假如有3列
nColNum = 0;
lvcol.mask = LVCF_TEXT;
lvcol.pszText = str;
lvcol.cchTextMax = 256;
while(m_list.GetColumn(nColNum, &lvcol))
{
strColumnName[nColNum] = lvcol.pszText;
nColNum++;
}
10. 使CListCtrl中一項可見,即滾動滾動條
[cpp] view plain copy print ?- m_ListCtrl.EnsureVisible(i, FALSE);
m_ListCtrl.EnsureVisible(i, FALSE);
11. 得到CListCtrl列數
[cpp] view plain copy print ?- int nHeadNum=m_ListCtrl.GetHeaderCtrl()->GetItemCount();
int nHeadNum=m_ListCtrl.GetHeaderCtrl()->GetItemCount();
12. 刪除所有列
[cpp] view plain copy print ?- 方法一:
- while(m_ListCtrl.DeleteColumn(0))
- //因為你刪除了第一列後,後面的列會依次向上移動。
- 方法二:
- int nColumns = 3; //列數
- for(int i=nColumns-1; i>=0; i–)
- m_ListCtrl.DeleteColumn(i);
方法一:
while(m_ListCtrl.DeleteColumn(0))
//因為你刪除了第一列後,後面的列會依次向上移動。
方法二:
int nColumns = 3; //列數
for(int i=nColumns-1; i>=0; i--)
m_ListCtrl.DeleteColumn(i);
13. 得到單擊的CListCtrl的行列號
[cpp] view plain copy print ?- 新增listctrl控制元件的NM_CLICK訊息相應函式
- void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- //方法一:
- DWORD dwPos=GetMessagePos();
- CPoint point( LOWORD(dwPos), HIWORD(dwPos));
- m_ListCtrl.ScreenToClient(&point);
- LVHITTESTINFO lvinfo;
- lvinfo.pt=point;
- lvinfo.flags=LVHT_ABOVE;
- int nItem=m_ListCtrl.SubItemHitTest(&lvinfo);
- if(nItem!=-1)
- {
- CString strtemp;
- strtemp.Format(”單擊的是第%d行第%d列”,
- lvinfo.iItem, lvinfo.iSubItem);
- AfxMessageBox(strtemp);
- }
- // 方法二:
- NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
- if(pNMListView->iItem!=-1)
- {
- CString strtemp;
- strtemp.Format(”單擊的是第%d行第%d列”,
- pNMListView->iItem, pNMListView->iSubItem);
- AfxMessageBox(strtemp);
- }
- *pResult = 0;
- }
新增listctrl控制元件的NM_CLICK訊息相應函式
void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
//方法一:
DWORD dwPos=GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos));
m_ListCtrl.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt=point;
lvinfo.flags=LVHT_ABOVE;
int nItem=m_ListCtrl.SubItemHitTest(&lvinfo);
if(nItem!=-1)
{
CString strtemp;
strtemp.Format("單擊的是第%d行第%d列",
lvinfo.iItem, lvinfo.iSubItem);
AfxMessageBox(strtemp);
}
// 方法二:
NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem!=-1)
{
CString strtemp;
strtemp.Format("單擊的是第%d行第%d列",
pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
*pResult = 0;
}
14. 判斷是否點選在CListCtrl的checkbox上
[cpp] view plain copy print ?- 新增listctrl控制元件的NM_CLICK訊息相應函式
- void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- DWORD dwPos=GetMessagePos();
- CPoint point(LOWORD(dwPos), HIWORD(dwPos));
- m_ListCtrl.ScreenToClient(&point);
- LVHITTESTINFO lvinfo;
- lvinfo.pt=point;
- lvinfo.flags=LVHT_ABOVE;
- UINT nFlag;
- int nItem=m_ListCtrl.HitTest(point, &nFlag);
- //判斷是否點在checkbox上
- if(nFlag==LVHT_ONITEMSTATEICON)
- {
- AfxMessageBox(”點在listctrl的checkbox上”);
- }
- *pResult = 0;
- }
新增listctrl控制元件的NM_CLICK訊息相應函式
void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
DWORD dwPos=GetMessagePos();
CPoint point(LOWORD(dwPos), HIWORD(dwPos));
m_ListCtrl.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt=point;
lvinfo.flags=LVHT_ABOVE;
UINT nFlag;
int nItem=m_ListCtrl.HitTest(point, &nFlag);
//判斷是否點在checkbox上
if(nFlag==LVHT_ONITEMSTATEICON)
{
AfxMessageBox("點在listctrl的checkbox上");
}
*pResult = 0;
}
15. 右鍵點選CListCtrl的item彈出選單
[cpp] view plain copy print ?- 新增CListCtrl控制元件的NM_RCLICK訊息相應函式
- void CMyDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
- if(pNMListView->iItem!=-1)
- {
- DWORD dwPos = GetMessagePos();
- CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
- CMenu menu;
- VERIFY( menu.LoadMenu( IDR_MENU1 ) );
- CMenu* popup = menu.GetSubMenu(0);
- ASSERT( popup != NULL );
- popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
- point.x, point.y, this );
- }
- *pResult = 0;
- }
新增CListCtrl控制元件的NM_RCLICK訊息相應函式
void CMyDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem!=-1)
{
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
CMenu menu;
VERIFY( menu.LoadMenu( IDR_MENU1 ) );
CMenu* popup = menu.GetSubMenu(0);
ASSERT( popup != NULL );
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, this );
}
*pResult = 0;
}
16. CListCtrl進行大資料量更新時,避免閃爍
[cpp] view plain copy print ?- m_ListCtrl.SetRedraw(FALSE);
- //更新內容
- m_ListCtrl.SetRedraw(TRUE);
- m_ListCtrl.Invalidate();
- m_ListCtrl.UpdateWindow();
m_ListCtrl.SetRedraw(FALSE);
//更新內容
m_ListCtrl.SetRedraw(TRUE);
m_ListCtrl.Invalidate();
m_ListCtrl.UpdateWindow();
//或者參考 地址
17.舉例
[cpp] view plain copy print ?- BOOL CImageDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // Add “About…” menu item to system menu.
- // IDM_ABOUTBOX must be in the system command range.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- DWORD dwStyle = m_list.GetExtendedStyle(); //獲取當前擴充套件樣式
- dwStyle |= LVS_EX_FULLROWSELECT; //選中某行使整行高亮(report風格時)
- dwStyle |= LVS_EX_GRIDLINES; //網格線(report風格時)
- m_list.SetExtendedStyle(dwStyle); //設定擴充套件風格
- m_list.InsertColumn(0,”ID”);
- m_list.InsertColumn(1,”位置(X)”);
- m_list.InsertColumn(2,”位置(Y)”);
- m_list.InsertColumn(3,”旋轉角度(Angle)”);
- m_list.InsertColumn(4,”匹配分數(Score)”);
- CRect rect;
- m_list.GetClientRect(rect);
- m_list.SetColumnWidth(0,rect.Width()/5);
- m_list.SetColumnWidth(1,rect.Width()/5);
- m_list.SetColumnWidth(2,rect.Width()/5);
- m_list.SetColumnWidth(3,rect.Width()/5);
- m_list.SetColumnWidth(4,rect.Width()/5);</span>
- // Set the icon for this dialog. The framework does this automatically
- // when the application’s main window is not a dialog
- SetIcon(m_hIcon, TRUE);// Set big icon
- SetIcon(m_hIcon, FALSE);// Set small icon
- // TODO: Add extra initialization here
- return TRUE; // return TRUE unless you set the focus to a control
- }
BOOL CImageDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
DWORD dwStyle = m_list.GetExtendedStyle(); //獲取當前擴充套件樣式
dwStyle |= LVS_EX_FULLROWSELECT; //選中某行使整行高亮(report風格時)
dwStyle |= LVS_EX_GRIDLINES; //網格線(report風格時)
m_list.SetExtendedStyle(dwStyle); //設定擴充套件風格
m_list.InsertColumn(0,"ID");
m_list.InsertColumn(1,"位置(X)");
m_list.InsertColumn(2,"位置(Y)");
m_list.InsertColumn(3,"旋轉角度(Angle)");
m_list.InsertColumn(4,"匹配分數(Score)");
CRect rect;
m_list.GetClientRect(rect);
m_list.SetColumnWidth(0,rect.Width()/5);
m_list.SetColumnWidth(1,rect.Width()/5);
m_list.SetColumnWidth(2,rect.Width()/5);
m_list.SetColumnWidth(3,rect.Width()/5);
m_list.SetColumnWidth(4,rect.Width()/5);</span>
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);// Set big icon
SetIcon(m_hIcon, FALSE);// Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
以上是本人做專案知識記錄,部分內容來自網路,本著知識共享原則,不侵犯任何人權益!
1. CListCtrl 樣式及設定
[cpp] view plain copy print ?- LVS_ICON: 每個item顯示大圖示
- LVS_SMALLICON: 每個item顯示小圖示
- LVS_LIST: 顯示一列帶有小圖示的item
- LVS_REPORT: 顯示item詳細資料
- 如windows資源管理器,“檢視”標籤下的“大圖示,小圖示,列表,詳細資料”
- LONG lStyle;
- lStyle=GetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE); //獲取當前視窗style
- lStyle &= ~LVS_TYPEMASK; //清除顯示方式位
- lStyle |= LVS_REPORT; //設定style
- SetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE, lStyle); //設定style
LVS_ICON: 每個item顯示大圖示
LVS_SMALLICON: 每個item顯示小圖示
LVS_LIST: 顯示一列帶有小圖示的item
LVS_REPORT: 顯示item詳細資料
如windows資源管理器,“檢視”標籤下的“大圖示,小圖示,列表,詳細資料”
LONG lStyle;
lStyle=GetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE); //獲取當前視窗style
lStyle &= ~LVS_TYPEMASK; //清除顯示方式位
lStyle |= LVS_REPORT; //設定style
SetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE, lStyle); //設定style
2. 擴充套件樣式設定
[cpp] view plain copy print ?- DWORD dwStyle = m_ListCtrl.GetExtendedStyle(); //獲取當前擴充套件樣式
- dwStyle |= LVS_EX_FULLROWSELECT; //選中某行使整行高亮(report風格時)
- dwStyle |= LVS_EX_GRIDLINES; //網格線(report風格時)
- dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控制元件
- m_ListCtrl.SetExtendedStyle(dwStyle); //設定擴充套件風格
DWORD dwStyle = m_ListCtrl.GetExtendedStyle(); //獲取當前擴充套件樣式
dwStyle |= LVS_EX_FULLROWSELECT; //選中某行使整行高亮(report風格時)
dwStyle |= LVS_EX_GRIDLINES; //網格線(report風格時)
dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控制元件
m_ListCtrl.SetExtendedStyle(dwStyle); //設定擴充套件風格
3. 資料插入
[cpp] view plain copy print ?- m_ListCtrl.InsertColumn(0,“名稱”,LVCFMT_LEFT,50); //插入列
- m_ListCtrl.InsertColumn(1,”備註”,LVCFMT_LEFT,50);
- //直接插入:
- int nRow=m_ListCtrl.InsertItem(0, “VC++”); //插入行
- m_ListCtrl.SetItemText(nRow,1,”Visual C++ 6.0”); //設定資料
- //LVITEM 結構插入:
- LVITEM item={0};
- item.iItem=0; //行號
- item.mask=LVIF_TEXT; /*LVIF_IMAGE支援圖示*/;
- item.cchTextMax=15;//插入字串長度
- item.pszText=”Visual C++ 6.0”;
- int nRow=m_ListCtrl.InsertItem(&item);
- m_ListCtrl.SetItemText(nRow,1,”Visual C++ 6.0”);
m_ListCtrl.InsertColumn(0,"名稱",LVCFMT_LEFT,50); //插入列
m_ListCtrl.InsertColumn(1,"備註",LVCFMT_LEFT,50);
//直接插入:
int nRow=m_ListCtrl.InsertItem(0, "VC++"); //插入行
m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0"); //設定資料
//LVITEM 結構插入:
LVITEM item={0};
item.iItem=0; //行號
item.mask=LVIF_TEXT; /*LVIF_IMAGE支援圖示*/;
item.cchTextMax=15;//插入字串長度
item.pszText="Visual C++ 6.0";
int nRow=m_ListCtrl.InsertItem(&item);
m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0");
4. 一直選中Item
[cpp] view plain copy print ?- 選中style中的 Show selection always,
- 或者新增擴充套件樣式 LVS_SHOWSELALWAYS
選中style中的 Show selection always,
或者新增擴充套件樣式 LVS_SHOWSELALWAYS
5. 選中和取消選中Item
[cpp] view plain copy print ?- int nIndex = 0;
- //選中
- m_ListCtrl.SetItemState(nIndex,LVIS_SELECTED|
- LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
- //取消選中
- m_ListCtrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);
int nIndex = 0;
//選中
m_ListCtrl.SetItemState(nIndex,LVIS_SELECTED|
LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
//取消選中
m_ListCtrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);
6. 得到CListCtrl中所有行的checkbox的狀態
[cpp] view plain copy print ?- CString str;
- for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
- {
- if(m_ListCtrl.GetItemState(i, LVIS_SELECTED)==
- LVIS_SELECTED || m_ListCtrl.GetCheck(i))
- {
- str.Format(_T(”第%d行的checkbox為選中狀態”), i);
- AfxMessageBox(str);
- }
- }
CString str;
for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
{
if(m_ListCtrl.GetItemState(i, LVIS_SELECTED)==
LVIS_SELECTED || m_ListCtrl.GetCheck(i))
{
str.Format(_T("第%d行的checkbox為選中狀態"), i);
AfxMessageBox(str);
}
}
7. 得到CListCtrl中所有選中行的序號
[cpp] view plain copy print ?- //方法一:
- CString str;
- for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
- {
- if(m_ListCtrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
- {
- str.Format(_T(”選中了第%d行”), i);
- AfxMessageBox(str);
- }
- }
- //方法二:
- POSITION pos=m_ListCtrl.GetFirstSelectedItemPosition();
- if(pos==NULL)
- TRACE0(”No items were selected!/n”);
- else
- {
- while(pos)
- {
- int nItem=m_ListCtrl.GetNextSelectedItem(pos);
- TRACE1(”Item %d was selected!/n”, nItem);
- //新增其他操作
- }
- }
//方法一:
CString str;
for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
{
if(m_ListCtrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
{
str.Format(_T("選中了第%d行"), i);
AfxMessageBox(str);
}
}
//方法二:
POSITION pos=m_ListCtrl.GetFirstSelectedItemPosition();
if(pos==NULL)
TRACE0("No items were selected!/n");
else
{
while(pos)
{
int nItem=m_ListCtrl.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!/n", nItem);
//新增其他操作
}
}
8. 得到item的資訊
[cpp] view plain copy print ?- TCHAR szBuf[1024];
- LVITEM lvi;
- lvi.iItem = nItemIndex;
- lvi.iSubItem = 0;
- lvi.mask = LVIF_TEXT;
- lvi.pszText = szBuf;
- lvi.cchTextMax = 1024;
- m_ListCtrl.GetItem(&lvi);
TCHAR szBuf[1024];
LVITEM lvi;
lvi.iItem = nItemIndex;
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
lvi.pszText = szBuf;
lvi.cchTextMax = 1024;
m_ListCtrl.GetItem(&lvi);
9. 得到CListCtrl的所有列的header字串內容
[cpp] view plain copy print ?- LVCOLUMN lvcol;
- char str[256];
- int nColNum;
- CString strColumnName[3];//假如有3列
- nColNum = 0;
- lvcol.mask = LVCF_TEXT;
- lvcol.pszText = str;
- lvcol.cchTextMax = 256;
- while(m_list.GetColumn(nColNum, &lvcol))
- {
- strColumnName[nColNum] = lvcol.pszText;
- nColNum++;
- }
LVCOLUMN lvcol;
char str[256];
int nColNum;
CString strColumnName[3];//假如有3列
nColNum = 0;
lvcol.mask = LVCF_TEXT;
lvcol.pszText = str;
lvcol.cchTextMax = 256;
while(m_list.GetColumn(nColNum, &lvcol))
{
strColumnName[nColNum] = lvcol.pszText;
nColNum++;
}