Поделиться через


Добавление страницы свойств (учебник ATL, часть 6)

Страницы свойств реализованы как отдельный com-объектам, которые позволяют их для совместного использования, если это необходимо. На этом этапе будут выполнены следующие задачи добавление страницы свойств для элемента управления.

  • Создание ресурса страницы свойств

  • Добавление кода для создания и управления страницы свойств

  • Добавление страницы свойств к элементу управления

Создание ресурса страницы свойств

Чтобы добавить страницу свойств к элементу управления, используйте библиотеку ATL мастер добавления классов.

Добавление страницы свойств

  1. В обозревателе решений щелкните правой кнопкой мыши многоугольник.

  2. В контекстном меню выберите команду Добавить, а затем щелкните Добавить класс.

  3. В списке шаблонов выберите Свойства ATL и выберите пункт Добавить.

  4. При появлении страницы свойств библиотеки ATL введите PolyProp как имя Меньше.

  5. Нажмите кнопку Строки, чтобы открыть страницу Строки и выполнить вход &Многоугольник как Название.

    Название Страницы свойств строка, которая появляется на вкладке для данной страницы. Фрейм свойства Строка документации описание, которое использует для помещения в состоянии совет линии или средства. Обратите внимание, что стандартный фрейм свойства в настоящий момент не использует эту строку, поэтому можно оставить по умолчанию содержимым. Не создадите Файл справки в настоящее время, поэтому удалите запись в этом текстовом поле.

  6. Щелкните Готово и объект страницы свойств будет создать.

Следующие 3 файла созданы:

Файл

Описание

PolyProp.h

Содержит класс CPolyProp C++, который реализует страницу свойств.

PolyProp.cpp

Включает файл PolyProp.h.

PolyProp.rgs

Скрипт реестра, который регистрирует объект страницы свойств.

Кроме того, внесены следующие изменения кода:

  • Новая страница свойств добавлена к сопоставлению записи объекта в Polygon.cpp.

  • Класс PolyProp добавить в файл Polygon.idl.

  • Новый файл сценария PolyProp.rgs реестра добавить к ресурсу проекта.

  • Шаблон диалогового окна добавить к ресурсу проекта для страницы свойств.

  • Строки свойства, указанные добавлены в таблицу строки ресурсов.

Теперь добавьте поля, которая должна отображаться на страницу свойств.

Добавление полей на страницу свойств

  1. В обозревателе решений дважды щелкните файл ресурсов Polygon.rc. Это будет открыто представление ресурсов.

  2. В представлении ресурсов разверните узел диалогового окна и дважды щелкните IDD_POLYPROP. Обратите внимание, что диалоговое окно, в котором отображается пустое, кроме метки, предписывает вставке элементы управления здесь.

  3. Выберите нужную метку и измените ее для чтения стороны:, отредактировав текст Заголовок в окне Свойства.

  4. Измените размеры окна метки таким образом, чтобы он размера текста по размеру.

  5. Перетащите элемент управления "Поле ввода" с панели элементов справа от метки.

  6. Наконец, изменение ID элемента управления " Поле ввода IDC_SIDES с помощью окна свойства.

Это выполняет процесс создания ресурса страницы свойств.

Добавление кода для создания и управления страницы свойств

Теперь, после создания ресурса страницы свойств, необходимо написать код реализации.

Во-первых, включите класс CPolyProp, чтобы задать число его сторон в объекте Применить при нажатии кнопки.

Чтобы применить изменения функции, чтобы задать число его сторон

  • Замените функция Apply в PolyProp.h следующим кодом:

    STDMETHOD(Apply)(void)
    {
       USES_CONVERSION;
       ATLTRACE(_T("CPolyProp::Apply\n"));
       for (UINT i = 0; i < m_nObjects; i++)
       {
          CComQIPtr<IPolyCtl, &IID_IPolyCtl> pPoly(m_ppUnk[i]);
          short nSides = (short)GetDlgItemInt(IDC_SIDES);
          if FAILED(pPoly->put_Sides(nSides))
          {
             CComPtr<IErrorInfo> pError;
             CComBSTR strError;
             GetErrorInfo(0, &pError);
             pError->GetDescription(&strError);
             MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
             return E_FAIL;
          }
       }
       m_bDirty = FALSE;
       return S_OK;
    }
    

Страница свойств может иметь более одного клиента, вложенный в ней одновременно, поэтому циклы функции Apply вокруг и вызывает put_Sides на каждом клиенте при значение, полученное из поля ввода. Используется класс CComQIPtr, который выполняет QueryInterface для каждого объекта для получения интерфейса IPolyCtl из интерфейса ( IUnknown, хранящихся в массиве m_ppUnk ).

Теперь код проверяет, что свойству Sides фактически работал. Если он завершается неудачей, то код показывает подробные сведения об ошибке отображения окна сообщения от интерфейса IErrorInfo. Как правило, интерфейс ISupportErrorInfo контейнер запрашивает объект и вызывает InterfaceSupportsErrorInfo во-первых, чтобы определить, поддерживает ли объект сведений об ошибке. Можно пропустить эту задачу.

CComPtr помогает автоматической подгонки ссылку учитываются, поэтому не нужно вызывать Release в интерфейсе. CComBSTR помогает при BSTR обработки, поэтому нет необходимости выполнять последний вызов SysFreeString. Также можно использовать один из различных классов преобразования строк, поэтому можно преобразовать BSTR если необходимый (поэтому макрос USES_CONVERSION в начале функции).

Кроме того, необходимо установить пометить страницы свойств пакостный, чтобы указать, что кнопка Применить должна быть включена. Это происходит, когда пользователь изменяет значение в поле ввода стороны.

Обрабатывать кнопку применить

  1. В представлении классов щелкните правой кнопкой мыши CPolyProp и нажмите кнопку Свойства в контекстном меню.

  2. В окне свойства щелкните значок События.

  3. Разверните список узлов IDC_SIDES в случае.

  4. Выберите EN_CHANGE и из раскрывающегося меню справа щелкните <Добавить> OnEnChangeSides. Объявление обработчика OnEnChangeSides будет добавлено к Polyprop.h и реализацию обработчика к Polyprop.cpp.

Далее вы измените обработчик.

Изменить метод OnEnChangeSides

  • Добавьте следующий код в Polyprop.cpp методу OnEnChangeSides (при удалении любой код, мастер обращен там).

    LRESULT CPolyProp::OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, 
       HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
       SetDirty(TRUE);
    
       return 0;
    }
    

OnEnChangeSides будет вызываются, когда сообщение WM_COMMAND будет отправлено с уведомлением EN_CHANGE для управления IDC_SIDES. OnEnChangeSides затем вызывает SetDirty и пропуски TRUE чтобы отобразить страницу свойств теперь пакостны и кнопку Применить должна быть включена.

Добавление страницы свойств к элементу управления

Библиотеки ATL добавляет мастер классов и мастер страниц свойств библиотеки ATL не добавляет страницу свойств к элементу управления автоматически, поскольку может быть несколько элементов управления в проекте. Нужно добавить запись в сопоставление свойства элемента управления.

Добавление страницы свойств

  • Откройте PolyCtl.h и добавьте эту линию к сопоставлению свойств.

    PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
    

Сопоставление свойств элемента управления теперь выглядит следующим образом:

BEGIN_PROP_MAP(CPolyCtl)
   PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
#ifndef _WIN32_WCE
   PROP_ENTRY_TYPE("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage, VT_UI4)
#endif
   PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
   // Example entries
   // PROP_ENTRY("Property Description", dispid, clsid)
   // PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

Можно добавить макрос PROP_PAGE с идентификатором CLSID страницы свойств, но если используется макрос PROP_ENTRY как показано ниже, то значение свойства Sides также сохранено, когда элемент управления сохранить.

3 Параметра к макросу описание свойства, DISPID свойства, и идентификатор CLSID страницы свойств, которой принадлежит свойство. Это полезно, если, например, загрузке элемента управления в Visual Basic и задано число его сторон во время разработки. Поскольку число его сторон сохранено при перезапуске проекта Visual Basic, число его сторон будет восстановлено.

Построение и тестирование элемента управления

Теперь постройте этот элемент управления и вставьте его в тестовый контейнер элементов управления ActiveX. В тестовом контейнере, в меню Изменить, нажмите кнопку объект класса PolyCtl. Отобразится страница свойств. перейдите на вкладку Многоугольник.

Кнопка Применить исходной отключена. Начните вводить значение в поле стороны и кнопку Применить станет включенной. После завершения вставки значения, нажмите кнопку Применить. Отображение элемента управления, и кнопка изменяется Применить снова отключена. Попытка вставки недопустимое значение. Вы увидите, что окно сообщения содержит описание ошибки, что набор из функции put_Sides.

Далее предстоит размещение элемента управления на странице.

Возвращается к шагу 5 | В шаге 7 на

См. также

Ссылки

Учебник по активной библиотеке шаблонных классов (ATL)