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

来源:互联网 发布:网络带来的方便 编辑:程序博客网 时间:2024/04/29 13:08

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

变量进行更新对话框里面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

0 0
原创粉丝点击