| Стоит Windows 8 Pro, Visual Studio 2010 Express Edition . | 
Диалоговые окна MFC
Добавление собственного диалогового окна
Добавим собственное диалоговое окно, которое будет предлагать пользователю поле редактирования, группу радиокнопок. Когда пользователь щелкнет на кнопке OK, введенный им текст отобразится в главном окне приложения. Для этого нужно будет выполнить следующие действия:
- Добавить новое диалоговое окно к ресурсам приложения
- Создать дизайн диалогового окна, разместив в нем необходимые элементы
- Содать для управления ресурсом класс на базе класса CDialog
- Связать переменные с элементами управления диалога
Создание макета диалогового окна
- 
 Выберите вкладку Resource View, выделите узел Dialogs  и через контекстное меню или главное меню оболочки выполнилните опцию Add Resourcе. Появится окно Add Resource Выберите вкладку Resource View, выделите узел Dialogs  и через контекстное меню или главное меню оболочки выполнилните опцию Add Resourcе. Появится окно Add Resource
- 
 Выделите в нем пиктограмму Dialog  и щелкните на кнопке New. Оболочка создаст заготовку Выделите в нем пиктограмму Dialog  и щелкните на кнопке New. Оболочка создаст заготовку
- 
 В панели Resource View  выделите сгенерированный ресурс с дежурным именем IDD_DIALOG1  и через панель свойств присвойте ресурсу осмысленный идентификатор IDD_MESSAGEDLG. Не удаляйте кнопки OK  и Cancel В панели Resource View  выделите сгенерированный ресурс с дежурным именем IDD_DIALOG1  и через панель свойств присвойте ресурсу осмысленный идентификатор IDD_MESSAGEDLG. Не удаляйте кнопки OK  и Cancel
- 
 Отредактируйте ресурс диалогового окна в соответствии с таблицей свойств Отредактируйте ресурс диалогового окна в соответствии с таблицей свойств
При редактировании диалогового ресурса периодически проверяйте дизайн кнопкой Test Dialog панели инструментов Dialog Editor. Размеры элементов управления контролируйте через панель состояния дизайнера. Для выравнивания элементов пользуйтесь инструментами на панели инструментов или опциями меню Format оболочки.
Окончательный вариант макета приведен на рисунке
Отметьте, что для согласованной работы радиокнопок мы для первого переключателя установили свойство Group в состояние True. В остальных же переключателях оставили его значение по умолчанию False. Это приведет к тому, что следующие по порядку их создания радиокнопки будут объединены в группу. Новая группа начнется с нового следующего по порядку создания радиопереключателя со свойством True (но у нас только одна группа). Порядок следования радиопереключателей можно посмотреть через опцию Edit/Resource Symbols (или через контекстное меню в панели Resource View, щелкнув на узле Dialogs.rc ) в окне Resource Symbols
Отредактировать порядок радиопереключателей можно в файле Resource.h, открыв его на редактирование через панель Solution Explorer (не рекомендуется!!!)
В этом файле оболочка формирует именованные константы
Именованные константы в файле Resource.h
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Dialogs.rc
//
#define IDD_DIALOGS_DIALOG              102
#define IDR_MAINFRAME                   128
#define IDD_MESSAGEDLG                  131
#define IDC_B_YESNOCANCEL               1000
#define IDC_B_ABORTRETRYIGNORE          1001
#define IDC_B_CUSTOMDIALOG              1002
#define IDC_B_WHICHOPTION               1003
#define IDC_E_RESULT                    1004
#define IDC_EMESSAGE                    1005
#define IDC_B_FILEOPEN                  1006
#define IDC_ROPTION1                    1006
#define IDC_B_EXIT                      1007
#define IDC_ROPTION2                    1007
#define IDC_ROPTION3                    1008
#define IDC_RADIO4                      1009
#define IDC_ROPTION4                    1009
............................................Создание управляющего класса
Для управления диалоговым ресурсом создайте класс на основе базового класса CDialog. Для этого:
- 
 Выберите только что сконструированное окно приложения в режиме дизайна и через контекстное меню (или главное меню Project ) выполните опцию Add Class Выберите только что сконструированное окно приложения в режиме дизайна и через контекстное меню (или главное меню Project ) выполните опцию Add ClassЗапустится мастер добавления класса, который нужно настроить в соответствии с рисунком 
- 
 Убедитесь, что в поле Base class  выбран CDialog Убедитесь, что в поле Base class  выбран CDialogПосле создания класса его код должен быть размещен в двух новых файлах MsgDlg.h и MsgDlg.cpp. Убедитесь в этом через панель Solution Explorer. Удобнее при создании новых классов размещать их в отдельных файлах. Мастер Add Class создал производный класс-потомок на основании базового класса CDialog, поддерживающего диалоговые окна Объявление производного класса CMsgDlg, наследника CDialog (код файла MsgDlg.h) #pragma once // CMsgDlg dialog class CMsgDlg : public CDialog { DECLARE_DYNAMIC(CMsgDlg) public: CMsgDlg(CWnd* pParent = NULL); // standard constructor virtual ~CMsgDlg(); // Dialog Data enum { IDD = IDD_MESSAGEDLG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() };
- 
 Добавьте две ассоциированные переменные к элементам управления. Для этого выделите в панели Class View  класс CMsgDlg  и добавьте две переменные через мастера, как показано ниже Добавьте две ассоциированные переменные к элементам управления. Для этого выделите в панели Class View  класс CMsgDlg  и добавьте две переменные через мастера, как показано ниже
Мастер добавит в приложение код
Файл MsgDlg.h
class CMsgDlg : public CDialog
{
................................................
public:
	// Для хранения значений поля редактирования
	CString m_strMessage;
	// Для распознавания выбранной радиокнопки 
	int m_iOption;
};Файл MsgDlg.cpp
CMsgDlg::CMsgDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMsgDlg::IDD, pParent)
	, m_strMessage(_T(""))
	, m_iOption(0)
{
}
	
void CMsgDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EMESSAGE, m_strMessage);
	DDX_Radio(pDX, IDC_ROPTION1, m_iOption);
}Для переключателя с установленным свойством Group мы назначили ассоциированную целочисленную переменную m_iOption. Значение этой переменной зависит от того, какой из переключателей группы будет выбран пользователем. При выборе первого переключателя "Опция 1" эта переменная принимает значение 0, при выборе второго - значение 1, и т.д. , поскольку в C++ нумерация элементов массива или группы начинается с нуля.
 
                             








