zoukankan      html  css  js  c++  java
  • MFC不同窗口之间传递数据

    问题的由来:

             最近在学习串口通信编程,参考的例子大多数都是在一个对话框中同时完成对串口的配置及数据收发的功能。这种方式不太适合于写自己的应用程序(会使得程序界面比较混乱,无法突出程序的重点),因此想让串口的参数配置在一个独立的对话框中进行设置,而后在主程序窗口实现串口通信的消息循环。这样就涉及到了两对话框数据的传递的问题。上网查阅了相关资料根据自己的使用需求和理解整理一番。

    实现方法:

    class CDlg1: public CDialog
    
    {
    
    public:
    
    int x;
    
    ……
    
    }
    
     
    
    class CDlg2: public CDialog
    
    {
    
    public:
    
    int y;
    
    void setdata(CDlg1 dlg1)
    
    {
    
    // 实现数据的传递
    
    }
    
    ……
    
    }
    View Code

    方法一:通过成员函数实现不同对话框之间数据的传递

    class CmyView: public CView
    
    {
    
    CDlg1 dlg1;          // 类中声明欲进行数据传递的对话框对象
    
    CDlg2 dlg2;
    
     
    
    void XXXXX()
    
    {
    
    dlg1.DoModal();   // 建立对话框1,重写OnInitial()函数
    
                      // 在OnInitial()函数中完成对话框1数据初始化工作
    
    }
    
    void YYYYY()
    
    {
    
    dlg2.y = dlg1.x;  // 传递数据
    
    dlg2.DoModal();
    
    }
    
    }
    View Code

    方法二:通过类的成员变量实现数据的传递(适用于参数较少的情况)

    class CmyView: public CView
    
    {
    
    int z;
    
    void XXZZ()
    
    {
    
    CDlg1 dlg1;
    
    dlg1.DoModal();
    
    z = dlg1.x;       // 将对话框1数据保存于类中的成员变量中
    
    }
    
    void ZZYY()
    
    {
    
    CDlg2 dlg2;
    
    dlg2.y = z;       // 将成员变量值赋予对话框2对应变量
    
    dlg2.DoModal();
    
    }
    
    }
    View Code

    方法三:将对话框1对象作为参数传递给对话框2的成员函数,在成员函数中实现参数的传递

    class CmyView: public CView
    
    {
    
    void DataExChange()
    
    {
    
    CDlg1 dlg1;
    
    cDlg2 dlg2;
    
    if(dlg1.domodel == idok)
    
    {
    
    dlg2.setdata(dlg1); // 把dlg1作为参数给dlg2用什么取什么
    
    }
    
    }
    
    }
    View Code

    还可以传递对象的一个指针或引用。

  • 相关阅读:
    内部类的作用
    zookeeper(1)-概述
    @RequestBody、@ResponseBody注解是如何将输入输出转换成json的
    HashMap之红黑树
    HashMap深入理解
    SpringBoot的四种定时任务
    Redis基础
    Redis内存回收机制
    高频面试题
    36. Valid Sudoku
  • 原文地址:https://www.cnblogs.com/blogpro/p/11340338.html
Copyright © 2011-2022 走看看