非常简单的CListCtrl问题,马上给分

时间:2022-04-24 21:29:20
BOOL CADOTest1Dlg::OnInitDialog()
{
 CDialog::OnInitDialog();
 m_cDelItem.EnableWindow(FALSE);  <---------- (1)
 ::SendMessage(m_userlist.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, <------------- (2)
 LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);

..............

while(!m_pRecordset->adoEOF)
  {
   vID = m_pRecordset->GetCollect("ID");
   vUsername = m_pRecordset->GetCollect("username");
   vOld = m_pRecordset->GetCollect("old");
   vBirthday = m_pRecordset->GetCollect("birthday");
   nItem=m_userlist.InsertItem(0xffff,(_bstr_t)vID); <---------这里的0xffff是什么意思
   m_userlist.SetItem(nItem,1,1,(_bstr_t)vUsername,NULL,0,0,0);
   m_userlist.SetItem(nItem,2,1,(_bstr_t)vOld,NULL,0,0,0);
   m_userlist.SetItem(nItem,3,1,(_bstr_t)vBirthday,NULL,0,0,0);
   m_pRecordset->MoveNext();
  }


这是我在网上找的代码,应该是用ADO访问数据库然后在列表控件里显示,有几个地方没看明白
(1)(2)两行MFC的app wizard没有给我自动添加,这两行是做什么的?
InsertItem(0xffff,(_bstr_t)vID);  0xffff是什么意思? 这里应该是行的Index吧,为什么写0xffff

10 个解决方案

#1


(1)(2)两行MFC的app wizard没有给我自动添加,这两行是做什么的?
------------------------------
m_cDelItem.EnableWindow(FALSE);--->设置m_cDelItem这个按钮(假设是个清空列表的按钮)无效。
SendMessage(m_userlist.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, <------------- (2)
 LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);-----〉设置列表控件的属性为扩展的整行选择属性。

InsertItem(0xffff,(_bstr_t)vID);  0xffff是什么意思? 这里应该是行的Index吧,为什么写0xffff
------------------------
oxFFFF(65535)就是0了,因为insertitem的行的Index 属性是Int类型。十六位的操作系统里,int类型的范围就是65535。

#2


解答的太好了,但我还没看.等我看完就给分

#3


SendMessage(m_userlist.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, <------------- (2)
 LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);-----〉设置列表控件的属性为扩展的整行选择属性。

这个暂时没弄懂有什么用,如果我只是想把数据简单地显示在列表控件里,这一行不需要写吧


oxFFFF(65535)就是0了......
为什么不写成0呢? 但好象写成0也不行,这个是在循环里,应该依次向下一行添加记录呀,糊涂了

#4


如果只是想把数据简单地显示在列表控件里,可以不需要写吧

写成零也可以。这个句子就是从数据库中提出数据后
固定插在列表控件里的第一行(或者是最后一行,楼主可以试试看)
nItem返回的就是插入后该记录所在行的index

#5


可是插入一行后再循环一次还插入在原先的地方呀,因为0xffff没变呀

#6


我靠,我在baidu和google上搜了3个小时才知道这里为什么要加0xffff

////////////////////////////////////////////////////////////////////////
我是个菜鸟,CListCtrl.InsertItem(int nitem,LPCTSTR lpszItem)中的nitem是什么?
看MSDN中解释是一个索引值,那它的作用是什么?为什么在例程中要取值是0xffff呢?

回复人: kingtsui(老农民) ( ) 信誉:100  2002-01-07 14:35:18Z  得分:10  
 
就是索引值啊,在第几个位置插入的意思,如果大于现有的Item数,则插在末尾,用0xffff故意是要插在末尾
//////////////////////////////////////////////////////////////////////////

睡觉去喽


#7


mark

#8


问题1是设置窗口失效状态的,窗口上的控件在windows里面也算是一个窗口.
问题2是设置CListCtrl的扩展风格的,允许选中全部行.
其实0xffff比较迷惑,真正能让人读懂的写法是
m_userlist.InsertItem(m_userlist.GetItemCount(),NULL);

#9


...

#10


做人要厚道

#1


(1)(2)两行MFC的app wizard没有给我自动添加,这两行是做什么的?
------------------------------
m_cDelItem.EnableWindow(FALSE);--->设置m_cDelItem这个按钮(假设是个清空列表的按钮)无效。
SendMessage(m_userlist.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, <------------- (2)
 LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);-----〉设置列表控件的属性为扩展的整行选择属性。

InsertItem(0xffff,(_bstr_t)vID);  0xffff是什么意思? 这里应该是行的Index吧,为什么写0xffff
------------------------
oxFFFF(65535)就是0了,因为insertitem的行的Index 属性是Int类型。十六位的操作系统里,int类型的范围就是65535。

#2


解答的太好了,但我还没看.等我看完就给分

#3


SendMessage(m_userlist.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, <------------- (2)
 LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);-----〉设置列表控件的属性为扩展的整行选择属性。

这个暂时没弄懂有什么用,如果我只是想把数据简单地显示在列表控件里,这一行不需要写吧


oxFFFF(65535)就是0了......
为什么不写成0呢? 但好象写成0也不行,这个是在循环里,应该依次向下一行添加记录呀,糊涂了

#4


如果只是想把数据简单地显示在列表控件里,可以不需要写吧

写成零也可以。这个句子就是从数据库中提出数据后
固定插在列表控件里的第一行(或者是最后一行,楼主可以试试看)
nItem返回的就是插入后该记录所在行的index

#5


可是插入一行后再循环一次还插入在原先的地方呀,因为0xffff没变呀

#6


我靠,我在baidu和google上搜了3个小时才知道这里为什么要加0xffff

////////////////////////////////////////////////////////////////////////
我是个菜鸟,CListCtrl.InsertItem(int nitem,LPCTSTR lpszItem)中的nitem是什么?
看MSDN中解释是一个索引值,那它的作用是什么?为什么在例程中要取值是0xffff呢?

回复人: kingtsui(老农民) ( ) 信誉:100  2002-01-07 14:35:18Z  得分:10  
 
就是索引值啊,在第几个位置插入的意思,如果大于现有的Item数,则插在末尾,用0xffff故意是要插在末尾
//////////////////////////////////////////////////////////////////////////

睡觉去喽


#7


mark

#8


问题1是设置窗口失效状态的,窗口上的控件在windows里面也算是一个窗口.
问题2是设置CListCtrl的扩展风格的,允许选中全部行.
其实0xffff比较迷惑,真正能让人读懂的写法是
m_userlist.InsertItem(m_userlist.GetItemCount(),NULL);

#9


...

#10


做人要厚道