Крок 6: Додавання сторінку властивостей

Сторінки властивостей реалізовано як окремі об'єкти COM, які дозволяють сторінки властивостей для спільного, якщо це потрібно. Додати сторінку властивостей для вашого контролю можна використовувати майстер ATL об'єкта.

Запустити майстер ATL об'єкт і виділіть елементи керування як категорії ліворуч. Виберіть Сторінку властивостей праворуч, а потім натисніть кнопку Далі.

Ви знову отримаєте діалоговому вікні, що дозволяє вам ввести ім'я нового об'єкта. Телефонуйте об'єкт PolyProp і введіть це ім'я в полі Коротке ім'я.

Зверніть увагу, що полі інтерфейс відображується сірим кольором. Це тому, що сторінку властивостей не потрібен власний інтерфейс.

&Клацніть на вкладці " рядки ", щоб задати заголовок сторінки властивостей. Заголовок сторінки властивостей є рядок, який відображається на вкладці цієї сторінки. Введіть підсилювача;Багатокутник як назва. Doc рядок — опис, що Властивості рамки використовує, щоб покласти в стан лінії або інструмент відгук. Зверніть увагу, що стандартні властивості кадру в даний час не використовують цей рядок, але ви можете встановити його на будь-якому випадку. Ви не збираєтеся створювати Helpfile на даний момент, тому видалити запис в цьому текстовому полі. Натисніть кнопку ОК і власності буде створено об'єкт сторінки.

Створено три файли:

Файл Опис
PolyProp.h Містить C++ класу CPolyProp , який реалізує сторінку властивостей.
PolyProp.cpp Включає PolyProp.h файлу.
PolyProp.rgs Реєстр скрипт, який реєструє об'єкта сторінки властивостей.

В нижче код також змін:

Тепер додайте поля, які потрібно відобразити на сторінці властивостей. Зверніть увагу, що в діалоговому вікні Polygon.rc порожній, за винятком наклейка, яка говорить вам, щоб вставити елементи керування тут. Видалити що етикетки і додати один, що містить текст "сторін:". Поруч із пунктом підпис додати поля і дати йому ІдентифікаторIDC_SIDES.

Включають Polygon.h у верхній частині PolyProp.h файлу:

# включити "Polygo&n.h"nbsp; / / визначення IPolyCtl

Тепер включити в CPolyProp клас встановити кількість сторін у ваш об'єкт, при натисненні на кнопку застосувати . Зміни в Apply функціонувати в PolyProp.h наступним чином.

STDMETHOD(Apply)(void)
{
   USES_CONVERSION;
   ATLTRACE(_T("CPolyProp::Apply\n"));
   для (UINT я = 0; я 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"), MB_ICONEXCLAMATION);
         повернення E_FAIL;
      }
   }
   m_bDirty = FALSE;
   повернення S_OK;
}

Сторінка властивостей можуть мати більш ніж одного клієнта, що додається до нього, в той час, так що Apply функція петлею навколо і закликає put_Sides на кожного клієнта з значення, отримані з редагування». Використовується CComQIPtr класу, який виконує QueryInterface кожного об'єкта, щоб отримати на IPolyCtl інтерфейс з IUnknown (зберігаються в на m_ppUnk масив).

Код перевіряє, що вибір для властивості значення сторони дійсно працює. Якщо це не вдається, код відображає повідомлення відображення відомості про помилку від інтерфейсу IErrorInfo . Як правило, контейнер просить ISupportErrorInfo інтерфейс об'єкта і закликає InterfaceSupportsErrorInfo по-перше, визначити, чи об'єкт підтримує параметр відомості про помилку. Але оскільки вашого контролю, ви можете відмовитися від що перевірка.

CComPtr допомагає автоматично обслуговуючими підрахунок, так що вам не потрібно зателефонувати реліз інтерфейс. CComBSTR допомагає з БУЛ обробки, так що вам не доведеться виконувати остаточний виклику SysFreeString . Також використовується один з різних класів перетворення рядка, так що ви можете перетворити БУЛ , при необхідності, (Ось чому ми додати макрос USES_CONVERSION на початку функції).

Ви також повинні встановити сторінку властивостей брудні прапор вказати, що слід дозволити кнопку застосувати . Це відбувається, коли користувач змінює значення в полі сторін. Клацніть правою кнопкою миші клас Властивості сторінки (CPolyProp) в ClassView а потім виберіть Додати 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буде викликатися, коли з EN_CHANGE повідомлення для надсилання WM_COMMAND повідомлення в IDC_SIDES керування. OnChangeSides потім викликає SetDirty і проходить правда вказати сторінку властивостей зараз брудні, і кнопку застосувати повинен бути включений.

Тепер додати сторінку властивостей для вашого контролю. 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

Index