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.



PHP中Yii2框架的使用及项目实战

-
  • 1970年01月01日 08:00

CListCtrl::SetItemText() 不显示的问题

//原来不会显示 m_grid.SetItemText(nRow,1,_T("行号"));// 这一句就是显示不成功 //修改一下可以显示 int nIndex =m_grid.InsertIt...
  • Miss_Easy
  • Miss_Easy
  • 2015-01-09 09:30:56
  • 2193

华为手机6.0系统系列崩溃,情况未明

报错如下: 06-20 20:34:58.069 16120-16627/com.lvche.pocketscore I/System: core_booster, getBoosterConfig...
  • wuqilianga
  • wuqilianga
  • 2017-06-20 20:58:24
  • 2700

关于ListView下拉崩溃的问题

今天写了一个DEMO是关于自定义ListView的程序,但是程序完成后,虽然能够正常运行,但是发现只要下拉ListView选项就会导致程序的崩溃,在网上也没有找到任何解决的办法。分析了一下,把问题锁定...
  • qq_20916555
  • qq_20916555
  • 2015-11-07 20:21:50
  • 915

IOS 开发过程中问题汇总

IOS 开发过程中问题汇总 1-调用打电话方法 1> 直接跳转到打电话页面 __拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 [[UIApplication ...
  • sadsadaadsd
  • sadsadaadsd
  • 2016-07-29 10:02:50
  • 895

关于在Activity中用了setAdapter后程序崩溃,求大神解答

以下是activity中的代码:红色部分注销可正常运行,为了实现在购物车界面加载数据库并布局到listview中。 import static com.example.asus.myapp.R....
  • qianchen4564
  • qianchen4564
  • 2016-12-31 02:58:20
  • 627

VC下发布的Release版程序崩溃后的异常捕捉与查找

寻找Release版程发生异常退出的地方比Debug版麻烦得多。发生异常的时候windows通常会弹出一个错误对话框,点击详细信息,我们能获得出错的地址和大概的出错信息,然后可以用以下办法分析我们的程...
  • q610098308
  • q610098308
  • 2017-09-18 18:08:28
  • 406

Qt程式异常崩溃处理技巧(Win)

文章转载来自     http://www.cnblogs.com/lcchuguo/p/5177715.html     作者 lcchuguo 这篇文章谈的是 Qt4 程式在视窗系统...
  • baidu_33570760
  • baidu_33570760
  • 2016-08-16 15:43:39
  • 7841

如何定位Release程序崩溃原因

1       案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭。请与您的供应商联系。呵呵,这句微软的“...
  • FrankieWang008
  • FrankieWang008
  • 2012-09-26 16:25:53
  • 3960

Android程序崩溃异常处理之自动发送邮件

由于自己最近在跟一个项目,怎么说呢,项目功能真的是太多了,有时测试的MM忙不过来,有些隐形的bug没发现出来,但是我认为整体稳定性不够好,有时会Crash掉,这也给那些出去演示的市场部伙伴带来了不少的...
  • android_cmos
  • android_cmos
  • 2016-04-17 10:00:41
  • 2408
收藏助手
不良信息举报
您举报文章:MFC中使用SetItemText报断言失败的错
举报原因:
原因补充:

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