请教基于单文档MFC读取TXT文件画图的问题
你好:我是初学MFC的同学,在学了一段时间后,对于MFC内部工作逻辑的理解很混乱。刚看到一篇你关于这方面问题的回复,不过是基于对话框的吧。我现在建立了基于单文档的MFC工...
你好:
我是初学MFC的同学,在学了一段时间后,对于MFC内部工作逻辑的理解很混乱。刚看到一篇你关于这方面问题的回复,不过是基于对话框的吧。
我现在建立了基于单文档的MFC工程。想在点击按钮控件后,用户能够从电脑里选择文件(TXT),该工程获取文件名。
再读取该未知大小TXT文件内部的数据。文件内数据是一个n*3的矩阵。然后再对数据进行处理,并画图。
不知道从 按钮->选择文件->读取矩阵数据 这一个步骤的标准程序该怎么写呢? (基于单文档形式的)
这个问题真的困扰了我很久。希望能得到解答。谢谢。
现在财富只有25,只能悬赏20了~ 展开
我是初学MFC的同学,在学了一段时间后,对于MFC内部工作逻辑的理解很混乱。刚看到一篇你关于这方面问题的回复,不过是基于对话框的吧。
我现在建立了基于单文档的MFC工程。想在点击按钮控件后,用户能够从电脑里选择文件(TXT),该工程获取文件名。
再读取该未知大小TXT文件内部的数据。文件内数据是一个n*3的矩阵。然后再对数据进行处理,并画图。
不知道从 按钮->选择文件->读取矩阵数据 这一个步骤的标准程序该怎么写呢? (基于单文档形式的)
这个问题真的困扰了我很久。希望能得到解答。谢谢。
现在财富只有25,只能悬赏20了~ 展开
3个回答
展开全部
一、建立MFC单文档,定义View类的成员变量CButton m_button,在***View类中添加OnCreate 或OnInitialUpdate 函数,并在函数中加入
CRect rect_button(40,10,200,60); //控制按钮大小、位置
m_button.Create("hello",WS_CHILD|WS_VISIBLE|WS_BORDER,rect_button,this,IDC_DYNAMICBUTTON);
m_button.ShowWindow(SW_SHOWNORMAL);
这样按钮应该都可以显示出来了。
二、然后添加消息响应函数。头文件中加入afx_msg void OnBtnDown();
BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 之间加入ON_BN_CLICKED(IDC_DYNAMICBUTTON,OnBtnDown) 关联按钮变量; 最后加入定义
void ***View::OnBtnDown() //读物txt文件
{
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.txt)|*.txt||",NULL);
if(dlg.DoModal()==IDOK)
{
CString text_addr;
text_addr=dlg.GetPathName();
CStdioFile file;
file.Open(text_addr,CFile::modeRead);
///////////////////////////
..........这个过程你就读一行画一行就行了
/////////////////////////
file.Close();
}
}
CRect rect_button(40,10,200,60); //控制按钮大小、位置
m_button.Create("hello",WS_CHILD|WS_VISIBLE|WS_BORDER,rect_button,this,IDC_DYNAMICBUTTON);
m_button.ShowWindow(SW_SHOWNORMAL);
这样按钮应该都可以显示出来了。
二、然后添加消息响应函数。头文件中加入afx_msg void OnBtnDown();
BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 之间加入ON_BN_CLICKED(IDC_DYNAMICBUTTON,OnBtnDown) 关联按钮变量; 最后加入定义
void ***View::OnBtnDown() //读物txt文件
{
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.txt)|*.txt||",NULL);
if(dlg.DoModal()==IDOK)
{
CString text_addr;
text_addr=dlg.GetPathName();
CStdioFile file;
file.Open(text_addr,CFile::modeRead);
///////////////////////////
..........这个过程你就读一行画一行就行了
/////////////////////////
file.Close();
}
}
更多追问追答
追问
首先谢谢你这么详细而又清晰的回答,谢谢。
但是还是有几个问题。对于这个n*3的矩阵数据,我之后是要进行一定处理的。例如对每一列进行FFT变换。之后再画出原来每一列数据的正弦波图形及FFT变换后的图形。
所以,问题是打开文件后,上面代码中的数据是怎样存储的呢?而且文件大小是未知的。
再次谢谢,初次在网上提问,便得到这么详细耐心的解答,谢谢。
追答
你的意思是怎么把这个n*3的数据具体保存起来而不是用字符串吗?我不是很理解你的意思,假设
数据是这样:
1 2 3
2 3 4
然后你的意思是怎么把这六个数字保存起来吗?
展开全部
按钮这一步我想你应该知道,点击按钮后可以在消息函数里打开一个个打开文件对话框(打开文件对话框通过设置可以使得文件对话框中仅仅显示你需要的数据类型),在打开文件对话框里选择你需要的文件,按确定,文件对话框关闭,之后你可以通过文件对话框的GetPathName函数获取你选择的文件路径及文件名,之后如何打开和读取文件数据就应该很容易了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-05-09 · 知道合伙人软件行家
关注
展开全部
void CXXXXXDlg::OnOpen()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle="文件打开对话框";
fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
fileDlg.m_ofn.lpstrDefExt="txt";
if(IDOK==fileDlg.DoModal())
{
CFile file(fileDlg.GetFileName(),CFile::modeRead);
strcpy(namepath, fileDlg.GetPathName());//全路径
m_Open+=fileDlg.GetFileName();//文件名//m_Open为编辑框的CString型变量
// MessageBox(namepath);
UpdateData(FALSE);
}
}
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle="文件打开对话框";
fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
fileDlg.m_ofn.lpstrDefExt="txt";
if(IDOK==fileDlg.DoModal())
{
CFile file(fileDlg.GetFileName(),CFile::modeRead);
strcpy(namepath, fileDlg.GetPathName());//全路径
m_Open+=fileDlg.GetFileName();//文件名//m_Open为编辑框的CString型变量
// MessageBox(namepath);
UpdateData(FALSE);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询