6468|20

62

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请高手帮忙!!!一个对话框保存两套数据 [复制链接]

在EVC里,我点击一个按钮进入A对话框,A对话框中有一些EDIT控件用来存放数据,还有一个保存按钮,一个返回按钮,
点保存按钮A对话框中的EDIT控件数据保存下来。
A对话框中还有一个按钮需要实现的功能是:点击后还是切换到A对话框,只是标题和EDIT控件的数据换成B的,点保存按钮的时候
保存的也是B的数据。
怎样实现?

最新回复

我定义的两个数据: typedef struct _CData { int a; int b; }CData; private: CList m_lstset; int m_iCurPos=0; 初始化里面是: BOOL CGYSet::OnInitDialog()    CData setdata;   if()//数据文件存在,则读取   else  //创建数据         if(m_lstset.GetCount()>0) //初始化界面显示         {                   setdata=m_lstGyset.GetHead();           m_iCurPos=0;           m_edit1=setdata.a;                  UpdateData(false);         } 保存里面是: void CGongYiSet::OnSave() {         // TODO: Add your control notification handler code here    CData setdata;    CFile gyFile;    UpdateData();         if(m_lstGyset.IsEmpty()) //添加操作         {         ZeroMemory(&gysetdata,sizeof(gysetdata));        setdata.a=m_Edit1;                    gyFile.Open(GYSETFILEPATH,CFile::modeRead|CFile::modeWrite);        gyFile.SeekToEnd();            gyFile.Write(&gysetdata,sizeof(gysetdata));            gyFile.Close();            m_lstGyset.AddTail(gysetdata);            UpdateData(false);         }         else    //编辑操作         {          ZeroMemory(&gysetdata,sizeof(gysetdata));         setdata.a=m_Edit1;          gyFile.Open(GYSETFILEPATH,CFile::modeRead|CFile::modeWrite);      gyFile.Seek(sizeof(gysetdata)*(m_iCurPos),CFile::begin);          gyFile.Write(&gysetdata,sizeof(gysetdata));          gyFile.Close();          m_lstGyset.SetAt(m_lstGyset.FindIndex(m_iCurPos),gysetdata);          UpdateData(false);         } 切换到b的按钮??? void CGongYiSet::OnRGYSet() { }  详情 回复 发表于 2009-4-21 15:49
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
找API大全
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
就是切换窗口的那个按钮不会做,不知道要用到EVC的什么知识呢?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
标题和EDIT控件的数据要换成B的内容,先GetDlgItem,再SetWindowText
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
找本基本的VC书看看
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
用GetDlgItem和SetWindowText可以改变,但是不知道怎么保存?5555
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

7
 
这个应该是比较基本的东西。
给你个思路:网上搜一下 两个对话框间通信 有类似的例子。

还有一个很简单的方法:就是用全局变量 两个对话框都能用它
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
我刚刚问了下,是先将B的数据也定义在一个全局变量的结构体中,然后用Seek函数定位。
具体怎么弄还不清楚
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
自己用一个变量区分一下,是否点击某个按钮,点击就保存到b
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 
typedef struct _CGysetData
{
    int f;
    int n;
    int w;
    double c;
   
    int fr;
    int nr;
    int wr;
    double cr;
}CGysetData;
void CGongYiSet::OnSave()
{

   CGysetData gysetdata;
   CFile gyFile;

CString strL,strR,str;
strL="left data set";
strR="right data set";
   UpdateData();
        if(m_lstGyset.IsEmpty())
        {  ZeroMemory(&gysetdata,sizeof(gysetdata));
if(GetDlgItem(IDC_R_GYSet)->GetWindowText(str),str==strR)
        {
       gysetdata.f=m_F;
       gysetdata.n=m_N;
       gysetdata.w=m_W;
       gysetdata.c=m_C;
      
         gyFile.Open(GYSETFILEPATH,CFile::modeRead|CFile::modeWrite);
     //  gyFile.SeekToEnd();
gyFile.Seek(sizeof(gysetdata)/2*(m_iCurPos),CFile::begin);
           gyFile.Write(&gysetdata,sizeof(gysetdata)/2);
           gyFile.Close();
           m_lstGyset.AddTail(gysetdata);
       
           UpdateData(false);
        }
        if(GetDlgItem(IDC_R_GYSet)->GetWindowText(str),str==strL)
        {
       gysetdata.fr=m_F;
       gysetdata.nr=m_N;
       gysetdata.wr=m_W;
       gysetdata.cr=m_C;
      gyFile.Open(GYSETFILEPATH,CFile::modeRead|CFile::modeWrite);
   //  gyFile.SeekToEnd();
gyFile.Seek(sizeof(gysetdata)/2*(m_iCurPos),CFile::end);
           gyFile.Write(&gysetdata,sizeof(gysetdata)/2);
           gyFile.Close();
           m_lstGyset.AddTail(gysetdata);
       
           UpdateData(false);}
        }

        else
        {
          ZeroMemory(&gysetdata,sizeof(gysetdata));
   if(GetDlgItem(IDC_R_GYSet)->GetWindowText(str),str==strR)
   {
     gysetdata.f=m_F;
     gysetdata.n=m_N;
     gysetdata.w=m_W;
     gysetdata.c=m_C;
     
     gyFile.Open(GYSETFILEPATH,CFile::modeRead|CFile::modeWrite);
     gyFile.Seek(sizeof(gysetdata)/2*(m_iCurPos),CFile::begin);
         gyFile.Write(&gysetdata,sizeof(gysetdata)/2);
         gyFile.Close();
         m_lstGyset.SetAt(m_lstGyset.FindIndex(m_iCurPos),gysetdata);

  }
   if(GetDlgItem(IDC_R_GYSet)->GetWindowText(str),str==strL)
        {
         gysetdata.fr=m_F;
     gysetdata.nr=m_N;
     gysetdata.wr=m_W;
     gysetdata.cr=m_Cwbsd;
     

          gyFile.Open(GYSETFILEPATH,CFile::modeRead|CFile::modeWrite);
     gyFile.Seek(sizeof(gysetdata)/2*(m_iCurPos),CFile::end);
         gyFile.Write(&gysetdata,sizeof(gysetdata)/2);
         gyFile.Close();
         m_lstGyset.SetAt(m_lstGyset.FindIndex(m_iCurPos),gysetdata);
   }

}
        }
请问这个保存按钮的问题在哪里呀?为什么就是保存不了两套数据呢?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

11
 
gyFile.Write(&gysetdata,sizeof(gysetdata)/2);

既然是将gysetdata写到文件去,size为什么设定为一半呢?后面一半的数据不写吗?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 
因为我要把前一半数据写到A对话框,当A对话框变成B对话框后,要把后一半数据写进去!
 
 
 

回复

63

帖子

0

TA的资源

禁止发言

13
 
感觉设计的好复杂...
干脆用两个对话框实例还不是简单点。
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

14
 
用两个对话框的已经实现了,可是要求让我用一个对话框实现,无助ing!
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

15
 
A(A的标题,A的edit控件,保存按钮-保存A数据,返回按钮,切换按钮)
点击切换按钮->
A(B的标题,B的edit控件,保存按钮-保存B数据,返回按钮)

点了后换标题没问题吧。

点击保存,就判断当前是A还是B,判断条件可以由一个BOOL变量来控制:启动时默认0,表示A,在A下点击“切换按钮”变成B时,BOOL量设成1,表示B。
保存时,BOOL量决定保存到A,还是保存到B。

easy?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

16
 
设计前,LZ自己想好处理逻辑没?
如果想清楚了,实现还有问题?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

17
 
给你个思路,我就是这么做的。
在一个窗口内设置A. B两套控件,用一个变量保存状态 如flag
if(1 == flag)
{
  (1) 初始化A的说有控件。
   (2)更新窗口.
}else
{
   (1)初始化b的空间
    (2)更新窗口
}

这个flag 就在你的切换按钮的处理函数里做。

保存也很简单。

基本上在一个对话框中处理,技巧只是“处理下显示”问题。
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

18
 
给你个思路,我就是这么做的。
在一个窗口内设置A. B两套控件,用一个变量保存状态 如flag
if(1 == flag)
{
  (1) 初始化A的说有控件。
  (2)更新窗口.
}else
{
  (1)初始化b的空间
    (2)更新窗口
}

这个flag 就在你的切换按钮的处理函数里做。


在onpaint函数里 根据flag 来绘制你所需要窗口。A B 数据交互,切换就非常简单了。
保存也很简单。

基本上在一个对话框中处理,技巧只是“处理下显示”问题。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

19
 
我觉得也是   用状态标志位来区分AB可能就可以了
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

20
 
一份控件EDIT1,AB两份数据(比如CString a,b),还有个BOOL变量来区分AB
if( boolA)
{
    GetDlgItem(IDC_EDIT1)->SetWindowText(a);
    boolA = FALSE;
}
else
{
    GetDlgItem(IDC_EDIT1)->SetWindowText(b);
    boolA = TRUE;
}
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表