代码的功能很简单,一个Dialog程序,选择一些文件并在一个List控件中显示所选文件:
    CString sFilter=_T("Word文档(*.doc)|*.doc|");   
    CFileDialog   Dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT,(LPCTSTR)sFilter); 
    if(Dlg.DoModal()==IDOK) 
   { 
CListCtrl *list = (CListCtrl*)GetDlgItem(IDC_LIST1);
list->SetRedraw(false);
        POSITION   pos   =   Dlg.GetStartPosition(); 
        while(pos) 
        { 
CString   szFileName   =   Dlg.GetNextPathName(pos);
int index = list->InsertItem(0,(LPCTSTR)szFileName);
//list->SetItemText(index,0,(LPCTSTR)szFileName);

        } 
list->UpdateData();
list->SetRedraw(true);
list->Invalidate();
::AfxMessageBox((LPCTSTR)list->GetItemCount());
    } 
//结果发现GetItemCount是空的,根本没有加进去!!!怎么回事啊?

解决方案 »

  1.   

    补充:
    1)我用的是VISUAL STUDIO 2005
    2)没有看见属性编辑器里有设'STYLE'为'REPORT’的地方
      

  2.   

    int index = list->InsertItem(0,(LPCTSTR)szFileName); 
    //list->SetItemText(index,0,(LPCTSTR)szFileName);
    没设值?
      

  3.   

    在程序中可以修改成report 
    DWORD dwStyle =0 ;
    dwStyle = GetWindowLong(m_listUnHandle.m_hWnd, GWL_STYLE); 
        SetWindowLong(m_listUnHandle.m_hWnd, GWL_STYLE, dwStyle | LVS_REPORT);
    dwStyle = m_listUnHandle.GetExtendedStyle() ;
    m_listUnHandle.SetExtendedStyle(dwStyle | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);同时添加列
    TCHAR rgtsz[10][20] = {_T("车辆"),_T("报警内容"),_T("报警时间"),_T("状态")};
    int iFmt[10]={LVCFMT_LEFT,LVCFMT_LEFT,LVCFMT_LEFT,LVCFMT_LEFT,LVCFMT_CENTER,
    LVCFMT_LEFT,LVCFMT_LEFT,LVCFMT_LEFT,LVCFMT_LEFT,LVCFMT_LEFT} ; 
    LV_COLUMN lvcolumn;
    int i=0;
    int nCol = 4,
    for(i=0;i< nCol ;i++)
    {
    lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT 
    | LVCF_WIDTH | LVCF_ORDER;
    lvcolumn.fmt = iFmt[1]; //// LVCFMT_LEFT
    lvcolumn.pszText = rgtsz[i];
    lvcolumn.iSubItem = i;
    lvcolumn.iOrder = i;
    lvcolumn.cx = iArrWidth[i] ;
    m_listUnHandle.InsertColumn(i, &lvcolumn);
    }
    再使用
    InsertItem函数添加Item,
      

  4.   

    CListCtrl m_Grid;
    m_Grid.SetItemText(x,y,Text);
    x是行,y是列,Text是要添加的内容
      

  5.   

    CListCtrl m_Grid;
    m_Grid.SetItemText(x,y,Text);
    x是行,y是列,Text是要添加的内容
      

  6.   

    ::AfxMessageBox((LPCTSTR)list->GetItemCount()); 
    感觉这句错误吧list->GetItemCount()得到的值是整型啊
      

  7.   

    CString sFilter=_T("Word文档(*.doc)|*.doc||");  //使用 2 个“|”结束。list->UpdateData();  //可删除。
    list->SetRedraw(true); 
    list->Invalidate(); //可删除。
    ::AfxMessageBox((LPCTSTR)list->GetItemCount()); //不要这样显示数值,先删除看看是否已经添加了项目。 
      

  8.   

    ListCtrl是report形式?之前InsertColumn了没有?
      

  9.   

    CFileDialog使用OFN_ALLOWMULTISELECT标志时,需要自己提供一个缓冲区,将指针赋给OPENFILENAME结构中lpstrFile成员,并在nMaxFile成员中给出缓冲区长度。
    另外,list->GetItemCount()返回的是整数,不能强制转换为LPCTSTR类型来显示。
      

  10.   

    没有insertColumn
    一定要嘛?
    我只有1列也要嘛?
      

  11.   

    我看了szFileName的内容,是有值的
      

  12.   

    我在OnInitDialog里加了:
    ((CListCtrl*)GetDlgItem(IDC_LIST1))->InsertColumn(0,(LPCTSTR)_T("源文件"));
    还是没用啊……
      

  13.   

    没看到啊~~~只有什么visible属性的
      

  14.   

    ……搞错了,是CListBox 而非CListCtrl,我好菜……
    结贴!