如何定义和使用全局变量? 我有一个对话框程序,又增加了一个设置对话框,用以对主对话框程序中的一些参数进行设置,主对话框有一“设置”按钮以显示设置对话框,在设置对话框中如何获取主对话框中的数据?并在按“确认”按钮后将改动后的值传回主对话框?(也就是全局变量的问题,在C++中不提倡使用全局变量,那这个问题如何解决?) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 class CDialogA: public CDialog{...};class CDialogB: public CDialog{...};CDialogA::OnConfig(){ CDialogB b; b.m_pdlga = this; if(b.DoModal()) { ... }} 不要用全局变量。基本原则是,不要让设置对话框意识到主对话框的存在。假设主对话框类:CDlgMain设置对话框,假设是CDlgSetting不要让设置对话框去取主对话框的数据,让主对话框把需要的数据传给设置对话框,设置对话框加一个方法接受数据:void CDlgSetting::InitializeData(...);主对话框在创建设置对话框后,调用CDlgSetting::InitializeData把需要的数据告诉CDlgSetting:void CDlgMain::OnOpenSettingDlg(){CDlgSetting dlgSetting;dlgSetting.InitializeData(...);if (dlgSetting.DoModal()==IDCANCEL) return;设置对话框退出后,不要主动把数据交给主对话框,而是让主对话框来取。设置对话框加一个函数用来取出数据:void CDlgSetting::RetrievalData(CData & data);这样,主对话框主动取出数据:void CDlgMain::OnOpenSettingDlg(){CDlgSetting dlgSetting;dlgSetting.InitializeData(...);if (dlgSetting.DoModal()==IDCANCEL) return;CData data;dlgSetting.RetrievalData(data);...//然后就可以使用data中的数据。这样就不需要全局变量。 1。可以用主对话框的指针以获得成员变量2。定义static变量,然后调用。(一定要初始化!) HKer_007(健康),static变量跟全局变量没什么本质的差别吧 定义全局变量 int number : extern int number; 对于设置对话框调用主对话框: 主对话框用全局变量表示,这样就可以调用了(其实VC自动生成了吧?)!主对话框调用设置对话框中的内容,如下所示:void CMainDlg::SomeFunction(){ CSetupDlg dlg; if (dlg.DoModal() == IDCANCEL) return; int count = dlg.count;}其实 VC 并不是完全面向对象的,所以没有那么多讲究,解决问题才是关键!有的事情很简单,但有人却使它不简单! 同意stonespace(stonespace) 的做法。 你重载一个设置对话框的构造函数,在那里面把主对话框的变量的地址传进去,然后通过地址改值。如果要更新主对话框的显示,调用GETPARENT()->UPDATEDATA()就行。 滚动条处理绘图? Link2005 错误,大侠帮忙! CStatic 里面的字在刷新的时候又要求透明,能实现吗?? CMFCPropertyGridProperty能否实现格子上移下移操作? 放分:一个简单的函数调用,让你的程序拥有XP风格的皮肤,还可以自己定制皮肤! 那儿有vc1.0下载 500分紧急求助. 哪位大侠能给我一个返回safearray的例子片断? 句柄到底是怎么回事? 菜鸟提问(从win2000到win98) 有感情了___100 如何为程序创建快捷方式?
{
...
};class CDialogB: public CDialog
{
...
};
CDialogA::OnConfig()
{
CDialogB b;
b.m_pdlga = this;
if(b.DoModal())
{
...
}
}
主对话框在创建设置对话框后,调用CDlgSetting::InitializeData把需要的数据告诉CDlgSetting:void CDlgMain::OnOpenSettingDlg()
{
CDlgSetting dlgSetting;
dlgSetting.InitializeData(...);if (dlgSetting.DoModal()==IDCANCEL)
return;设置对话框退出后,不要主动把数据交给主对话框,而是让主对话框来取。设置对话框加一个函数用来取出数据:
void CDlgSetting::RetrievalData(CData & data);这样,主对话框主动取出数据:
void CDlgMain::OnOpenSettingDlg()
{
CDlgSetting dlgSetting;
dlgSetting.InitializeData(...);if (dlgSetting.DoModal()==IDCANCEL)
return;CData data;dlgSetting.RetrievalData(data);...//然后就可以使用data中的数据。这样就不需要全局变量。
2。定义static变量,然后调用。(一定要初始化!)
定义全局变量 int number : extern int number;
)!主对话框调用设置对话框中的内容,如下所示:void CMainDlg::SomeFunction()
{
CSetupDlg dlg;
if (dlg.DoModal() == IDCANCEL)
return; int count = dlg.count;
}
其实 VC 并不是完全面向对象的,所以没有那么多讲究,解决问题才是关键!有的事情很简单,但有人却使它不简单!