остается только разместить на шаблонах блоков диалога необходимые элементы управления.
Для добавления элемента PropertySheet из галереи компонентов выберите пункт меню Project ► Add To Project ► Components and Controls...
в диалоговом окне Components and Controls Gallery Откройте папку Visual C++ Components, выберите в ней элемент PropertySheet и нажмите кнопку Insert ; укажите тип будущего листа свойств;
укажите модальный диалог или немодальный;
выберите класс, который будет иметь доступ к листу свойств (как правило, это класс диалогового окна из которого осуществляется вызов листа свойств);
укажите количество страниц в листе свойств;
укажите имена класса страницы свойств и имена классов страниц;
Мастер добавляет подключение заголовочного файла в классе, который использует класс страницы свойств:
// TabulDlg.cpp : implementation file
• • •
#include "MyPropertySheet.h"
Мастер добавляет подключение заголовочных файлов страниц к классу страницы свойств:
// MyPropertySheet.h : header file
• • •
#include "MyPropertyPage1.h"
Мастер создаёт объекты страниц как члены класса СMyPropertySheet:
class CMyPropertySheet : public CPropertySheet
{
• • • public:
CMyPropertyPage1 m_Page1 ;
CMyPropertyPage2 m_Page2 ;
• • •
};
В конструкторе класса окна свойств мастер вызывает функции AddPage ( ) для добавления вкладок в окно свойств:
CMyPropertySheet :: CMyPropertySheet ( CWnd* pWndParent )
: CPropertySheet ( IDS_PROPSHT_CAPTION , pWndParent )
{
AddPage ( &m_Page1 ) ;
AddPage ( &m_Page2 ) ;
}
Для открытия окна с листами свойств мастер добавляет в класс диалогового окна CTabulDlg функцию-член класса OnProperties ( ), реализация которой имеет следующий вид:
void CTabulDlg :: OnProperties ( )
{
CMyPropertySheet propSheet ; // создаёт объект листов свойств
propSheet.DoModal ( ) ; // открывает диалоговое окно с листами свойств
}
Для того чтобы вызвать эту функцию нам нужно подключить её к какому-либо элементу управления, например к кнопке. Добавляем кнопку IDC_PROP в главное диалоговое окно. Выполняем обработку щелчка на кнопке IDC_PROP – добавляем или редактируем команду вызова функции OnProperties ( ) при щелчке на кнопке IDC_PROP в карте сообщений: BEGIN_MESSAGE_MAP ( CTabulDlg , CDialog ) • • •
ON_BN_CLICKED ( IDC_PROP , OnProperties )
END_MESSAGE_MAP()
Теперь решим следующую задачу: главное диалоговое окно содержит текстовое поле и флажок:
При нажатии кнопки Properties открывается диалоговое окно со страницами свойств, которые также содержат текстовое поле и флажок:
Если пользователь закрыл окно свойств с помощью кнопки OK, то введённые данные передаются в главное диалоговое окно.
Для решения этой задачи нужно добавить в главное диалоговое окно элементы управления и с помощью ClassWizard создать ассоциированные переменные категории Value.
// TabulDlg.h : header file
class CTabulDlg : public CDialog
{
• • • public:
BOOL m_flag ; // объявляет переменную член-класса CString m_text ; // объявляет переменную член-класса
} ;
// TabulDlg.cpp : implementation file
CTabulDlg :: CTabulDlg ( CWnd* pParent /*=NULL*/) : CDialog ( CTabulDlg :: IDD , pParent )
{
• • •
m_flag = FALSE ; // инициализирует переменную член-класса m_text = _T ("") ; // инициализирует переменную член-класса
}
void CTabulDlg :: DoDataExchange ( CDataExchange* pDX )
{
• • •
DDX_Check ( pDX , IDC_FLAG , m_flag ) ; // обмен данными между переменной m_flag
// и элементом управления IDC_TEXT
DDX_Text ( pDX , IDC_TEXT , m_text ) ; // обмен данными между переменной m_text
// и элементом управления IDC_TEXT
}
Добавляем на страницы свойств аналогичные элементы управления. К сожалению, мастеру ClassWizard классы страниц свойств недоступны. Поэтому необходимые строки можно создать путём копирования и небольшого редактирования.
Добавляем в класс CMyPropertyPage1 переменную член-класса m_text:
// MyPropertyPage1.h : header file class CMyPropertyPage1 : public CPropertyPage
{
• • • public:
CString m_text ; // объявляет переменную член-класса
};
Добавляем в класс CMyPropertyPage2 переменную член-класса m_flag:
// MyPropertyPage1.h : header file class CMyPropertyPage2 : public CPropertyPage
{
• • • public:
BOOL m_flag ; // объявляет переменную член-класса
} ;
Инициализируем переменную-член класса m_text в конструкторе класса
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.