2013-04-08 52 views
0

我正在做一個SDI項目。我有兩個函數名稱sendtext(CString str)和 displaytext(CString inr)都在不同的類。 我有一個指針名稱pView發送字符串str功能「displaytext」。 問題是一些操作後,我得到一個文本在str中,我發送該文本來顯示輸出屏幕中的文本我得到的文本和文第二個文本來到「顯示文本」前文本消失,最新的字符串只存在。 Pleae幫助我如何顯示ClistCtrl類上的輸出窗口中的文本。在VC++ SDI應用程序中函數之間傳遞的字符串

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其被髮送通過

pDoc->pLeftView->displaytext(resToken); 

到displaytext(),當我在客戶端窗口運行時我運行該應用我我得到文本「人」,它用於空文件檢查,並在while循環被打破後它來到相同的標記區域,並開始標記化文本文件中的新行,如兄弟姐妹和標記輸出發送到顯示文本通過上面提到的同一段代碼。

在客戶端窗口我得到的東西爲「兄弟」我沒有看到「人」 ..我想無論是「人哥」顯示爲

優先(列名)

哥哥

+0

更加明確,並提供更多的代碼。 –

+0

嘿請看看代碼這是我做甲肝至今 –

+0

OK,請編輯您的問題,以便:1)格式化你的源代碼,這是可讀的正確縮進的話)。 2)提供路徑名中文件內容的樣本。 3)描述列表控件應該如何與第2點提供的文件一樣)。 –

回答

0

在列表控制的情況下,還您呼叫的

n它em = ctlRightView.InsertItem(0,league);

這裏nItem域將是相同的值在每次調用this.So你被調用

ctlRightView.SetItemText(nItem域,1,盟)覆蓋先前的內容時;

相反,每次有時間插入到列表中的下一個位置。因此,使用一個變量作爲當前位置,並調用:

INT nItem域= 0;

nItem = ctlRightView.InsertItem(Position ++,league);

ctlRightView。SetItemText(nItem,1,league);

您可以宣告位置爲全局變量

+0

編輯我沒有用樹控制的問題,請在我的列表控件 –

+0

問題@maxerzaurak已編輯的意見,請看看答案 – CodeRider

相關問題