在 MFC 应用程序中创建独立表单

Create independant form in MFC application

本文关键字:独立 表单 创建 MFC 应用程序      更新时间:2023-10-16

我有一个简单的应用程序,它有一个基于MFC对话框的表单作为主窗口。现在我需要创建在整个应用程序生命周期中可用的表单(基于对话框是可以的)。我计划在需要时显示状态信息,并在不需要时将其隐藏。如何声明和创建该表单,使其不以模态模式显示,而是像独立另一个表单一样显示。主窗体有时可能隐藏在系统托盘中,但 的状态应保留在桌面上。

应用程序创建主对话框窗体:

BOOL CpointMFC2App::InitInstance()
{
...
CpointMFC2Dlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
...
}

主对话框窗体:

#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();
}

使用 CreateDialog 创建对话框。比对话框是无模式的,但仍需要一个工作的消息循环。这应该是正常的方式。您可以隐藏和显示对话框,也可以随时销毁并重新创建对话框。

还有另一种方法,具体取决于您希望如何使用此对话框。您可以启动第二个 UI 框架,并在该帧中启动模式或无模式对话框。此对话框的优点是即使主线程繁忙,也始终负责。