vc++怎么查看listctrl有多少行,以及多少列

vc++怎么查看listctrl有多少行,以及多少列,第1张

行数 int nItemNum = m_listGetItemCount();

列数 int nHeadNum = m_listGetHeaderCtrl()->GetItemCount();

1、 ListCtrl添加左键单击(NM_CLICK)函数(这个很重要)。

2、 ListCtrl风格设置(一般是网格)。

一般listctrl默认view风格为report,一般在OnInitDialog函数中:

LONG m_lStyle;

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

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

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

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

m_listSetExtendedStyle( m_lStyle );//设置扩展风格

3、 插入数据

一般在OnInitDialog函数中:

//m_listInsertColumn( 0, "ID", LVCFMT_LEFT, 40 );

//插入列

m_listInsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );

int nRow = m_listInsertItem(0, "11");//插入行

m_listInsertItem(1,"12");

m_listSetItemText(nRow, 1, "jacky");//设置数据

m_listSetItemText(nRow+1, 1, "James");

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

在OnNMClickList1函数中:

方法一:

m_listSetExtendedStyle(LVS_EX_CHECKBOXES);

CString str;

for(int i=0; i<m_listGetItemCount(); i++)

{

if( m_listGetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_listGetCheck(i))

{

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

AfxMessageBox(str);

}

}

方法二:

POSITION pos = m_listGetFirstSelectedItemPosition();

CString str;

if (pos == NULL)

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

else

{

while (pos)

{

int nItem = m_listGetNextSelectedItem(pos);

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

AfxMessageBox(str);

}

}

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

while ( m_listDeleteColumn (0));

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

// 方法一:

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

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

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

LVHITTESTINFO lvinfo;

lvinfopt = point;

lvinfoflags = LVHT_ABOVE;

int nItem = m_listSubItemHitTest(&lvinfo);

if(nItem != -1)

{

CString strtemp;

strtempFormat("单击的是第%d行第%d列", lvinfoiItem, lvinfoiSubItem);

AfxMessageBox(strtemp);

}

// 方法二:

NM_LISTVIEW pNMListView = (NM_LISTVIEW)pNMHDR;

if(pNMListView->iItem != -1)

{

CString strtemp;

strtempFormat("单击的是第%d行第%d列", pNMListView->iItem, pNMListView->iSubItem);

AfxMessageBox(strtemp);

}

7、 右键点击listctrl的itemd出菜单

在资源里画菜单

添加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( menuLoadMenu( IDR_MENU1 ) );

CMenu popup = menuGetSubMenu(0); //取得被指定菜单激活的下拉式菜单或子菜单的句柄

ASSERT( popup != NULL );

popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,pointx, pointy, this ); //在指定位置显示快捷菜单,并跟踪菜单项的选择

}

pResult = 0;

}

递归获取本文件夹(包括子文件夹)中的文件:

int CountDirectory(CString path)

{

int count = 0;

CFileFind finder;

BOOL working = finderFindFile(path + "\\");

while (working)

{

working = finderFindNextFile();

if (finderIsDots())

continue;

if (finderIsDirectory())

count += CountDirectory(finderGetFilePath());

else

count++;

}

return count;

}

只获取本文件夹中的文件:

int CountDirectory(CString path)

{

int count = 0;

CFileFind finder;

BOOL working = finderFindFile(path + "\\");

while (working)

{

working = finderFindNextFile();

if (finderIsDots())

continue;

if (!finderIsDirectory())

count++;

}

return count;

}

CString strText;

CString szLine; //存储行字符

CStdioFile file;

fileOpen("tstxt",CFile::modeRead);//打开文件

//逐行读取字符串

while( fileReadString( szLine ) )

{

strText += szLine;

}

MessageBox(strText);

//关闭文件

fileClose();

设置2个计数器i和j,然后一个字符一个字符地读取文本,每读一个字符,i加1,遇到字符'\n'则表示换行,此时j++,到读取完后,就知道多少字符和行数了。但是要注意一个汉字是相当于2个字符的。

老师要求我写一个统计程序行数的程序

要求首先提示输入一个程序文件名,然后输出输入该程序的行数

以下是我写的

#include <iostreamh>

#include <fstreamh>

main()

{

int j;

char ch;

ifstream ifile;

char fn[10];

cout << "文件名";

cin >> fn;

ifileopen(fn);

if (!ifile)

{

cout << "打不开" << endl;

return 0;

}

while (ifileget(ch))

{

if (ch=='\n')

j++;

}

ifileclose();

return 1;

cout << "文件有" << j << "行" << endl;

}

还是不行啊不过我黔驴技穷了望各位大虾指点

现在这个程序编译能通过,能运行

但是运行提示我输入文件名,我输入了,程序就自动关闭结束了

我也不知道为什么

现在的错误出在读取文件我就已经不知道怎么处理了

我也不知道我后面写的判断行数的部分对不对

以上就是关于vc++ 怎么查看listctrl有多少行,以及多少列全部的内容,包括:vc++ 怎么查看listctrl有多少行,以及多少列、vc如何获取文件夹中文件个数、VC++怎么按行读写TXT文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9276846.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存