显示不在模态模式下的对话框表单

Posted

技术标签:

【中文标题】显示不在模态模式下的对话框表单【英文标题】:Show dialog form not in modal mode 【发布时间】:2014-04-07 10:22:18 【问题描述】:

我有对话框。要从我的应用程序中调用它,我使用代码:

BOOL CpointMFC2App::InitInstance()

    CWinApp::InitInstance();
    Dialog dlg1;
    dlg1.txt= "NotificationText";
    int r= dlg.DoModal();
        return r;

现在我不会使用模态模式 - 我想让程序在不等待用户输入的情况下运行。如何让我的 dlg1 以非模态模式显示?

对话框形式:

#include "stdafx.h"
#include "pointMFC2.h"
#include "Dialog.h"
#include "afxdialogex.h"


// Dialog dialog

IMPLEMENT_DYNAMIC(Dialog, CDialogEx)

Dialog::Dialog(CWnd* pParent /*=NULL*/)
    : CDialogEx(Dialog::IDD, pParent)




Dialog::~Dialog()



void Dialog::DoDataExchange(CDataExchange* pDX)

    CDialogEx::DoDataExchange(pDX);



BEGIN_MESSAGE_MAP(Dialog, CDialogEx)
    ON_BN_CLICKED(IDOK, &Dialog::OnBnClickedOk)
END_MESSAGE_MAP()


// Dialog message handlers
BOOL Dialog::OnInitDialog() 

        CDialogEx::OnInitDialog();
        SetWindowText(txt);
        return TRUE;


void Dialog::OnBnClickedOk()

    // TODO: Add your control notification handler code here
    CDialogEx::OnOK();

【问题讨论】:

搜索无模式对话框... 即使你把对话框改成无模式,你也不能让对话框在CpointMFC2App::InitInstance()返回时挂起,因为dlg1会超出范围并被销毁,所以你的对话框会崩溃 【参考方案1】:

要创建非模态对话框,您必须调用对话框的 Create 函数。在对话框类的构造函数中执行此操作。然后您必须从 InitInstance 返回 TRUE 以保持程序运行。

m_pMainWnd = new Dialog();
return TRUE; // Run MFC message pump

【讨论】:

以上是关于显示不在模态模式下的对话框表单的主要内容,如果未能解决你的问题,请参考以下文章

您可以在 jquery 模态对话框中提交表单吗

AngularJS模态对话框表单对象在控制器中未定义

通过调用 ASP.NET 按钮单击从 jQuery 模态对话框回发

无模式对话框中的 MFC C++ 显示模态对话框

模态对话框无重定向

如何在引导模式框中重置表单主体?