问题的由来:

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

实现方法:

class CDlg1: public CDialog

{

public:

int x;

……

}

class CDlg2: public CDialog

{

public:

int y;

void setdata(CDlg1 dlg1)

{

// 实现数据的传递

}

……

}

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

class CmyView: public CView

{

CDlg1 dlg1;          // 类中声明欲进行数据传递的对话框对象

CDlg2 dlg2;

void XXXXX()

{

dlg1.DoModal();   // 建立对话框1,重写OnInitial()函数

                  // 在OnInitial()函数中完成对话框1数据初始化工作

}

void YYYYY()

{

dlg2.y = dlg1.x;  // 传递数据

dlg2.DoModal();

}

}

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

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();

}

}

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

class CmyView: public CView

{

void DataExChange()

{

CDlg1 dlg1;

cDlg2 dlg2;

if(dlg1.domodel == idok)

{

dlg2.setdata(dlg1); // 把dlg1作为参数给dlg2用什么取什么

}

}

}

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

MFC不同窗口之间传递数据的更多相关文章

  1. IOS开发使用委托delegate在不同窗口之间传递数据

    IOS开发使用委托delegate在不同窗口之间传递数据是本文要介绍的内容,主要是来讲解如何使用委托delegate在不同窗口之间传递数据,具体内容来看详细内容.在IOS开发里两个UIView窗口之间 ...

  2. WinForm 中两个窗口之间传递数据

    方法有很多种,这里介绍项目中使用的两种 一.通过委托+事件的方法进行传值 (点击Form2中的button1按钮,将会把Form2中的textbox.text 传给Form1中的 lable.text ...

  3. C# 窗口间传递数据

    C#两个窗口之间传递数据 1 公用变量值传递 public partial class Form1 : Form //parent form { public string name="&q ...

  4. 用WM_COPYDATA消息来实现两个进程之间传递数据

    文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据. 进程之间通讯的几种方法:在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.常用的方法有   1.使用内存映射 ...

  5. Activity之间传递数据的方式及常见问题总结

    Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...

  6. Controller之间传递数据:属性传值

    在项目中,Controller之间传递数据非常之多,这里简单介绍一下属性传值.例如有FirstController 和 SecondController,数据从First传递到Second中,我们如何 ...

  7. Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口

    package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...

  8. 28、activity之间传递数据&批量传递数据

    import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android ...

  9. 【Android 复习】 : Activity之间传递数据的几种方式

    在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...

随机推荐

  1. Delphi 自带了 Base64 编解码的单元

    Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因.  这个单元提供两套四个公开函数:  对流的编解码: procedu ...

  2. Linux 删除特殊文件名的文件

    1.文件名含有特殊字符: 1) 执行 ls -i 命令 ,文件前面会出现一个数字,这个数字是文件的节点号 2) 使用find命令删除 find ./ -inum 节点号 -delete 2.文件名是以 ...

  3. 做Data Mining,其实大部分时间都花在清洗数据

    做Data Mining,其实大部分时间都花在清洗数据 时间 2016-12-12 18:45:50  51CTO 原文  http://bigdata.51cto.com/art/201612/52 ...

  4. Ubuntu安装 docker

    安装docker首先要需要一台宿主机, 我目前用VMvare下安装的Ubuntu16.04系统为宿主机,进行docker安装测试. ubuntu安装时选的中文环境,生成的sources.list里面的 ...

  5. redis 服务器端安装(三)

    redis 服务器端安装(三) Redis is an open source, BSD licensed, advanced key-value store. It is often referre ...

  6. ajax请求controller出现中文乱码

    ajax请求controller出现中文乱码 解决方法:在 @RequestMapping 中加上  produces = {"application/json;charset=UTF-8& ...

  7. 使用Bochs学习硬件原理

    什么是Bochs? 简单地说,Bochs是一款仿真软件,可以用软件的方式模拟硬件的工作.同类软件有Qemu,仿真软件与虚拟机(hypervisor)还不完全相同,仿真软件是完全软件模拟硬件,而虚拟机软 ...

  8. 2018 China Collegiate Programming Contest Final (CCPC-Final 2018)(A B G I L)

    A:签到题,正常模拟即可. #include<bits/stdc++.h> using namespace std; ; struct node{ int id, time; }; nod ...

  9. 【python】 读写文件

    #标准输出 sys.stdout.write() sys.stderr.write() #标准输入 while True : try: line = raw_input().rstrip(); exc ...

  10. 【python】 编码转换

    #转码 def utf2gbk(string): #return string s=string.decode('utf-8','ignore').encode('gb18030','ignore') ...