У меня есть простое приложение, в котором в качестве основного окна есть одна форма диалогового окна 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. Чем диалог не нужен, но все же нужен рабочий цикл сообщений. Это должен быть нормальный путь. Вы можете скрыть и показать диалог, или уничтожить его и воссоздать его в любое время.
Существует другой способ, в зависимости от того, как вы хотите использовать этот диалог. Вы можете запустить второй кадр пользовательского интерфейса и запустить диалог либо модальный, либо немодальный. Этот диалог имеет то преимущество, что он всегда несет ответственность, даже если основной поток занят.