В данном проекте мы создадим окно программы как диалоговое окно, но без применения AppWizard, для понимания сути происходящего. Создавайте проект Win32 с поддержкой MFC, как в примерах ранее и два файла CPP и RC. В файле ресурсов создайте простой диалог с двумя кнопками.
В ресурсы нужно добавить диалоговое окно.
#include "afxwin.h"
#include "resource.h" // ссылка на ресурсы
class CTestDlg : public CDialog // класс диалогового окна
{
public:
CTestDlg(CWnd* pParent=NULL);
protected:
};
CTestDlg::CTestDlg(CWnd* pParent)
: CDialog(IDD_DIALOG1, pParent)
{
}
class CTestApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
BOOL CTestApp::InitInstance()
{
CTestDlg dlg; // Создать объект диалогового окна
m_pMainWnd = &dlg; // главное окно программы это диалоговое окно
dlg.DoModal();
return FALSE;
}
CTestApp theApp;
Теперь наша программа будет выглядеть так.
Мы создали класс приложения CTestApp, в котором оставили только метод InitInstance, который отвечает за создания окна. В этом методе вызываем создание диалогового окна. Присвоим указателю окна приложения указатель на диалоговое окно m_pMainWnd = &dlg;.
Смотрите сверху. Включили описание классов MFC и описание идентификаторов ресурсов, где наше диалоговое окно resource.h. Создали класс диалогового окна, просто определив конструктор, который вызывает папу для своего построения.
CTestDlg::CTestDlg(CWnd* pParent)
: CDialog(IDD_DIALOG1, pParent)
В этот конструктор передали идентификатор диалогового окна из ресурсов IDD_DIALOG1. После чего в функции InitInstance создали объект диалогового окна. И вызвали его для выполнения. Но вот результат возврата функции FALSE, чем обманули MFC сказав, что инициализация не удалась.
Создай класс диалогового окна.
class CTestDlg : public CDialog // класс диалогового окна
{
public:
CTestDlg(CWnd* pParent=NULL);
protected:
};
Создай объект и запусти диалоговое окно на выполнение.
BOOL CTestApp::InitInstance()
{
CTestDlg dlg; // Создать объект диалогового окна
m_pMainWnd = &dlg; // главное окно программы это диалоговое окно
dlg.DoModal();
.........
}
Заверши инициализацию неудачей.
BOOL CTestApp::InitInstance()
{
.......
return FALSE;
}