声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3763|回复: 5

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

[复制链接]
发表于 2009-2-10 15:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
关于用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);
}

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

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

第一页

第一页

第二页

第二页
回复
分享到:

使用道具 举报

发表于 2009-2-10 16:09 | 显示全部楼层
激活第二页时自动读入第一页的数据,第二页的按钮只负责输出功能。不知道能否满足你的要求。
 楼主| 发表于 2009-2-10 22:06 | 显示全部楼层


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

另外,第一页和第二页都是建立在
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);
}

这样也是不行的!不知为什么?
请问有没有好的解决办法?
发表于 2009-2-13 00:00 | 显示全部楼层
如果真是想这样操作的话,我的建议:
将第一页的类A作为第二页类B的成员,这样可以在类B中对类A进行操作。
发表于 2009-2-13 10:07 | 显示全部楼层
m_a在哪定义的,应该是在A中吧,定义为static再在B中读取。
楼主不如把代码打包发上来。方便别人直接调试。
 楼主| 发表于 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)); //得到指定页的指针
谢谢大家了!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-28 14:07 , Processed in 0.126520 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表