MFC中对话框向视图类的数据发送

最近在做一个界面上的东西:需要在工具栏中点击按钮弹出一个对话框,这个对话框需要根据视图类里面的

变量进行更新对话框里面combox的内容,同时对话框需要将变化的内容发送给视图类,这就涉及到了对话框

和视图类之间的信息传递。

首先需要说明的一点是因为需要进行数据传递,所以不能使用模态的对话框,必须使用非模态的对话框,

也就是不能使用DoModel函数,我刚开始遇到的问题时视图类如何知道对话框已经点击了确定按钮。也就是

如何实现类似DoModel函数的功能。

 

在网上查了一下,发现涉及到了窗口之间消息的传递。

windows传递自定义的消息,需要利用ON_MESSAGE,需要自定义消息宏。

首先,定义对话框类CMyDlg,定义视图类CMyView。

定义自定义消息 #define WM_DIALOGOK (WM_USER+1)

class CMyDialog : public CDialog
{
public:
  CMyDialog(CView* pParent); //重载的构造函数声明,原来的构造函数声明去掉
  CView *pView;    //定义一个存储主窗的指针
protected:
   virtual void OnOK();   //重载OnOK函数声明,为了关闭对话框时间向主窗提供数据
};
//重载的构造函数声明,将原来的构造函数注释掉

CMyDialog ::CMyDialog (CView* pParent)
    :CDialog(TecplotColorSet::IDD, pParent)
{
 pView = pParent;
}

void CMyDialog ::OnBnClickedOk()
{

 UpdateData(TRUE);
 pView->SendMessage(WM_DIALOGOK);
   
 CDialog::OnOK();

 DestroyWindow();
}

在CMyView.h中定义接受消息的函数

afx_msg LRESULT OnDialogOk(WPARAM wparam,LPARAM lparam);

 

在CMyView.cpp中定义消息列表

 

BEGIN_MESSAGE_MAP(..., ...)
...
 ON_MESSAGE(WM_DIALOGOK,OnDialogOk)
END_MESSAGE_MAP()

然后实现接受的消息函数

LRESULT CMyView::OnDialogOk(WPARAM wparam,LPARAM lparam)
{
 AfxMessageBox(_T("Here"));
 return 0;
}

 

这里面我开始犯的错误是:

初始化非模态对话框的时候一定要将视图类的指针传进来,也就是CView要初始化进来

这样在对话框上点击确定按钮就能触发消息,在视图类里面进行相应的操作

 

参考:

http://hi.baidu.com/quanhaili/item/ca0209a894edabf714329bde

http://baike.baidu.com/link?url=shz7idXWZtYhmetJOhpvNGMBIEdaVBS-9xjya906Xfkme6JkPtbW9blTWU6niffD1voZglw2jdR05NwLe07Xwa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值