bcm1983 发表于 2009-2-10 15:11

关于用C++程序利用MFC制作可视化界面的问题

关于用C++程序利用MFC制作可视化界面的问题?

现在我用MFC做一个简单的可视化界面
共分为两页,但是在每一页上都要有一个按钮执行
才能将该页上的数据输入到指定文本.txt中,
这样的话当页数比较多时就比较烦了,为此能否在最后一页
只用一个按钮将每页上的数据均输入到指定文本里?

第一个输出按钮下的命令如下:

void CPage1::OnButton1()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
FILE*out1=fopen("E:\\可视界面制作\\lianxi\\b1.txt","w");
fprintf(out1,"%d\n",m_a);
fprintf(out1,"%d\n",m_b);
fprintf(out1,"%d\n",m_c);
fprintf(out1,"%f\n",m_d);
fclose(out1);
UpdateData(FALSE);
}

第二个输出按钮下的命令如下:
void CPage2::OnButton1()
{
// TODO: Add your control notification handler code here

UpdateData(TRUE);
int a,b,c;
double d;
FILE*in=fopen("E:\\可视界面制作\\lianxi\\b1.txt","rt");    将第一页中数据打开
FILE*out2=fopen("E:\\可视界面制作\\lianxi\\b2.txt","w");
fscanf(in,"%d",&a);将第一页中数据赋值给a
fscanf(in,"%d",&b);将第一页中数据赋值给b
fscanf(in,"%d",&c); 将第一页中数据赋值给c
fscanf(in,"%lf",&d);
fprintf(out2,"%d\n",a);
fprintf(out2,"%d\n",b);
fprintf(out2,"%d\n",c);
fprintf(out2,"%f\n",d);
fprintf(out2,"%f\n",m_aa);
fprintf(out2,"%f\n",m_bb);
fclose(in);                  /*开始清理*/
fclose(out2);
UpdateData(FALSE);
}

当然,这样也能将两页上的数据输入到一个文本,就是比较麻烦
有没有能在第二页上,
用一个按钮就能将第一页的数据赋值到第二页中在进行输出

现在实现不了
请大家给与帮助!
谢谢!!!

logxing 发表于 2009-2-10 16:09

激活第二页时自动读入第一页的数据,第二页的按钮只负责输出功能。不知道能否满足你的要求。

bcm1983 发表于 2009-2-10 22:06

原帖由 logxing 于 2009-2-10 16:09 发表 http://www.chinavib.com/forum/images/common/back.gif
激活第二页时自动读入第一页的数据,第二页的按钮只负责输出功能。不知道能否满足你的要求。

请问如何才能
激活第二页时自动读入第一页的数据?

另外,第一页和第二页都是建立在
CPage1 page1;
CPage2 page2;
CPropertySheet sheet("属性表格");
sheet.AddPage(&page1);
sheet.AddPage(&page2);
sheet.DoModal();

就是将第一页的数据读不到第二页中,
比方说:
#include "page1.h"
#include "page2.h"

void CPage2::OnButton1()
{
// TODO: Add your control notification handler code here

UpdateData(TRUE);

FILE*out2=fopen("E:\\可视界面制作\\lianxi\\b2.txt","w");
fprintf(out2,"%f\n",m_a);   //m_a是第一页中的数据;

fclose(out2);
UpdateData(FALSE);
}

这样也是不行的!不知为什么?
请问有没有好的解决办法?

cooller 发表于 2009-2-13 00:00

如果真是想这样操作的话,我的建议:
将第一页的类A作为第二页类B的成员,这样可以在类B中对类A进行操作。

logxing 发表于 2009-2-13 10:07

m_a在哪定义的,应该是在A中吧,定义为static再在B中读取。
楼主不如把代码打包发上来。方便别人直接调试。

bcm1983 发表于 2009-2-13 14:36

CPropertySheet* pSheet1 = (CPropertySheet*)GetParent();//得到属性表的指针
CPage1 *pPage1= (CPage1 *)(pSheet1->GetPage(0)); //得到指定页的指针
CPage2 *pPage2= (CPage2 *)((CPropertySheet*)GetParent())->GetPage(1);
CPage3 *pPage3= (CPage3 *)((CPropertySheet*)GetParent())->GetPage(2);

pPage1->UpdateData(TRUE);
pPage2->UpdateData(TRUE);
pPage3->UpdateData(TRUE);
int a=pPage1->m_jizu;
double b=pPage1->m_cd;
double c=pPage2->m_p2;
double d=pPage3->m_cc;
// CString str1,str2;
// str1.Format("机组%d",a);
// str2.Format("管长%f",b);
// MessageBox(str1+str2);
pPage1->UpdateData(FALSE);
pPage2->UpdateData(FALSE);
pPage2->UpdateData(FALSE);
UpdateData(TRUE);
FILE*out2=fopen("E:\\shiyan1\\shuchu.txt","w");

fprintf(out2,"%d,%10.3f\n",a,b);
fprintf(out2,"%10.3f\n",c);
fprintf(out2,"%10.3f\n",d);
fclose(out2);
UpdateData(FALSE);

这个问题解决了主要用了这一句就行了,
CPropertySheet* pSheet1 = (CPropertySheet*)GetParent();//得到属性表的指针
CPage1 *pPage1= (CPage1 *)(pSheet1->GetPage(0)); //得到指定页的指针
谢谢大家了!
页: [1]
查看完整版本: 关于用C++程序利用MFC制作可视化界面的问题