脑补内容如下:
———————————源于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!!已经严重表明了我现在的心情,这块我确实想了很久。
这是为什么?!