sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1476回复:11

问个最初级的问题,多个窗体之间的变量、过程访问?

楼主#
更多 发布于:2005-03-26 13:00
就是说dialog1和dialog2
dialog1中像这样执行:if(x=1){执行dialog2.button1click事件}
同时button1click事件中又使用了dialog1中的变量。请教各位专家!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2005-03-26 13:48
把要共享的指令数据放在共享段中....
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-26 18:53
我是初学者,能否简单举例说明,谢谢!
还有在机器上运行程序的时候提示信息如下:Communicatioin:File dlgdata.cpp,Line 52;标题栏:Assertion Failed!

请问如何解释,还有我如何能知道程序的行数,我的程序是几个对话框,但是程序里没有dlgdata.cpp文件!
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-27 14:45
共享的变量声明为public或定义为全局变量,
Assertion Failed
检查你的 ASSERT语句,说明运行中某些条件未满足
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-03-27 16:13
就是说dialog1和dialog2
dialog1中像这样执行:if(x=1){执行dialog2.button1click事件}
同时button1click事件中又使用了dialog1中的变量。请教各位专家!

dialog2是无模式的还是模式的?窗体已经创建了吗?
hasis
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2006-04-03
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-28 13:38
你的问题分两种情况:

情况一:在第一个对话框关闭时取得变量值
第一个窗口中操作如下代码,可实现(如点击某按钮)
第一个窗口的m_strFirst变量可获取第二个窗口的m_strName变量值
CNEWDLG dlg;
if (dlg.DoModal() == IDOK)
{
m_strFirst = dlg.m_strName;
}
AfxMessageBox(m_strFirst);


情况二:两个对话框都存在时互相取值
方法为:
第一个对话框通过#include对方头文件,实现第一个对话框成员变量向第二个对话框成员

变量的赋值;
而第二个对话框通过在其头文件中引用,实现第二个对话框成员变量向第一个对话框成员

变量的赋值。

设两个对话框类为CFirstDlg 和 CSecondDlg

CFirstDlg在其头文件中#include \"SecondDlg.h\",在其中定义成员变量:
CSecondDlg* m_hFirstDlg;
在CFirstDlg的实现文件中,在实现部分创建对话框,同时实现CFirstDlg成员变量向CSecondDlg成员变量的赋值,也可以调用CSecondDlg的成员函数。


而在CSecondDlg的头文件的开始处,不能再反过来#include,因为如果你写入
#include \"FirstDlg.h\",将造成重复引用,编译会出错。//这可能就是你不能实现的原因
解决方法为
在CSecondDlg的头文件的开始处,写上Class CFirstDlg; //import
使用引用(import)的方法,引入第一个单元文件,这样编译就不会出错,同时就可以实现相反方向的成员变量赋值。

大学课程加上语文吧,否则在驱网里都不会提问题:)
hasis
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2006-04-03
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-03-28 13:44
还有也要看你的实际情况了,
如arthurtu言,是模态还是非模态。
在你if(x)时,第二个对话框是已经创建好,还是在此语句之前创建的。

如你方便,可将你的具体需求和你出问题的代码发给我hasis@126.com
大学课程加上语文吧,否则在驱网里都不会提问题:)
sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-03-29 10:22
窗体是模态的,意思就是窗体A、B;
//A.cpp//
#include \"b.h\"
int data;
if(串口来数据)
{
   窗口数据传给data;
   if(窗体B已经打开)
     执行b.fuction(data);
}
如何实现?
b.function(int bdata)
{
   能否确保data传给了bdata?
}
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2005-03-30 00:34
[quote]就是说dialog1和dialog2
dialog1中像这样执行:if(x=1){执行dialog2.button1click事件}
同时button1click事件中又使用了dialog1中的变量。请教各位专家!

dialog2是无模式的还是模式的?窗体已经创建了吗? [/quote]

有模式 消息只能在一个循环中。
琢磨悟真知
sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-03-30 16:26
消息只能在一个循环中何解?
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-03-31 17:15
同一进程中的各个线程尚且共享数据\\代码段,各个窗体共享更没问题.(当然,线程有数据同步问题,TLS,COM接口的共享...,都是要注意的,可我估计跟你没关系).
你要把代码贴出来,好让人看看问题在哪里.
另外,\"执行dialog2.button1click事件\"违反了Windows的消息驱动的初衷.这样写不是好的代码.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-03-31 19:59

Cnewdilog g_aircon;
//LonRead是在定时器中建立的一个线程,我这样做为什么要么运行出错,关闭应用程序
要么根本不执行singleaircon()
//singleaircon是newdialog窗体中的数据处理函数

DWORD WINAPI CMainDlg::LonRead(LPVOID lpArg)
{
// Route the method to the actual object
CMainDlg* pThis = reinterpret_cast<CMainDlg*>(lpArg);
return pThis->LonRead();
}

DWORD CMainDlg::LonRead()
{
    if(pc104interval)
    {
  for(int sss=0;sss<100;sss++)
     g_aircon.airdata[sss]=data[sss+0x80*j];
  if(g_aircon.m_hWnd!=NULL)
             {
                g_aircon.singleaircon();
             }
    }
    pc104interval=FALSE;
    return 0;
游客

返回顶部