listCtrl——我陷入一个困惑

listCtrl——我陷入一个困惑
listCtrl是MFC里面的一个控件,通常在插入数据的时候用InsertItem和 SetItemtext这两个ClistCtrl的成员函数。

脑补内容如下:
———————————源于CSDN的blog——————————————

        InsertItem在MSDN中的函数原型如下
        
int InsertItem( const LVITEM* pItem );
       int InsertItem( int 
nItem, LPCTSTR lpszItem );
       int InsertItem( int 
nItem, LPCTSTR lpszItem,  int nImage );
      
int InsertItem( UINT 
nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam );
     一般我们用的比较多的时第2种和第三种,其中第三种时建立一个带有头标的项

     要调用第三个,可以先声明一个CImageList对象
m_ImageList.Create(16,16,true,2,2);
 m_ImageList.Add(theApp.LoadIcon(IDR_MAINFRAME));
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);
这样,控件中的每一行的开头就有一个应用程序图标
     

      现在转入正题,先介绍一下INSERTITEM个个参数的意义
     nItem:    控件中行的索引
     
lpszItem :  控件头的名字
     .........................................................................................................................................................................................................
     SettItemtext函数的原型
    
BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );
    ******************注意这个函数中的参数
nItem就是INSERTITEM中的NITEM,
    也就是说InsertItem是向控件声请一行来放数据,记住只是声请,那么方数据的工作就又SETITEMTEXT来实现
    举例如下:

     CListCtrl m_listctrl;

     m_listctrl = new ClistCtrl();

     m_listctrl.Creae(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS
  ,bigRect,this,IDC_LIST1
     );
     
     m_listctrl.InsertItem(0,"01");

     m_SetItemtext(0,1,"1");

     m_SetItemtext(0,2,"2");
     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     至于要添多少多少个数据,就由你的控件由多少列了
———————————————脑补结束—————————————


正题: 

我的目的是为了在C++中将Excel的数据导入到
listCtrl控件中。
range为CRange类型的一个实例。按理说这并不是个非常难理解的东西,但是我遇到了一个可能会C++中比较常见(但我确实之前没有遇到过的问题)

这个是我在无数疯狂修改后的程序:
图片
图片
图片
正常结果:(原谅我用excel表示效果,有些东西不能乱发)
图片
但是。。。你们知道之前经历了什么么? 

按理说,这个地方只用一个int类型的变量传进去就可以了。窃以为用for循环的循环变量来控制这个SetItemText就可以了。
修改部分的代码如下:

图片
错误的结果是:
 图片
这样的结果很明显只实现了InsertItem(只插入了每行第一列的数据),但是SetItemText就置若罔闻。我经过调试以后这个循环变量和GetItemCount得到的行号,实际上是一样的,都是Int的正常值。我想即使行号出错误,也会乱七八糟的插入一些值,起码不为空。
虽然不会报错,但是
SetItemText不会工作。
我为什么不早用获取行号来解决问题?因为看的例程都是随便通过一个int类型的变量传入到
SetItemText里面,但是我用就不行。
而且,红框里面的FUCK!!已经严重表明了我现在的心情,这块我确实想了很久。
这是为什么?!
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值