Шаг 33 - Диалоговое окно приложения без волшебника

Создание проекта

В данном проекте мы создадим окно программы как диалоговое окно, но без применения AppWizard, для понимания сути происходящего. Создавайте проект Win32 с поддержкой MFC, как в примерах ранее и два файла CPP и RC. В файле ресурсов создайте простой диалог с двумя кнопками.

33_1.gif (2563 b)

В ресурсы нужно добавить диалоговое окно.

33_2.gif (3765 b)

Создаем код

#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;

Теперь наша программа будет выглядеть так.

33_3.gif (1086 b)

Описание

Мы создали класс приложения 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;
}

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.