问题的由来:
最近在学习串口通信编程,参考的例子大多数都是在一个对话框中同时完成对串口的配置及数据收发的功能。这种方式不太适合于写自己的应用程序(会使得程序界面比较混乱,无法突出程序的重点),因此想让串口的参数配置在一个独立的对话框中进行设置,而后在主程序窗口实现串口通信的消息循环。这样就涉及到了两对话框数据的传递的问题。上网查阅了相关资料根据自己的使用需求和理解整理一番。
实现方法:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class CDlg1: public CDialog { public: int x; …… } class CDlg2: public CDialog { public: int y; void setdata(CDlg1 dlg1) { // 实现数据的传递 } …… }
方法一:通过成员函数实现不同对话框之间数据的传递
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class CmyView: public CView { CDlg1 dlg1; // 类中声明欲进行数据传递的对话框对象 CDlg2 dlg2; void XXXXX() { dlg1.DoModal(); // 建立对话框1,重写OnInitial()函数 // 在OnInitial()函数中完成对话框1数据初始化工作 } void YYYYY() { dlg2.y = dlg1.x; // 传递数据 dlg2.DoModal(); } }
方法二:通过类的成员变量实现数据的传递(适用于参数较少的情况)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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的成员函数,在成员函数中实现参数的传递
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class CmyView: public CView { void DataExChange() { CDlg1 dlg1; cDlg2 dlg2; if(dlg1.domodel == idok) { dlg2.setdata(dlg1); // 把dlg1作为参数给dlg2用什么取什么 } } }
还可以传递对象的一个指针或引用。