博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC中对话框向视图类的数据发送
阅读量:4071 次
发布时间:2019-05-25

本文共 1183 字,大约阅读时间需要 3 分钟。

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

变量进行更新对话框里面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://yoeji.baihongyu.com/

你可能感兴趣的文章
剑指_用两个栈实现队列
查看>>
剑指_顺时针打印矩阵
查看>>
剑指_栈的压入弹出序列
查看>>
剑指_复杂链表的复制
查看>>
服务器普通用户(非管理员账户)在自己目录下安装TensorFlow
查看>>
星环后台研发实习面经
查看>>
大数相乘不能用自带大数类型
查看>>
字节跳动后端开发一面
查看>>
CentOS Tensorflow 基础环境配置
查看>>
centOS7安装FTP
查看>>
FTP的命令
查看>>
CentOS操作系统下安装yum的方法
查看>>
ping 报name or service not known
查看>>
FTP 常见问题
查看>>
zookeeper单机集群安装
查看>>
do_generic_file_read()函数
查看>>
Python学习笔记之数据类型
查看>>
Python学习笔记之特点
查看>>
Python学习笔记之安装
查看>>
shell 快捷键
查看>>