关于非模态对话框中全局变量的有关问题
关于非模态对话框中全局变量的问题
我在模态对话框a中 创建了非模态对话框b 然后我在b中设置了全局变量 CString m_b;
当我操作完了非模态对话框b之后(此时m_b的数值与开启b时发生了变化) 关闭了b 接着也关闭了对话框a 返回到a的上一级界面之后 再重新进入a 并打开b时 发现变量m_b的数值不是我设置的初始值 而是之前关闭b时的数值
也就是我关闭了对话框a和b 但是变量m_b的数值并未变化,请教各位大侠这是怎么回事
我关闭b是重载的OnCancel():
{
CDialog::OnCancel();
DestroyWindow();
}
关闭a是直接OnCancel();
------解决方案--------------------
m_b是对话框b的成员变量而不是全局变量吧?
------解决方案--------------------
发现变量m_b的数值不是我设置的初始值 而是之前关闭b时的数值
就是因为是全局变量啊
不知道你到底要实现什么功能
------解决方案--------------------
定义一个全局变量,把值赋给全局变量,就和对话框没关系了。
------解决方案--------------------
我在模态对话框a中 创建了非模态对话框b 然后我在b中设置了全局变量 CString m_b;
当我操作完了非模态对话框b之后(此时m_b的数值与开启b时发生了变化) 关闭了b 接着也关闭了对话框a 返回到a的上一级界面之后 再重新进入a 并打开b时 发现变量m_b的数值不是我设置的初始值 而是之前关闭b时的数值
也就是我关闭了对话框a和b 但是变量m_b的数值并未变化,请教各位大侠这是怎么回事
===============
你这里的CString m_b到底是b的成员变量还是全局变量啊?
如果是全局变量,不改变是正常的。
如果是成员变量,那么就要看非模态对话框b这个对象是如何定义的了。
------解决方案--------------------
我感觉你的m_b不是全局变量,而是类成员变量,楼主你的m_b在哪里声明的是在b对话框的头文件吗,如果是就是b对话框的成员变量了,一般全局变量是用g打头的,代表global,成员变量是用m打头的,代表member。如果你想定义全局变量的话,你可以在stdafx.cpp里定义,如CString g_b;,然后在stdafx.h里再加一句extern CString g_b;
那么这个变量你在哪里都可以用了。
更好的方法是你建立一个Global.cpp和Global.h来管理全局变量,每次要用到全局变量时就#include "Global.h"就可以了,我都是这样管理全局变量的。Global.cpp和Global.h不是类什么的,就是两个文件。
我在模态对话框a中 创建了非模态对话框b 然后我在b中设置了全局变量 CString m_b;
当我操作完了非模态对话框b之后(此时m_b的数值与开启b时发生了变化) 关闭了b 接着也关闭了对话框a 返回到a的上一级界面之后 再重新进入a 并打开b时 发现变量m_b的数值不是我设置的初始值 而是之前关闭b时的数值
也就是我关闭了对话框a和b 但是变量m_b的数值并未变化,请教各位大侠这是怎么回事
我关闭b是重载的OnCancel():
{
CDialog::OnCancel();
DestroyWindow();
}
关闭a是直接OnCancel();
------解决方案--------------------
m_b是对话框b的成员变量而不是全局变量吧?
------解决方案--------------------
发现变量m_b的数值不是我设置的初始值 而是之前关闭b时的数值
就是因为是全局变量啊
不知道你到底要实现什么功能
------解决方案--------------------
定义一个全局变量,把值赋给全局变量,就和对话框没关系了。
------解决方案--------------------
我在模态对话框a中 创建了非模态对话框b 然后我在b中设置了全局变量 CString m_b;
当我操作完了非模态对话框b之后(此时m_b的数值与开启b时发生了变化) 关闭了b 接着也关闭了对话框a 返回到a的上一级界面之后 再重新进入a 并打开b时 发现变量m_b的数值不是我设置的初始值 而是之前关闭b时的数值
也就是我关闭了对话框a和b 但是变量m_b的数值并未变化,请教各位大侠这是怎么回事
===============
你这里的CString m_b到底是b的成员变量还是全局变量啊?
如果是全局变量,不改变是正常的。
如果是成员变量,那么就要看非模态对话框b这个对象是如何定义的了。
------解决方案--------------------
我感觉你的m_b不是全局变量,而是类成员变量,楼主你的m_b在哪里声明的是在b对话框的头文件吗,如果是就是b对话框的成员变量了,一般全局变量是用g打头的,代表global,成员变量是用m打头的,代表member。如果你想定义全局变量的话,你可以在stdafx.cpp里定义,如CString g_b;,然后在stdafx.h里再加一句extern CString g_b;
那么这个变量你在哪里都可以用了。
更好的方法是你建立一个Global.cpp和Global.h来管理全局变量,每次要用到全局变量时就#include "Global.h"就可以了,我都是这样管理全局变量的。Global.cpp和Global.h不是类什么的,就是两个文件。