2 neverpassaway neverpassaway 于 2015.06.11 11:33 提问

如何实现CDialogEx::OnOK()中的传数据功能但又不关闭对话框?

请问大家,我有一个对话框类Display,其中一个函数给一个和变量赋了值,用了
CDialogEx::OnOK()把值传给View类中的DoModal,并在View类中有一个变
量来接收Display对话框中的变量的值。但是这样的话,每次Display对话框点了按钮
都会消失,如果不加CDialogEx::OnOK()又不能把值传到View中,请问该怎么实现
不关闭对话框,但是在View类中可以在每一次点击Display对话框按钮的时候获得值呢?
以下是代码:

 void Display::OnBnClickeddsift()
{
    // TODO: Add your control notification handler code here
    UpdateData();
    if (m_intDisp == 0){
        m_intSift = 1;
    }

    CDialogEx::OnOK();
}                                                          //Display对话框中按钮的代码


void CSIMSView::OnDisplay()
{
    // TODO: Add your command handler code here
    Display disp;

    if (disp.DoModal()==IDOK){
        m_IntDISP = disp.m_intDisp;
        if (m_IntDISP == 3 || m_IntDISP == 4)
            m_DSMAJOR = disp.m_dsMajor;
        Invalidate();                                     
    }
}                                                         //View类中Display对话框的代码,要求每次
                                                          //点击Display中的按钮都能把值传到View中

求各位大神解答!感激不尽!

3个回答

oyljerry
oyljerry   Ds   Rxr 2015.06.11 12:07
已采纳

获取View的句柄,然后自定义一个消息,对话框中PostMessage发送数据过去

u013147600
u013147600   2015.06.11 15:02

OnOK点击后会关闭是因为 默认给他的资源ID是IDOK 取消的是IDCANCEL 当点击按钮后调用endDialog()关闭对话框,你可以自己改变他的资源id就好了,然后自定义这个按钮的响应函数,在函数里传递你想要的数据信息

wd0033
wd0033   2015.06.11 11:41

为什么一定要用OnOK,直接sendmessage不是很好吗?

neverpassaway
neverpassaway 请问可否再指点一下具体怎么做==不是很懂==
大约 3 年之前 回复
neverpassaway
neverpassaway ==不会用。。之前没用过这个。。不过谢谢指点,我去查一下怎么用~
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
VS2010/MFC 入门编程四(OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别)
第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,             即WM消息响应函数。   从应用程序结构的角度,拿对话框来说,红色的X对应的是CWnd,而处于对话框             中的“确定”、“取消”按钮则对应了CDialog。             第二,OnClose
模态对话框使用OnOK结束时,ASSERT(ContinueModal())断言处报错
BOOL CWnd::ContinueModal() { return m_nFlags & WF_CONTINUEMODAL; }从源代码可以看出,报错的原因是对话框没有了WF_CONTINUEMODAL属性,模态对话框默认是有这个属性的,再看看是哪个地方去掉了这个属性呢?再看下面几段源代码:void CDialog::OnCancel() { EndDialog(IDCANCEL); } void CDialog::EndDialog(int nResult) { ASSER
【MFC】关于OnOK()、OnCancel()、OnClose()、OnDestroy() 模式对话框
第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数。从应用程序结构的角度,拿对话框来说,红色的X对应的是CWnd,而处于对话框中的“确定”、“取消”按钮则对应了CDialog。 第二,OnClose()和OnDestroy() 在单视图程序中,根据>所讲,程序退出时执行的操作顺
关闭对话框,OnClose和OnCancel
      我们知道,在对话框中,屏蔽ESC键自动退出可以选择重载OnCancel为哑函数的方法:      void CXXXXDlg::OnCancel()     {        // TODO: Add your specialized code here and/or call the base class        //CDialog::OnCance
MFC中解决回车和ESC关闭的问题,重载OnOk(),OnCancel()函数的正确做法
本文参考了如下文章: http://msdn.microsoft.com/en-us/library/66b3y2ab(VS.71).aspx http://topic.csdn.net/u/20100918/16/5a8bb22b-80bc-4e9f-8392-a3f876e91e05.html http://blog.csdn.net/zdl1016/article/details/27
[每日一学]MFC学习笔记——退出出现提示
简单概要 从这篇文章起,我们就渐渐来认识MFC里的 消息机制 。 预备知识 MFC程序退出里会向程序窗口发送一个 WM_CLOSE 消息,在本篇文章里将重写 WM_CLOSE 消息,这样来达到程序在退出的时候会有自己的提示。 具体步骤 新建工程 新建一个工程,取名为“CloseTip”使用 unicode 编码并将界面调整为如下图
mfc 关闭对话框的各种消息与方法
以下是对话框关闭时发送的不同消息:    1)点击OK按钮:OnOk-WM_DESTROY    2) 点击Cancel按钮:OnCancel-WM_DESTROY    3) 点击×按钮:WM_CLOSE-ONCANCEL-WM_DESTROY    4) 键盘ESC按键:OnCancel-WM_DESTROY    5)调用EndDialog(IDCANCEL),直接到WM_DEST
继承CDialog 对话框需要改动的地方
本次目的:建立一个CDialogEx的对话框       我们知道在VS2008SP1引进了BCG第三方控件,可以使MFC界面编程容易些,但是关于这方面的资料并不多。可能是我使用的系统因素,在建立对话框时,选择“生成的类”基于CDialogEx后,发现代码并没有把创建的对话框派生CDialogEx ,而还是派生自CDialog。所以我们只能手动改之。对于一个新建立的对话框,这里我建立的
CDialog::OnOk()作用
CDialog::OnOk(); 当用户点击OK按钮关闭对话框时要执行的动作(事件处理)
MFC去除回车关闭对话框&添加快捷键
基于对话框的程序中,每次按下回车键时,程序都退出。去掉按钮的 BS_DEFPUSHBUTTON 属性并重写OnOK函数也没用。那么如何定制回车键的行为呢?这个问题很easy,但是要说明白,却要费点时间。 这个问题在Windows的开发中由来已久,对于初学者来说,这是个恼人的问题,幸运的是,人们找到了多种解决这个问题的方案。本文将告诉你定制回车键行为的方法。 如果你想要disable回车键,最简单的方法是重载OnOK函数,这固然是个不坏的主意,但如果你重载OnOK,让它什么事情也不干,那麽当用户用鼠标