您的位置:首页 > 其它

MFC学习笔记之:ListCtrl控件使用详解

2013-08-24 13:42 489 查看
1、
ListCtrl
添加左键单击(NM_CLICK)函数(这个很重要)

2、
ListCtrl
风格设置(一般是网格)
一般listctrl默认view风格为report,一般在OnInitDialog函数中:

LONG m_lStyle;

m_lStyle = GetWindowLong( m_list.m_hWnd , GWL_STYLE);//获取当前窗口style

m_lStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)

m_lStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)

//m_lStyle |= LVS_SHOWSELALWAYS;//一直选中item

m_list.SetExtendedStyle( m_lStyle );//设置扩展风格

3、
插入数据

一般在OnInitDialog函数中:

//m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );

//插入列

m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );

int nRow = m_list.InsertItem(0, "11");//插入行

m_list.InsertItem(1,"12");

m_list.SetItemText(nRow, 1, "jacky");//设置数据

m_list.SetItemText(nRow+1, 1, "James");

4、
得到listctrl中所有行的checkbox的状态

OnNMClickList1函数中:
方法一:
m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);

CString
str;

for(int
i=0; i<m_list.GetItemCount();
i++)

{

if(
m_list.GetItemState(i,
LVIS_SELECTED) == LVIS_SELECTED ||
m_list.GetCheck(i))

{

str.Format(_T("第%d行的checkbox为选中状态"),
i+1);

AfxMessageBox(str);

}
}
方法二:

POSITION
pos = m_list.GetFirstSelectedItemPosition();

CString
str;

if (pos ==
NULL)

TRACE0("No items were selected!/n");

else

{

while (pos)

{

int
nItem = m_list.GetNextSelectedItem(pos);

str.Format(_T("选中了第%d行"),
nItem+1);

AfxMessageBox(str);

}

}

5、
删除所有列(即清空)

while ( m_list.DeleteColumn (0));

6、
得到单击的listctrl的行列号


// 方法一:

DWORD dwPos =
GetMessagePos(); //返回表示屏幕坐标下光标位置的长整数值

CPoint point(
LOWORD(dwPos),
HIWORD(dwPos) );

m_list.ScreenToClient(&point);
//把屏幕上指定点的屏幕坐标转换成用户坐标

LVHITTESTINFO lvinfo;

lvinfo.pt =
point;

lvinfo.flags =
LVHT_ABOVE;

int nItem =
m_list.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);

}

7、
右键点击listctrl的item弹出菜单

在资源里画菜单
添加listctrl控件的NM_RCLICK消息相应函数
//右键单击的函数
void
CListCtrlDlg::OnNMRclickList1(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: