在VC ++ SDI应用程序中的函数之间传递字符串

时间:2013-04-08 09:07:29

标签: visual-studio-2010 listview mfc sdi

我在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。

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

第一个(列名)

男人

1 个答案:

答案 0 :(得分:0)

对于List控件,您也在调用

  

nItem = ctlRightView.InsertItem(0,league);

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

  

ctlRightView.SetItemText(nItem,1,league);

而是每次必须插入列表的下一个位置。因此,使用变量作为当前位置并调用:

  

int nItem = 0;

     

nItem = ctlRightView.InsertItem(位置++,联盟);

     

ctlRightView.SetItemText(nItem,1,league);

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