Страницы свойств, реализованы в виде отдельных объектов COM, которые позволяют страницы свойств для совместного использования при необходимости. Для добавления на страницу свойств для элемента управления можно использовать мастер объектов ATL.
Запустите мастер объектов ATL и выберите пункт элементы управления в качестве категории в левой части. Выберите Страницу свойств справа, а затем нажмите кнопку Далее.
Вы снова получите диалоговое окно, что позволяет вам ввести имя нового объекта. Вызовите объект PolyProp и введите это имя в поле Краткое имя.

Обратите внимание, что поле редактирования интерфейса отображается серым цветом. Это потому, что страница свойств не требуется пользовательский интерфейс.
Перейдите на вкладку строки для задания заголовка страницы свойств. Название страницы свойств является строкой, которая появляется на вкладке для данной страницы. Тип усилителя ;Полигон как название. Строка документации — это описание свойства fr&ame использует в статус линии или инструмент подсказки. Обратите внимание, что в настоящее время эту строку не использовать стандартные свойства фрейма, но вы можете настроить его так или иначе. Вы не собираетесь создавать Helpfile на данный момент, так что стереть запись в этом текстовом поле. Нажмите кнопку "OK" и имущество будет создан объект page.

Будут созданы следующие три файла:
| Файл | Описание |
| PolyProp.h | Содержит класс C++ CPolyProp , который реализует страница свойств. |
| PolyProp.cpp | Включает файл PolyProp.h. |
| PolyProp.rgs | Сценарий реестра, который регистрирует объект страницы свойств. |
Также вносятся следующие изменения кода:
PolyPropКласс добавляется в файл Polygon.idl.
Теперь добавьте поля, которые должны появиться на странице свойств. Обратите внимание на то, что в Polygon.rc диалоговое окно является пустой, за исключением метки, которая говорит вам, чтобы вставить элементы управления здесь. Удалить этот ярлык и добавить один, содержащий текст "стороны:". Рядом с заголовком Добавить поле редактирования и дать ему IDIDC_SIDES.

Включить Polygon.h в верхней части файла PolyProp.h:
# i&nclude "Polygon.h"nbsp; / / определение IPolyCtl
Теперь дают CPolyProp класс, чтобы задать количество Сторон в объекте при нажатии кнопки Применить . Изменение Apply работать в PolyProp.h.
STDMETHOD(Apply)(void)
{
USES_CONVERSION;
ATLTRACE(_t("CPolyProp::Apply\n"));
для (UINT I = 0; I lt; m_nObjects; i ++)
{
CComQIPtr < IPolyCtl и IID_IPolyCtl > pPoly(m_ppUnk[i]);
короткая nSides = (short)GetDlgItemInt(IDC_SIDES);
Если не (pPoly - > put_Sides(nSides))
{
Класс CComPtr <IErrorInfo> pError;
CComBSTR strError;
GetErrorInfo (0 и pError);
pError - > GetDescription(&strError);
MessageBox(OLE2T(strError), _T("Error"), стиля);
возвращает E_FAIL;
}
}
m_bDirty = FALSE;
Возвращает значение S_OK;
}
Страница свойств может иметь более чем одного клиента, прилагаемой к нему одновременно, так что Apply функция петли вокруг и вызывает put_Sides на каждом клиенте с значением извлечены из поля ввода. Вы используете CComQIPtr класса, который выполняет QueryInterface для каждого объекта, чтобы получить IPolyCtl интерфейс от IUnknown (хранится в m_ppUnk массив).
Теперь код проверяет, что свойству стороны действительно работает. Если это не удается, код отображает окно сообщения, отображающее сведения об ошибке из интерфейс IErrorInfo . Как правило контейнер запрашивает объект интерфейса ISupportErrorInfo и вызывает InterfaceSupportsErrorInfo во-первых, чтобы определить, поддерживает ли объект параметра сведения об ошибке. Но так как это элемент управления, вы можете отказаться от этой проверке.
Класс CComPtr помогает вам автоматически обработки подсчета, ссылок, так что вам не нужно вызывать метод Release в интерфейсе. CComBSTR поможет вам с обработкой BSTR , поэтому вы не должны выполнять заключительный вызов SysFreeString . Также используется один из различных классов преобразования строк, поэтому вы можете конвертировать BSTR при необходимости (именно поэтому в начале функции добавить макрос USES_CONVERSION ).
Необходимо задать страницу свойств грязный флаг, указывающий, включена кнопка Применить . Это происходит, когда пользователь изменяет значение в поле редактирования стороны. Щелкните правой кнопкой мыши класс страницы свойств (CPolyProp) в контекстного и затем выберите Добавить Windows обработчик сообщений... из контекстного menu.nbsp; В окне Объект выберите IDC_SIDES, а затем добавить сообщение E&N_CHANGE.
Теперь добавьте следующий код в Polyprop.h к OnChangeSides функции (удаление любой код, который мастер туда):
LRESULT OnCh&angeSides(WORD wNotify, WORD wID, HWND hWnd, BOOLamp; bHandled)
{
SetDirty(TRUE);
Возвращает 0;
}
OnChangeSidesбудет вызван при отправке WM_COMMAND сообщения с уведомлением EN_CHANGE для IDC_SIDES управления. OnChangeSides затем вызывает SetDirty и передает значение TRUE для указания страница свойств теперь грязный и должна быть включена кнопка Применить.
Теперь добавьте на страницу свойств для элемента управления. Мастер объектов ATL не делает это для вас автоматически, так как в вашем проекте может быть несколько элементов управления. Открыть PolyCtl.h и добавьте эту строку в сопоставление свойств:
PROP_ENTRY ("стороны", 1, CLSID_PolyProp)
Сопоставление свойств элемента управления теперь выглядит следующим образом:
BEGIN_PROP_MAP(CPolyCtl)
PROP_DATA_ENTRY ("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY ("_cy", m_sizeExtent.cy, VT_UI4)
PROP_ENTRY ("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)
PROP_ENTRY ("стороны", 1, CLSID_PolyProp)
/ / Примеры записей
/ / PROP_ENTRY ("свойства описание", dispid, clsid)
/ / PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
Вы могли бы добавили PROP_PAGE макрос с CLSID вашей странице свойств, но если вы используете PROP_ENTRY макрос как показано, стороны, значение свойства сохраняется при сохранении элемента управления. Три параметра для макроса являются описание свойства, DISPID свойства и CLSID, имеющий свойство на его страницы свойств. Это полезно, если, например, загрузить элемент управления в Visual Basic и установить количество Сторон во время разработки. Так как количество сторон сохраняется, когда вы перезагрузить ваш проект Visual Basic количество Сторон будет восстановлен.
Теперь создавать этот элемент управления и вставить его в Тестовый контейнер элемента управления ActiveX. В Тестовый контейнер, в меню Правка щелкните Объект класса PolyCtl. Появляется страница свойств; выбрали многоугольник закладка.

Кнопка Применить первоначально отключено. Поле ввода начало вводить значение в стороны и стать кнопка Применить. После того, как будут введены все значения, нажмите кнопку Применить . Изменения отображения элемента управления и кнопка Применить снова отключается. Попробуйте ввести недопустимое значение и вы должны увидеть окно сообщения, содержащего описание ошибки, заданным от put_Sides функция.
Затем вы поместить элемент управления на веб-странице.
Вернуться к шагу 5 |nbsp; К шагу 7