2013-04-08 3 views
0

Я делаю проект в SDI. У меня есть две функции name sendtext (CString str) и displaytext (CString inr) как в разных классах. У меня есть имя указателя pView для отправки строки str для функции «displaytext». Проблема заключается в том, что после некоторых операций я получаю текст в строке, и я отправляю этот текст, чтобы отображать текст на экране вывода. Я получаю текст, а второй текст приходит в «displaytext», прежний текст исчезает и появляется только последняя строка. 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, который отправляется в DisplayText() через

pDoc->pLeftView->displaytext(resToken); 

и когда я запускаю в окне клиента, когда я запустить приложение, которое я я получаю текст «человек», и он идет для проверки пустого файла, и после того, как цикл while сломан, он переходит в ту же область токенирования и начинает токенизировать новую строку в текстовом файле, говорят братья-сестры, и токеный вывод отправляется в контекстный контекст через тот же самый фрагмент кода, упомянутый выше.

В окне клиента я получаю вещи, как «брат» я не вижу «человек» .. я хочу как «человек и брат», который будет отображаться в качестве

First (Имя столбца)

брат

человек

+0

быть более явным и предоставить больше кода. –

+0

Эй, посмотрите на код, это то, что я сделал до сих пор. –

+0

ОК, пожалуйста, отредактируйте свой вопрос, чтобы: 1) отформатировать исходный код, чтобы его можно было прочитать, отпечатав его правильно). 2) предоставить образец содержимого файла в pathname. 3) описать, как должен выглядеть элемент управления списком с файлом, указанным в пункте 2). –

ответ

0

В случае управления List также вы вызываете

NIT em = ctlRightView.InsertItem (0, лига);

Здесь nItem будет иметь то же значение каждый раз, когда вы звоните this.So вы перезаписать предыдущее содержимое по зову

ctlRightView.SetItemText (nItem, 1 лига);

Вместо этого каждый раз, когда вы должны вставить в следующую позицию списка. Поэтому используйте переменную в качестве текущей позиции и звоните:

int nItem = 0;

nItem = ctlRightView.InsertItem (Позиция ++, лига);

ctlRightView.SetItemText (nItem, 1, лига);

Вы можете объявить позицию в качестве глобальной переменной

+0

У меня нет проблемы с управлением деревьями, пожалуйста, прокомментируйте мою проблему в управлении списком –

+0

@maxerzaurak отредактировал, пожалуйста, взгляните на ответ – CodeRider