Visual Studio MFC SDI应用程序中需要的帮助

时间:2013-03-26 06:52:58

标签: parsing visual-c++ mfc treeview sdi

我是Visual Studio MFC的新手。我迫切需要创建一个小应用程序。我需要一个帮助我坚持这个和问题我有一个文本文件,其中包含以下数据。            A-A1,A2 其中A是根节点,A1 A2是子节点。 我的要求是我需要创建一个SDI MFC应用程序。我需要当我去File-> Open->“xxx.txt”(其中包含上述数据)时,它必须以类似的格式显示                  一个                  | _ A1                  | _ A2(树视图)。 我经历了许多教程,比如它需要被标记化等等。真的很困惑,我不知道如何继续等。我只做了基于dailog和我对SDI的新手。 任何帮助表示赞赏。 在此先感谢。

2 个答案:

答案 0 :(得分:0)

从我可以从评论中收集到的问题以及Codeproject中链接的相同问题,我将尝试给予一些帮助,但考虑到问题的一般性,答案可能也不是非常具体。

首先,如果要显示树视图,则需要将视图类设置为CTreeView。 CTreeView是一个嵌入了CTreeCtrl的CView。 CEditView是一个带有嵌入式CEdit的CView,因此显示文本很有用(比如文本编辑器或类似的东西)。普通的CView不支持任何特殊类型的内容,因此您必须自己“绘制”它。

现在,要在视图中显示某些内容,您必须告诉它显示它。只是阅读文件不会这样做。你必须积极地展示它。通常,您会将文件中的数据读入某个结构,然后从那里显示。或者您可以将数据直接存储在树中,这取决于。无论如何,你需要学习使用CTreeView / CTreeCtrl。基本上,使用CTreeCtrl::InsertItem添加元素。

关于标记化,我不确定我是否理解你的格式,但我想我会为根节点和子节点使用不同的分隔符。所以如果你有ROOT-Child1,Child2,我会做类似的事情:

int pos = 0;
CString strRoot = strLine.Tokenize(_T("-"), pos);

// do something with strRoot, like store it or display it in the tree

while (pos != -1)
{
    CString strChild;

    strChild = strLine.Tokenize(_T(","), pos);
    // do something with strChild, like store it or display it in the tree
}

最后,在使用Doc / View架构时,要采用的方法是将数据与其显示分开。因此,您通常会将数据保存在文档中,并在那里执行所有打开/保存操作,然后使用GetDocument从视图中访问文档中的数据以显示它。有时,在视图中包含实时数据可能是有意义的,但这不是通常的做法。在这种情况下,甚至可以将其设置为基于对话框的应用程序。

答案 1 :(得分:0)

基本上我在基于dailog的应用程序中使用了CTreeCtrl,但这是我第一次使用SDI。我真的很感谢你为我提供这样的解决方案。我开发了一小段代码看看吧

void CFileView::OnFileOpen()
 { 
  // TODO: Add your command handler code here
 CString pathname,strLine; 
 CStdioFile File; 

 if(File.Open(pathname, CFile::modeRead)) // Open to read
 { 
  while(File.ReadString(strLine)) // Read file 
  { 
     int Position = 0; 
     CString Token; 
     Token = strLine.Tokenize(_T("-:,"), Position);
     HTREEITEM hRoot = m_wndFileView.InsertItem(Token, 0, 0);

     while(Token!="") 
     { 
         Token = strLine.Tokenize(_T("-:,"), Position); 
         HTREEITEM hSrc = m_wndFileView.InsertItem(Token, 0, 0, hRoot);
     } 
   } 
 }
}

就像我的意思是我将我的代码放在正确的函数中?即我们打开文件的地方。因为在客户端窗口中我没有得到任何东西而不是空白窗口。 SDI基于CTreeView类。 我现在已经清楚使用了tokenizer和树控制部分,但现在我很困惑,因为我根本没有在客户端窗口中获​​取任何内容:(