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

Подготовка массива структур PROPSHEETPAGE


Для каждой страницы блокнота или органа управления Wizard вы должны подготовить структуру PROPSHEETPAGE , записав в нее описание страницы. Структура PROPSHEETPAGE определена следующим образом:

typedef struct _PROPSHEETPAGE { DWORD dwSize; // размер структуры DWORD dwFlags; // флаги HINSTANCE hInstance; // идентификатор приложения union { LPCTSTR pszTemplate; // идентификатор ресурса // диалоговой панели LPCDLGTEMPLATE pResource; // шаблон диалоговой панели }; union { HICON hIcon; // идентификатор пиктограммы LPCTSTR pszIcon; // идентификатор ресурса пиктограммы }; LPCTSTR pszTitle; // заголовок страницы DLGPROC pfnDlgProc; // адрес функции диалога LPARAM lParam; // дополнительный параметр LPFNPSPCALLBACK pfnCallback;// адрес функции обратного вызова UINT FAR * pcRefParent;// указатель на счетчик использования } PROPSHEETPAGE, FAR *LPPROPSHEETPAGE; typedef const PROPSHEETPAGE FAR *LPCPROPSHEETPAGE;

Возможно, эта структура выглядит несколько громоздко, однако ее заполнение не вызовет у вас никаких затруднений.

В поле dwSize необходимо записать размер структуры, т. е. значение sizeof(PROPSHEETPAGE).

В поле dwFlags следует записать флаги, отмечающие задействованные поля структуры и определяющие внешний вид органа управления. Здесь можно использовать следующие значения:



Флаг Описание
PSP_DEFAULT Используются все поля структуры, имеющие назначение, принятое по умолчанию
PSP_DLGINDIRECT Поле pResource используется вместо поля pszTemplate. Этот флаг следует указать в том случае, если вы создаете шаблон диалоговой панели для страницы динамически в памяти, а не загружаете его из ресурсов приложения
PSP_HASHELP Если указан этот флаг, для данной страницы отображается кнопка Help
PSP_RTLREADING Заголовок, определенный в поле pszTitle, отображается справа налево. Используется только в арабских версиях Microsoft Windows95
PSP_USECALLBACK При создании или уничтожении страницы управление получает функция обратного вызова, адрес которой определен в поле pfnCallback
PSP_USEHICON Поле hIcon содержит идентификатор пиктограммы уменьшенного размера, которая будет отображаться в левой части закладки страницы
PSP_USEICONID Поле pszIcon содержит идентификатор ресурса пиктограммы уменьшенного размера, которая будет отображаться в левой части закладки страницы
PSP_USEREFPARENT Используется поле pcRefParent
PSP_USETITLE В качестве заголовка страницы следует использовать строку, адрес которой задан в поле pszTitle, а не ту строку, что определена в шаблоне диалоговой панели
<
В нашем приложении мы использовали флаги PSP_USETITLE и PSP_USEICONID.

Поле hInstance должно содержать идентификатор приложения, который передается через соответствующий параметр функции WinMain.

Поля pszTemplate и pResource объединены, поэтому вы можете использовать только одно из них. По умолчанию вы должны записать в поле pszTemplate идентификатор ресурса, содержащего шаблон диалоговой панели. Однако указав флаг PSP_DLGINDIRECT, вы вместо этого можете создать шаблон диалоговой панели динамически в оперативной памяти и записать указатель на этот шаблон в поле pResource.

Аналогичным образом объединены поля hIcon и pszIcon. Если в поле pszIcon вы собираетесь записать идентификатор пиктограммы, которая будет отображаться в закладке, следует указать флаг PSP_USEHICON. Если же пиктограмма определена в ресурсах приложения, вы должны записать соответствующий идентификатор ресурса в поле pszIcon и указать флаг PSP_USEICONID.

В том случае, когда вам не нужно отображать пиктограмму на закладке, не указывайте флаги PSP_USEHICON и PSP_USEICONID, а в поле pszIcon (или hIcon, что одно и то же) запишите значение NULL.

При создании шаблона диалоговой панели вы можете указать ее заголовок. Однако вместо этого можно использовать поле pszTitle и флаг PSP_USEICONID.

В поле pfnDlgProc необходимо записать адрес функции диалога, подготовленной с учетом приведенных выше замечаний.

Вот как мы заполнили поля структуры PROPSHEETPAGE для трех страниц блокнота в приложении Property Sheet Demo:

PROPSHEETPAGE psheetPage[3];

psheetPage[0].dwSize = sizeof(PROPSHEETPAGE); psheetPage[0].hInstance = hInst; psheetPage[0].pszIcon = MAKEINTRESOURCE(IDI_EFFECTS); psheetPage[0].dwFlags = PSP_USETITLE | PSP_USEICONID; psheetPage[0].pszTemplate = MAKEINTRESOURCE(IDD_DIALOG1); psheetPage[0].pfnDlgProc = DlgProc1; psheetPage[0].pszTitle = "Set Effects"; psheetPage[0].lParam = 0;

psheetPage[1].dwSize = sizeof(PROPSHEETPAGE); psheetPage[1].hInstance = hInst; psheetPage[1].pszIcon = MAKEINTRESOURCE(IDI_TAB); psheetPage[1].dwFlags = PSP_USETITLE | PSP_USEICONID; psheetPage[1].pszTemplate = MAKEINTRESOURCE(IDD_DIALOG2); psheetPage[1].pfnDlgProc = DlgProc2; psheetPage[1].pszTitle = "Using Tabs"; psheetPage[1].lParam = 0;

psheetPage[2].dwSize = sizeof(PROPSHEETPAGE); psheetPage[2].hInstance = hInst; psheetPage[2].pszIcon = MAKEINTRESOURCE(IDI_KEYWORD); psheetPage[2].dwFlags = PSP_USETITLE | PSP_USEICONID; psheetPage[2].pszTemplate = MAKEINTRESOURCE(IDD_DIALOG3); psheetPage[2].pfnDlgProc = DlgProc3; psheetPage[2].pszTitle = "Keyword"; psheetPage[2].lParam = 0;


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