问题的由来:

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

实现方法:

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. SQL语句中,除数为0时,相应方法

    在sql中做除法处理的时候,可能需要处理除数为零的情况. (1).case语句处理方法是用case when ... else 来处理 (2).nullif函数nullif函数有两个参数,定义如下:N ...

  2. 如何写一个bat文件,让他去执行某一个地方的bat文件

    新建一个bat文件,里面编写如下内容:@echo offcall 你bat文件的路径\startup.bat pause --------------------------------------- ...

  3. angular项目引用第三方公共js文件

    由于项目需要,领导要求在正在开发的angular项目中,引入公共js,以便进行统计计算. 于是便各种找度娘,网上有好多引用jquery插件的例子,于是便按照步骤对自身项目进行了改造,先记录一下: st ...

  4. [HDU2604]Queuing

    题目:Queuing 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 分析: 1)将当前格和上一格合并当作一个状态,考虑下一个格子放0(m)还是1( ...

  5. 阿里云使用ssl免费证书

    购买免费证书 购买之后 申请证书 该域名必须添加一条TXT记录 根据提示添加记录 下载证书 我用的nginx做的映射,所以下载nginx nginx安装自行百度 将下载的文件解压到nginx目录下(创 ...

  6. Day 45 Mysql 数据库练习题二

    1.表关系   注意:创建表时,根据合理性设置字段的长度和类型. 2.下面:开始你的表演 1.查询所有人员信息 select * from ren 2.只查询人员的姓名和年龄 select name, ...

  7. git使用记录九:开发中临时加塞了紧急任务怎么处理

    开发中临时加塞了紧急任务怎么处理 隐藏工作区域 git stash git status 查询隐藏的列表 git stash list 处理完bug,提交之后,再恢复隐藏的工作区域 git stash ...

  8. Oracle 11g Compound Trigger

    Original Link In Oracle 11g, the concept of compound trigger was introduced. A compound trigger is a ...

  9. 【笔记目录2】ASP.NET Core分布式项目实战

    当前标签: ASP.NET Core分布式项目实战 共2页: 上一页 1 2  11.ClientCredential模式总结 GASA 2019-03-11 12:59 阅读:26 评论:0 10. ...

  10. 【目录】redis 系列篇

    随笔分类 - redis 系列篇 redis 系列27 Cluster高可用 (2) 摘要: 一. ASK错误 集群上篇最后讲到,对于重新分片由redis-trib负责执行,关于该工具以后再介绍.在进 ...