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