ListView 中用GetItemCount()函数时出错,提示内存冲突!求教~~~

shark2004 2006-01-17 12:03:47
如题,单文档多视图应用程序,
ListView设置:
---------------------------------------------------------
CListCtrl& theList=GetListCtrl();
theList.SetExtendedStyle(LVS_REPORT|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
theList.ModifyStyle(LVS_TYPEMASK,LVS_REPORT&LVS_TYPEMASK);
----------------------------------------------------------------
ListView列:
---------------------------------------------------------------
CListCtrl& theList=GetListCtrl();
theList.InsertColumn(0,"ID",LVCFMT_LEFT,30);
theList.InsertColumn(1,"日期",LVCFMT_LEFT,60);
theList.InsertColumn(2,"时间",LVCFMT_LEFT,60);
theList.InsertColumn(3,"日志内容",LVCFMT_LEFT,500);
插入行:
-----------------------------------------------------------------
CListCtrl& theList=GetListCtrl();
int iLogNum=theList.GetItemCount();/////////////////////出错处!!!!
CString str;
int aa=theList.InsertItem(iLogNum,itoa(iLogNum,str.GetBuffer(10),10));
theList.SetItemText(aa,1,CTime::GetCurrentTime().Format("%Y-%m-%d"));
theList.SetItemText(aa,2,CTime::GetCurrentTime().Format("%H:%M:%S"));
theList.SetItemText(aa,3,content);
请指教,不胜感激!!
...全文
383 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
shark2004 2006-01-18
  • 打赏
  • 举报
回复
放在主框架里应该是个不错的办法,我试试吧,多谢多谢了,结贴吧
如果有问题,再发贴,呵呵
handsomerun 2006-01-18
  • 打赏
  • 举报
回复
你还可以放在调用view1,view2的主框架里面做这些listview的插入工作
这也是一个办法

反正你主框架里面有view1,view2的对象的,操作应该也是蛮简单的啊
handsomerun 2006-01-18
  • 打赏
  • 举报
回复
嗯,嗯
你可以通过发送消息,调用函数啊什么的

shark2004 2006-01-18
  • 打赏
  • 举报
回复
to handsomerun(毛毛):
VIEW1和VIEW2确实是没有什么关系的
那如何在VIEW2创建后给告诉VIEW1呢?
handsomerun 2006-01-18
  • 打赏
  • 举报
回复
你这个view2是再哪创建的呢??


因为你的view1和view2是应该没有联系的(应该不会是在view1中创建view2的吧),或者说,view1是无法知道view2是什么时候创建的
只有创建view2的那个窗口,是可以知道view2是啥时候创建的啊

那么这样的话,你用view1去给view2添加
,就有可能view2还没有创建好
除非你在创建view2的时候,告诉view1,那是可以的啊
shark2004 2006-01-18
  • 打赏
  • 举报
回复
to handsomerun(毛毛):
我也有这个想法,现在正在尝试,但总觉得这样不能解决根本问题,假如我有三个视图,那不是要在第三个视图的OnInitialUpdate中调用吗?觉得有点太被动了!
shark2004 2006-01-18
  • 打赏
  • 举报
回复
就是说一个函数需要在两个视图初始化都完毕后执行,这个函数该放在什么地方??谢谢
handsomerun 2006-01-18
  • 打赏
  • 举报
回复
那么能不能在VIEW2在OnInitialUpdate中,调用view1中的那个初试化listview的函数呢???

shark2004 2006-01-18
  • 打赏
  • 举报
回复
发现问题原因,但不知如何解决,请各位达人再来关注一下吧!~~先谢了
问题原因是:使用InsertItem()在初始化LISTVIEW之前,因此产生错误,但是不知道如何解决,我使用了两个视图,view1和view2,我在VIEW1的OnInitialUpdate()中向VIEW2中插入数据,但此时VIEW2尚未初始化,因此出错,请问向VIEW2插入数据的代码应该写在VIEW1类的哪个函数中??

语文学得不好,不知道表达得够不够清楚,请大侠指教~~~
shark2004 2006-01-17
  • 打赏
  • 举报
回复
to lixiaosan(小三):
只有两个视图,应该没有搞错
改为:
int iLogNum=ListView_GetItemCount(theList.GetSafeHwnd());
后,本句通过,但是在INSERTITEM的时候出错!
lixiaosan 2006-01-17
  • 打赏
  • 举报
回复
试试这个那

ListView_GetItemCount(theList.GetSafeHwnd());
lixiaosan 2006-01-17
  • 打赏
  • 举报
回复
多视图?

不要搞错了是哪个view哦?
菜牛 2006-01-17
  • 打赏
  • 举报
回复
应该是你这个列表句柄有问题。
shark2004 2006-01-17
  • 打赏
  • 举报
回复
那我再检查一下吧,多谢各位了!
handsomerun 2006-01-17
  • 打赏
  • 举报
回复
光看你这段代码是没问题的


可能是在切换的时候造成了问题???
shark2004 2006-01-17
  • 打赏
  • 举报
回复
to handsomerun(毛毛) :
标题正常显示!!
shark2004 2006-01-17
  • 打赏
  • 举报
回复
再把我程序的思路说一下,请高手指点!
程序中使用两个视图,分别在两个类中,实现用菜单实现两个视图的切换.
以上函数是在第二个视图中,在第一视图类中好像是可以用GetItemCount()的,很奇怪,两个视图结构基本上是完全一致的啊
请赐教!~~~~~
handsomerun 2006-01-17
  • 打赏
  • 举报
回复
没有显示
??

标题显示了吗

就是theList.InsertColumn(0,"ID",LVCFMT_LEFT,30);
theList.InsertColumn(1,"日期",LVCFMT_LEFT,60);
theList.InsertColumn(2,"时间",LVCFMT_LEFT,60);
theList.InsertColumn(3,"日志内容",LVCFMT_LEFT,500);

这个有吗??
shark2004 2006-01-17
  • 打赏
  • 举报
回复
好像不行啊,编译运行没问题,可是好像没有插进去,没有显示
lixiaosan 2006-01-17
  • 打赏
  • 举报
回复
ListView_InsertItem

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧