vc++ 怎么查看listctrl有多少行,以及多少列??
RTRT需要得到listctrl中被使用的行数,请教各位大大已经向listctrl中导入数据了,想自动获取listctrl中被使用的行数,与列数。。求各位大大指教...
RTRT 需要得到listctrl中被使用的行数,请教各位大大
已经向listctrl中导入数据了,想自动获取listctrl中被使用的行数,与列数。。求各位大大指教 展开
已经向listctrl中导入数据了,想自动获取listctrl中被使用的行数,与列数。。求各位大大指教 展开
展开全部
行数 int nItemNum = m_list.GetItemCount();
列数 int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();
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;
}
列数 int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();
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;
}
TableDI
2024-07-18 广告
2024-07-18 广告
作为上海悉息信息科技有限公司的一员,我们专注于提供高效的数据处理解决方案。对于多个文件表格的合并需求,我们通常采用专业的数据整合技术,确保数据的准确性和一致性。通过精确匹配表格字段和格式,我们能够快速、准确地将多个表格合并成一个,为用户提供...
点击进入详情页
本回答由TableDI提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询