我的CListCtrl有多列,用InsertItem只能向第一列即0列插入东西,如何向第二列,第三列,...插入东西?

解决方案 »

  1.   

    向第m行n列,m行0列必须先有
    m_PlayList.SetItem(m,n,LVIF_TEXT,str1, 0, 0, 0, 0);
      

  2.   

    用InsertItem插入一行,然后用SetItemText插入其他列内容。
    SetItemText(行号,列号,内容)
      

  3.   

    int nInsertPos = m_RevList.GetItemCount();  //获得要插入的行数
    if(nInsertPos>=50)   //如果行数过多,清空
    {
    m_RecvSMList.DeleteAllItems();
    nInsertPos = 0;
    }
    m_RevList.InsertItem(nInsertPos , "");
    m_RevList.SetItemText(nInsertPos , 0 , (LPCTSTR)strCnt) ;   //第一列
    m_RevList.SetItemText(nInsertPos , 1 , pDeliverResp->sSrcTermID ) ;
    m_RevList.SetItemText(nInsertPos , 2 , pDeliverResp->sDestTermID);
    m_RevList.SetItemText(nInsertPos , 3 , pDeliverResp->sMsgContent ) ;
    m_RevList.SetItemText(nInsertPos , 4 , "FromAsiaInfo" ) ;   //第四列//当然在初始化list时应该有列的划分
      

  4.   

    创建图形列表并和CListCtrl关联:
     m_image_list.Create(IDB_CALLER2, 16, 10, RGB(192,192, 192));
     m_image_list.SetBkColor( GetSysColor( COLOR_WINDOW ) );
     m_caller_list.SetImageList( &m_image_list, LVSIL_SMALL);
    为报表添加4列:
      char *szColumn[]={"昵称","IP地址","登陆时间","状态"};
      int widths[]={100,98,70,55};
      LV_COLUMN lvc;
      lvc.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
      lvc.fmt=LVCFMT_LEFT;
      for(int i=0;i<4;i++) {//插入各列
       lvc.pszText=szColumn[i];
       lvc.cx=widths[i];
       lvc.iSubItem=i;
       m_caller_list.InsertColumn(i,&lvc);
      }
    为报表添加两项,以附加方式添加:
     char* data[4];
     data[0]="所有人";
     data[1]="0.0.0.0";
     data[3]="在线";
     data[2]=new char;
     CTime now=CTime::GetCurrentTime();
           CString temp = now.Format("%H:%M:%S");
     data[2]=temp.GetBuffer(1);
     LV_ITEM lvi;
     lvi.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
     lvi.iSubItem=0;
     lvi.pszText=(char *)data[0];
     lvi.iImage = 0;
     lvi.iItem=0;
     m_caller_list.InsertItem(&lvi);
     for (int j=0;j<4;j++) m_caller_list.SetItemText(count,j,data[j]);
     count++;
     lvi.iImage = 1;
     lvi.iItem=count;
     m_caller_list.InsertItem(&lvi);
     data[0]="cherami";
     data[1]="127.0.0.1"; 
     for (int n=0;n<4;n++) m_caller_list.SetItemText(count,n,data[n]);
     count++;设置报表的样式
    选中一整行:
    m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_FULLROWSELECT); 
    绘制表格:
    m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_GRIDLINES);
    带复选框:
    m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_CHECKBOXES);
    自动切换:
    m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_TRACKSELECT);
      

  5.   

    right!!在InsertItem()完一行之后;
    SetItemText(行号,列号,内容);
      

  6.   

    m_list.InsertColumn(0,"编号",LVCFMT_CENTER,rect.Width()/4);
        m_list.InsertColumn(1,"业务种别",LVCFMT_CENTER,rect.Width()*3/4);
        CWorkTypeSet worktypeset;
        try
        {
    worktypeset.m_strFilter = " DelFlag = false ";
    worktypeset.m_strSort   = " TypeNo";
    worktypeset.Open();
    worktypeset.MoveFirst();
    int iRow = 0;
    while(!worktypeset.IsEOF())
    {    
    m_list.InsertItem(iRow,worktypeset.m_TypeNo);
    m_list.SetItemText(iRow, 1,worktypeset.m_TypeName);
    worktypeset.MoveNext();
    iRow ++;
    }
    worktypeset.Close();
    }
    catch(CDBException *e)
    {
    e->Delete();
    return false;
    }
      

  7.   

    可以这样:
    OXXAdd()
    {
    CListCtrl& listctrl=GetListCtrl();
    LVITEM l;
    l.mask=LVIF_TEXT;
    l.iItem=listctrl.GetItemCount();
    l.iSubItem=0;////////当前行的第一列;
    l.pszText="w";///////内容
             listctrl.InsertItem(&l);///////写当前行的第一列 l.iSubItem=1;;////////当前行的第二列
    l.pszText="u";
    listctrl.SetItem(&l););///////写当前行的第二列         l.iSubItem=1;;////////当前行的第三列
    l.pszText="u";
    listctrl.SetItem(&l););///////写当前行的第三列
             ..
    }