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

altstop 2005-12-14 12:21:46
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
...全文
227 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
altstop 2005-12-14
  • 打赏
  • 举报
回复
SendMessage(m_userlist.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, <------------- (2)
 LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);-----〉设置列表控件的属性为扩展的整行选择属性。

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


oxFFFF(65535)就是0了......
为什么不写成0呢? 但好象写成0也不行,这个是在循环里,应该依次向下一行添加记录呀,糊涂了
altstop 2005-12-14
  • 打赏
  • 举报
回复
解答的太好了,但我还没看.等我看完就给分
laogong165 2005-12-14
  • 打赏
  • 举报
回复
(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。
iceeyes1213 2005-12-14
  • 打赏
  • 举报
回复
做人要厚道
fdimim 2005-12-14
  • 打赏
  • 举报
回复
...
lzzqqq 2005-12-14
  • 打赏
  • 举报
回复
问题1是设置窗口失效状态的,窗口上的控件在windows里面也算是一个窗口.
问题2是设置CListCtrl的扩展风格的,允许选中全部行.
其实0xffff比较迷惑,真正能让人读懂的写法是
m_userlist.InsertItem(m_userlist.GetItemCount(),NULL);
guosx 2005-12-14
  • 打赏
  • 举报
回复
mark
altstop 2005-12-14
  • 打赏
  • 举报
回复
我靠,我在baidu和google上搜了3个小时才知道这里为什么要加0xffff

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

回复人: kingtsui(老农民) ( ) 信誉:100 2002-01-07 14:35:18Z 得分:10

就是索引值啊,在第几个位置插入的意思,如果大于现有的Item数,则插在末尾,用0xffff故意是要插在末尾
//////////////////////////////////////////////////////////////////////////

睡觉去喽


altstop 2005-12-14
  • 打赏
  • 举报
回复
可是插入一行后再循环一次还插入在原先的地方呀,因为0xffff没变呀
laogong165 2005-12-14
  • 打赏
  • 举报
回复
如果只是想把数据简单地显示在列表控件里,可以不需要写吧

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

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧