0

我在 SDI 做一个项目。我在不同的类中有两个函数名称 sendtext(CString str) 和 displaytext(CString inr)。我有一个指针名称 pView 来将字符串 str 发送到函数“displaytext”。问题是经过一些操作后,我在 str 中得到了一个文本,然后我发送该文本以在输出屏幕中显示文本,我得到了文本,当第二个文本来到“displaytext”时,前一个文本消失了,只出现了最新的字符串。请帮我看看如何在 ClistCtrl 类的输出窗口中显示这两个文本。

Void sendtext()
{
 CTreeCtrl&  trCtrl = GetTreeCtrl(); 
 HTREEITEM hItem,hsc; 
 CExerciseDoc *pDoc = GetDocument();

 CString pathname,strLine; 
 CString filename;
 CFileDialog dlg(TRUE);
 dlg.DoModal();
 if(dlg.DoModal() == IDOK)
 {
     pathname=dlg.GetPathName(); // return full path and filename
 }

CStdioFile File;

if(File.Open(pathname, CFile::modeRead)) // Open file to be read 
{ 
   while(File.ReadString(strLine)) // Read file 
   { 
     int Position = 0; 
     CString Token; 

     CAtlString str(strLine);
     CAtlString resToken,resToken1;

     resToken = str.Tokenize(_T("-:, "), Position); 
     pDoc->pSendview->displaytext(resToken);
     if(resToken != (_T(""))) // Empty File Check

     hItem = trCtrl.InsertItem(resToken , 0, 2 );

     while(resToken!="") 
     { 
        resToken = str.Tokenize(_T("-:@, "), Position);
     }
    }
   }
  }
}
void CRightView::displaytext(CAtlString league)
{
   CListCtrl &ctlRightView = this->GetListCtrl();
   ResetLeagues();
   CAtlString resToken;
   ctlRightView.InsertColumn(1,  _T("First "),   LVCFMT_LEFT,   80);
   ctlRightView.InsertColumn(1,  _T("Second "),   LVCFMT_LEFT,   80);

   int nItem;
  nItem = ctlRightView.InsertItem(0,  league);
  ctlRightView.SetItemText(nItem, 1,  league);
}

文本文件包含以下内容

男人女人

兄弟姐妹

让我给你解释一下。在 sendtext() 中,我打开一个文本文件,然后将其标记化,标记化的输出是 resToken ,它通过以下方式发送到 displaytext()

pDoc->pLeftView->displaytext(resToken);

当我在客户端窗口中运行时,当我运行应用程序时,我得到文本“man”,它用于空文件检查,在 while 循环被破坏后,它来到相同的标记区域并开始标记新行文本文件说兄弟姐妹和标记化的输出通过上面提到的同一段代码发送到 displaytext。

在客户端窗口上,我得到的东西是“兄弟”,我看不到“男人”..我希望“男人和兄弟”都显示为

第一个(列名)

兄弟

男人

4

1 回答 1

0

在 List 控件的情况下,您也在调用

nItem = ctlRightView.InsertItem(0, 联赛);

这里 nItem 每次调用时都会是相同的值。所以你正在通过调用覆盖以前的内容

ctlRightView.SetItemText(nItem, 1, 联赛);

相反,每次您必须插入到列表的下一个位置。所以使用一个变量作为当前位置并调用:

int nItem = 0;

nItem = ctlRightView.InsertItem(Position++, 联赛);

ctlRightView.SetItemText(nItem, 1, 联赛);

您可以将位置声明为全局变量

于 2013-04-09T10:50:01.900 回答