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;
}
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;
}
相关文章推荐
- MFC学习笔记之:ListCtrl控件使用详解
- ListCtrl使用详解——我的表格控件学习历程
- 学习笔记:Tab Bar 控件使用详解
- 学习笔记:Tab Bar 控件使用详解
- Atlas学习笔记:使用UpdatePanel控件需注意的问题
- 孙鑫VC学习笔记:第四讲 MFC消息映射机制和CDC类的使用
- block学习笔记——详解和使用
- 第97讲:使用SBT开发Akka第一个案例环境搭建详解学习笔记
- Spring学习笔记1之IOC详解尽量使用注解以及java代码
- C#学习笔记:控件BackColor属性与ForeColor的使用方法
- MFC学习笔记——CDialog(创建对话框类和添加控件变量)
- MFC中Tab控件的使用详解
- MVC学习笔记八:WebGrid控件的高级使用
- 马哥linux学习笔记:sed工具使用详解
- MFC学习之CTreeCtrl控件的使用
- C#学习笔记__容器控件的使用
- MFC学习笔记3 Windows编程基础--DialogBox、回调、消息、控件
- MFC 控件使用笔记
- VS2013MFC单文档工程学习笔记五 - 控件移动
- MFC学习笔记整理:001_VC6按钮控件的重绘