MFC中使用SetItemText报断言失败的错

原创 2015年05月21日 13:51:18

初学MFC, 准备使用CListCtrl来显示表格数据, 但是运行程序的时候总是出现DEBUG 断言失败错误的对话框, 忽略所有的错误后, 表格控件最后也没有显示数据.


这里是显示表格最简单的代码:

//插入列名

m_listReport.InsertColumn( 0, "COL1", LVCFMT_LEFT, 40 );

m_listReport.InsertColumn( 1, "COL2", LVCFMT_LEFT, 50 );


//插入数据

int rowId = m_listReport.InsertItem(0,"4444");

m_listReport.SetItemText(rowId, 0, "5555");

m_listReport.SetItemText(rowId, 1, "6666");


程序运行到m_listReport.SetItemText(rowId, 0, "5555"); 的时候就会出现断言失败的错. 

通过DEBUG方法SetItemText, 发现代码里 (GetStyle()   &   LVS_OWNERDATA)==0为假, 所以程序运行到这里就会报错.


winctrl2.cpp中Line:494为   

  BOOL   CListCtrl::SetItemText(int   nItem,   int   nSubItem,   LPCTSTR   lpszText)   
  {   
  ASSERT(::IsWindow(m_hWnd));   
  ASSERT((GetStyle()   &   LVS_OWNERDATA)==0);//Line   494   
  LVITEM   lvi;   
  lvi.iSubItem   =   nSubItem;   
  lvi.pszText   =   (LPTSTR)   lpszText;   
  return   (BOOL)   ::SendMessage(m_hWnd,   LVM_SETITEMTEXT,   nItem,   (LPARAM)&lvi);   
  }   


于是就在资源文件里把list control的OWNERDATA属性设置为false, 程序就运行正常了,也可以显示数据了.


那什么是OWNERDATA属性了,它是做什么用的呢, 于是在MSDN里查了下发现以下内容, 这个属性用来处理大数据的显示的, 至于使用它, 就没有继续深究下去,现在这里mark下,以后需要用到的时候再看看.


Virtual List-View Style
A virtual list view is a list-view control that has the LVS_OWNERDATA style. This style enables the control to handle millions of items because the owner receives the burden of managing item data. This allows you to use the virtual list-view control with large databases of information, where specific methods of data access are already in place.
A virtual list-view control maintains very little item information itself. Except for the item selection and focus information, the owner of the control must manage all item information. Other processes request item information from the owner by using LVN_GETDISPINFO notification codes.
Because this type of list control is intended for large data sets, it is recommended that you cache requested item data to improve retrieval performance. The list view provides a cache-hinting mechanism to assist in optimizing the cache. The hint is implemented in the form of an LVN_ODCACHEHINT notification code.



java 异常 断言

异常 导致异常的原因 1.用户输入错误 2.设备错误 3.物理限制 4.代码错误 异常的分类  所有的异常均有Throwable继承而来,但是在下一层立即分解为两个分支,Erro...
  • seacean2000
  • seacean2000
  • 2013年04月06日 18:45
  • 1714

断言(assert)的使用

参考:http://www.cnblogs.com/tianxue/p/3925315.html 一、Assert简介 作用:是用于对程序进行调试的,对于执行结构的判断,而不是对于业务流程的判断。...
  • chen19960724
  • chen19960724
  • 2016年09月12日 16:32
  • 2047

JAVA结合testng断言verify(断言失败不中断继续执行)

 原理: 1.自已构造一个断言类,把Assert.assertEquals给try catch住。 2.利用testng的监听类在测试方法运行结束后进行分析。 代码: 断言类: ...
  • nicolas_li
  • nicolas_li
  • 2016年02月23日 16:30
  • 1978

JAVA结合testng断言verify(断言失败不中断继续执行)

JAVA结合testng断言verify(断言失败不中断继续执行) 原理: 1.自已构造一个断言类,把Assert.assertEquals给try catch住。 2.利用testng...
  • M1011566442
  • M1011566442
  • 2016年08月01日 13:37
  • 1152

java 断言 assert 初步使用:断言开启、断言使用

主要总结一下在eclipse中如何使用断言。 (一)首先明确: java断言Assert是jdk1.4引入的。 jvm 断言默认是关闭的。 断言只适用于复杂的调试过程。 断言一般用于程序执行...
  • Albert0420
  • Albert0420
  • 2015年04月10日 15:27
  • 6625

Java:异常、断言

抛出异常异常分类在Java中,异常对象都是派生于Throwable类的一个实例,下一层又立即分解为两个分支:Error和Exception。 Error类描述了Java运行时系统的内部错误和资源耗尽...
  • jinzhao1993
  • jinzhao1993
  • 2016年10月05日 11:00
  • 385

JAVA断言使用

JAVA是从JDK1.4才开始支持断言的(添加了关键字assert),请注意老版的JRE不支持。 断言概述   编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设...
  • zh521zh
  • zh521zh
  • 2017年06月20日 11:24
  • 202

使用HighChart的一些心得

使用HighChart的一些心得
  • lm2813793139
  • lm2813793139
  • 2015年06月30日 17:23
  • 454

testng实现verify断言

1.构造一个Verify类,将testNg的Assert断言异常捕获,利用监听器在@Test方法结束后一次性抛出 2.编写Verify类,可按需求扩充 package com.p; import...
  • kdslkd
  • kdslkd
  • 2016年04月26日 14:28
  • 1607

Jmeter之响应断言

断言有很多种,最最最常用的一种就是响应断言,目前我也只接触过这么一种,详情: **Main sample and sub-samples:断言应用于主采样器和子采样器。 ...
  • h470789634
  • h470789634
  • 2017年04月14日 09:26
  • 1222
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC中使用SetItemText报断言失败的错
举报原因:
原因补充:

(最多只允许输入30个字)