Заполнение структуры PROPSHEETHEADER и создание блокнота
Структура PROPSHEETHEADER , как это видно из ее названия, описывает заголовок блокнота. Она имеет следующий формат:
typedef struct _PROPSHEETHEADER { DWORD dwSize; // размер структуры DWORD dwFlags; // флаги HWND hwndParent; // идентификатор родительского окна HINSTANCE hInstance; // идентификатор приложения union { HICON hIcon; // идентификатор пиктограммы LPCTSTR pszIcon; // идентификатор ресурса пиктограммы }; LPCTSTR pszCaption; // заголовок блокнота UINT nPages; // количество страниц в блокноте union { UINT nStartPage; // номер первой страницы LPCTSTR pStartPage; // имя первой страницы }; union { LPCPROPSHEETPAGE ppsp; // адрес массива структур // PROPSHEETPAGE HPROPSHEETPAGE FAR *phpage; // адрес массива }; // идентификаторов страниц блокнота PFNPROPSHEETCALLBACK pfnCallback; // адрес функции // обратного вызова } PROPSHEETHEADER, FAR *LPPROPSHEETHEADER; typedef const PROPSHEETHEADER FAR *LPCPROPSHEETHEADER;
В поле dwSize нужно записать размер структуры.
Поле dwFlags может содержать логическую комбинацию следующих значений:
Флаг | Описание |
PSH_DEFAULT | Используются все поля структуры, имеющие назначение, принятое по умолчанию |
PSH_MULTILINETABS | Закладки страниц могут располагаться в несколько рядов |
PSH_NOAPPLYNOW | Не отображается кнопка Apply |
PSH_PROPSHEETPAGE | При создании органа управления вместо поля phpage используется поле ppsp |
PSH_PROPTITLE | К заголовку, определенному в поле pszCaption, добавляется строка Properties for |
PSH_USECALLBACK | При инициализации органа управления используется функция обратного вызова, адрес которой указан в поле pfnCallback |
PSH_USEHICON | Поле hIcon содержит идентификатор пиктограммы уменьшенного размера, которая отображается в заголовке блокнота. Эта пиктограмма не нужна для органа управления Wizard |
PSH_USEICONID | Поле pszIcon содержит идентификатор htcehcf пиктограммы уменьшенного размера, которая отображается в заголовке блокнота. Эта пиктограмма не нужна для органа управления Wizard |
PSH_USEPSTARTPAGE | Вместо поля nStartPage используется поле pStartPage |
PSH_WIZARD | Создается орган управления Wizard, а не блокнот Property Sheet |
В приложении Property Sheet Demo мы заполнили структуру PROPSHEETHEADER следующим образом:
PROPSHEETHEADER psheetHeader; psheetHeader.dwSize = sizeof(PROPSHEETHEADER); psheetHeader.hInstance = hInst; psheetHeader.pszIcon = MAKEINTRESOURCE(IDI_APPICONSM); psheetHeader.dwFlags = PSH_USEICONID; psheetHeader.hwndParent = hWnd; psheetHeader.pszCaption = "Property Sheet Sample"; psheetHeader.nPages = sizeof(psheetPage) / sizeof(PROPSHEETPAGE); psheetHeader.phpage = (HPROPSHEETPAGE FAR *)&hPage[0];
Обратите внимание на поле phpage. В него мы записали адрес массива идентификаторов страниц HPROPSHEETPAGE. Этот массив заполняется функцией CreatePropertySheetPage, которой в качестве параметра передается адрес предварительно заполненной структуры PROPSHEETPAGE:
HPROPSHEETPAGE hPage[3]; hPage[0] = CreatePropertySheetPage(&psheetPage[0]); hPage[1] = CreatePropertySheetPage(&psheetPage[1]); hPage[2] = CreatePropertySheetPage(&psheetPage[2]);
После заполнения заголовка блокнота можно создать блокнот (или орган управления Wizard, если указан флаг PSH_WIZARD ) при помощи функции PropertySheet :
PropertySheet(&psheetHeader);
Есть еще один способ создания блокнота или органа управления Wizard без использования функции CreatePropertySheetPage. Мы применили этот способ в приложении Wizard Demo:
psheetHeader.dwSize = sizeof(PROPSHEETHEADER); psheetHeader.hInstance = hInst; psheetHeader.pszIcon = NULL; psheetHeader.dwFlags = PSH_PROPSHEETPAGE | PSH_WIZARD; psheetHeader.hwndParent = hWnd; psheetHeader.pszCaption = "Property Sheet Sample"; psheetHeader.nPages = sizeof(psheetPage) / sizeof(PROPSHEETPAGE); psheetHeader.ppsp = (LPCPROPSHEETPAGE)&psheetPage; PropertySheet(&psheetHeader);
Здесь мы не используем пиктограмму, так как она все равно не отображается, поэтому в поле pszIcon записано значение NULL. Кроме того, указаны флаги PSH_PROPSHEETPAGE и PSH_WIZARD.
Так как указан флаг PSH_PROPSHEETPAGE, то в поле ppsp мы записываем адрес массива структур PROPSHEETPAGE, описывающих отдельные страницы органа управления Wizard. При этом нам не нужен массив идентификаторов страниц и, соответственно, функция CreatePropertySheetPage, которая его заполняет.