如下为我的一段代码:
 POSITION pos;
    FileInfoStruct fileinfo;
    
int tempp = 0;
//取得查询条数
g_fileNum = g_filelist->GetCount(); if ( g_fileNum > 0)          //有查询结果
{
int i;
for( i= 0,pos = g_filelist->GetHeadPosition(); pos != NULL; i++ )
{  
    tempp = i;
fileinfo = g_filelist->GetNext(pos);
//文件名
m_srchrlt.InsertItem(i,fileinfo.m_filename);
//路径
m_srchrlt.SetItemText(i,1,fileinfo.m_filepath);
//压缩格式
m_srchrlt.SetItemText(i,2,fileinfo.m_ziptype);
//作者
m_srchrlt.SetItemText(i,3,fileinfo.m_author);
//文件大小
m_srchrlt.SetItemText(i,4,fileinfo.m_filesize);
//持续时间
m_srchrlt.SetItemText(i,5,fileinfo.m_filelong);
//发布时间
m_srchrlt.SetItemText(i,6,fileinfo.m_publictime);
//文件编码
m_srchrlt.SetItemText(i,7,fileinfo.m_filecode);
//其他信息
m_srchrlt.SetItemText(i,8,fileinfo.m_otherinfo);
//图片信息
m_srchrlt.SetItemText(i,9,fileinfo.m_imagepath);
}
g_filelist->RemoveAll();
}
else
{
AfxMessageBox("没有相关文件!");
this->OnOK();
}
单步跟到发现存放数据的g_filelist中的数据完全正常,但就是经过上面的操作后,在界面上显示出来时好多数据显示不完全(比如路径等字段),或者有错位现象(本来是上一个文件的路径显示到下一个文件).调试了半天,不得其原因.
    想了一下我上面的代码是放在"搜索结果"对话框的OninitDialog()事件中,而这个对话框是在另外一个线程中生成的,不知道这样是否会有问题呢??

解决方案 »

  1.   

    for( i= 0,pos = g_filelist->GetHeadPosition(); pos != NULL; i++ )
    这个会不会有问题?
      

  2.   

    g_filelist的定义如下:
    typedef  struct _FileInfoStruct
    {
    CString m_filename;    //文件名字
    CString m_filepath;    //文件路径
    CString m_ziptype;     //压缩格式
    CString m_author;      //作者
    CString m_filesize;    //文件大小
    CString m_filelong;    //文件长度(分钟)   
    CString m_publictime;  //文件发行时间
    CString m_filecode;    //文件码率
    CString m_imagepath;   //相关图片信息目录
    CString m_otherinfo;   //文件其他信息
    }FileInfoStruct;typedef CList<FileInfoStruct,FileInfoStruct&> mylist; //存放文件信息的列表
    mylist* g_filelist;
    WecanHuang(闷头赚分ing):
    哪应该是没有问题的,我换成下面的写法:
    for( int i= 0; i < g_filelist->GetCount(); i++ ),还是老样子.
      

  3.   


    LV_ITEM lvitem;
    lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
    lvitem.state = 0;      
    lvitem.stateMask = 0; 

    lvitem.iItem = i;
    lvitem.iSubItem = 0;
    lvitem.pszText =fileinfo.m_filename;
    m_ListCtrl.InsertItem(&lvitem);
    试试
      

  4.   

    m_srchrlt的create代码在贴出来看看
      

  5.   

    LONG lStyle = m_ListCtrl.SendMessage
    (LVM_GETEXTENDEDLISTVIEWSTYLE);
    lStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | 
    LVS_EX_HEADERDRAGDROP;
    m_ListCtrl.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
    (LPARAM)lStyle);
    LV_COLUMN lvc;
    // Add "About..." menu item to system menu.
    lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH /*| LVCF_FMT*/;
    lvc.iSubItem = 0;
    lvc.pszText = (char *)"序号";
    lvc.cx = 60;
    m_ListCtrl.InsertColumn(0,&lvc);

    lvc.iSubItem = 1;
    lvc.pszText = (char *)"期号";
    lvc.cx = 90;
    m_ListCtrl.InsertColumn(1,&lvc);

    lvc.iSubItem = 2;
    lvc.pszText = (char *)"中奖号码";
    lvc.cx = 60;
    m_ListCtrl.InsertColumn(2,&lvc);
    //
    m_ListCtrl.DeleteAllItems();
      

  6.   

    创建代码如下:
    LV_COLUMN column;
    column.pszText="名称";
    column.mask=LVCF_TEXT;
    m_srchrlt.InsertColumn(0,&column);
    m_srchrlt.SetColumnWidth(0,100); column.pszText="文件路径";
    column.mask=LVCF_TEXT;
    m_srchrlt.InsertColumn(1,&column);
    m_srchrlt.SetColumnWidth(1,100);
    column.pszText="压缩格式";
    column.mask=LVCF_TEXT;
    m_srchrlt.InsertColumn(2,&column);
    m_srchrlt.SetColumnWidth(2,100); column.pszText="作者";
    column.mask=LVCF_TEXT;
    m_srchrlt.InsertColumn(3,&column);
    m_srchrlt.SetColumnWidth(3,100); column.pszText="文件大小(KB)";
    column.mask=LVCF_TEXT;
    m_srchrlt.InsertColumn(4,&column);
    m_srchrlt.SetColumnWidth(4,100); column.pszText="时长(分钟:秒)";
    column.mask=LVCF_TEXT;
    m_srchrlt.InsertColumn(5,&column);
    m_srchrlt.SetColumnWidth(5,100); column.pszText="发行时间";
    column.mask=LVCF_TEXT;
    m_srchrlt.InsertColumn(6,&column);
    m_srchrlt.SetColumnWidth(6,100); column.pszText="码率";
    column.mask=LVCF_TEXT;
    m_srchrlt.InsertColumn(7,&column);
    m_srchrlt.SetColumnWidth(7,100); column.pszText="备注信息";
    column.mask=LVCF_TEXT;
    m_srchrlt.InsertColumn(8,&column);
    m_srchrlt.SetColumnWidth(8,100);
       
    column.pszText="图片信息";
    column.mask=LVCF_TEXT;
    m_srchrlt.InsertColumn(9,&column);
    m_srchrlt.SetColumnWidth(9,0);
      

  7.   

    int nRow = m_list.InsertItem(i, strtemp);m_list.SetItemText(nRow, 1, strtemp);
      

  8.   

    小三,太感谢你了.问题解决了.但我还是有点不太明白.
      m_list.SetItemText(nRow, 1, strtemp);和我直接用i来代替nRow效果应该是一样的啊.能不那能再解释一下.
      

  9.   

    因为你的listctrl选择了sort用insertitem的返回值nRow,确保插入后实际的item