窗体间数据传递问题。

饭纲落3DS 2009-06-20 07:04:28
达人晚上好。
一个基于FormView的程序。点击MainFrame的菜单中会弹出一个参数配置的对话框dlg1。
问题是:如何在点击这个dlg1的退出button时,把参数传递到主界面FormView中?(注意不是传递到MainFrame菜单的类中)
...全文
72 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
DavidHsing 2009-06-21
  • 打赏
  • 举报
回复
假设你的设置对话框叫 COptionDlg
在里面定义几个成员变量

class COptionDlg : public CDialog
{
//...

public:
CString m_sVar1;
int m_nVar2;
}


然后在你的 MainFrame 里面调用

void CMainFrame::OnOption()
{
COptionDlg dlg;
if (dlg.DoModal() == IDOK)
{
我的变量1 = dlg.m_sVar1;
我的变量2 = dlg.m_nVar2;
}
}

海忠 2009-06-21
  • 打赏
  • 举报
回复
传递这样的参数值不是很简单嘛,楼主遇到什么问题了?


========================================
提界面问题,UIPower有问必答!
界面论坛:http://www.uipower.com/bbs

我们有专员负责网友问题的解答,真诚为你服务!
[如果有很紧急的问题,也可以直接致电我们:021-33130099-806]
leo_liaogy 2009-06-21
  • 打赏
  • 举报
回复

CMainFrame * pFrame = (CMainFrame *)AfxGetMainWnd();

MyFormView::m_staticVar1 = dlg.xxx;
wuwenchaobit 2009-06-20
  • 打赏
  • 举报
回复
友元???
饭纲落3DS 2009-06-20
  • 打赏
  • 举报
回复
如果太麻烦的话我准备用.ini来保存参数了
饭纲落3DS 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 skyxie 的回复:]
因为静态成员才用 类名::变量名 的方式直接使用

所以可以菜单处理函数中直接赋值.

#include "MyFormView.h"

CXXXDlg dlg;
if (IDOK == dlg.DoModel())
{
CMainFrame * pFrame = (CMainFrame *)AfxGetMainWnd();

MyFormView::m_staticVar1 = dlg.xxx;
...
}
[/Quote]

我用了这个但是报错啊,我在MyFormView类定义中定义了:

protected: // create from serialization only
BOOL m_OKdetection;

然后
CXXXDlg dlg;
if (IDOK == dlg.DoModel())
{
CMainFrame * pFrame = (CMainFrame *)AfxGetMainWnd();

MyFormView::m_OKdetection = TRUE;
...
}

就报错了:illegal reference to data member "MyFormView::m_OKdetection" in a static function
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 skyxie 的回复:]
因为静态成员才用 类名::变量名 的方式直接使用

所以可以菜单处理函数中直接赋值.

#include "MyFormView.h"

CXXXDlg dlg;
if (IDOK == dlg.DoModel())
{
CMainFrame * pFrame = (CMainFrame *)AfxGetMainWnd();

MyFormView::m_staticVar1 = dlg.xxx;
...
}
[/Quote]

up
bulijun1987 2009-06-20
  • 打赏
  • 举报
回复
FormView应该是MainFrame的子窗口吧!
先获得MainFrame的指针,在获得它的子窗口的指针,这样就可以赋值了!
cnzdgs 2009-06-20
  • 打赏
  • 举报
回复
对于模态对话框,一般的做法是在对话框类中定义一些public成员变量,在关闭对话框之前把要传递的参数赋给这些变量,DoModel返回后,调用者从这些变量中取出数据。
如果使用静态变量传递数据,直接给静态变量赋值即可,在对话框类的cpp文件中包含doc.h和view.h。
skyxie 2009-06-20
  • 打赏
  • 举报
回复
因为静态成员才用 类名::变量名 的方式直接使用

所以可以菜单处理函数中直接赋值.

#include "MyFormView.h"

CXXXDlg dlg;
if (IDOK == dlg.DoModel())
{
CMainFrame * pFrame = (CMainFrame *)AfxGetMainWnd();

MyFormView::m_staticVar1 = dlg.xxx;
...
}
饭纲落3DS 2009-06-20
  • 打赏
  • 举报
回复
漏了一点,是传递到FormView类中的几个静态变量上为其赋值。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧