Операционная система Windows 95 для программиста

       

Заполнение структуры 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, которая его заполняет.


Содержание раздела