ActiveX с нуля

Добавление другой страницы свойств.


ActiveX может иметь свойств больше, чем помещается на обну страницу. В этом случае вы можете добавить несколько дополнительных страниц. Ниже рассматривается добавление страниц свойств, если есть уже хотя бы одна страница.

Замечание: Cтрого рекомендуется, чтобы размеры страниц не менялись. Они составляют 250х62 единицы для базовой страницы и страницы цветов и 250х110 единиц для страницы шрифтов. Страница по умолчанию, созданная Сontrol Wizard, имеет размер 250х62 единицы. Если Вы измените размер, то каждый раз при открытии свойств будет выдаваться сообщение о несоответствии размеров.

Для того, чтобы создать дополнительную страницу Вы должны выполнить следующие действия:

1.      Выбрать закладку ResourceView  в Project Workspace.

2.      В меню Insert щелкнуть на строке Resource.

3.      Выбрать ресурс Dialog для создания нового диалога и дважды щелкнуть мышкой.

4.      Удалить кнопки OK и Cancel.

5.      Щелкнуть правой кнопкой мыши и откройте окно Dialog Properties. Впечатайте идентификатор диалога, например, IDD_PROPPAGE_NEWPAGE.

6.      Выбрать вкладку Styles, из выпадающего списка Styles выбрать Child. из выпадающего списка Border выбрать None. Убедиться, что опция Titlebar не включена, а на закладке More Styles опция Visible не включена.

7.      Дважды щелкнуть кнопкой мыши на окне диалога для запуска ClassWizard.

8.      Добавить новый класс в диалоге Adding a Class.

9.      Ввести имя нового класса в диалоге New Class в элементе Class Name.



10.   Для изменения имена файлов можно щелкнуть на кнопке Change.

11.  В качестве базового класса Вы должны выбрать ColePropertyPage в списке Base Class.

12.   В элементе Dialog ID выбрать IDD_PROPPAGE_NEWPAGE.

13.  Щелкнуть на OK, чтобы создать класс. Можно закрыть ClassWizard.


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

BEGIN_PROPPAGEIDS(CMyCtrlCtrl, 2)

    PROPPAGEID(CMyCtrlPropPage::guid)

   PROPPAGEID(CAddtlPropPage::guid)

...

END_PROPPAGEIDS(CMyCtrlCtrl)

Здесь CAddtlPropPage – имя нового класса. В макросе BEGIN_PROPPAGEIDS измените второй параметр (счетчик страниц) , увеличив его на 1.

В этот же файл реализации элемента включите h-файл нового класса страницы.

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

1.      Откройте вкладку ResourceView.

2.      Дважды щелкните на папке String Table.

3.      Щелкните на пустой строке в правой части окна и впечатайте заголовок строки, например, Новая страница. При этом откроется окно свойств, в котором в элементе Caption появится введенная строка. В элементе ID впечатайте обозначение идентификатора, например, IDS_ADDPAGE. Нажмите кнопку OK.

4.      Повторите пункт 3 для вставки строки с заголовком для страницы, например, Дополнительная страница, с идентификатором IDS_ADDPPG_CAPTION.

5.      В файле .CPP Вашего нового класса (например, CAddtlPropPage) измените CAddtlPropPage::CAddtlPropPageFactory::UpdateRegistry так, чтобы в функцию AfxOleRegisterPropertyPageClass

передавался в качестве параметра идентификатор диалога-страницы свойств:

BOOL CAddtlPropPage::CAddtlPropPageFactory::UpdateRegistry(BOOL bRegister)

{

    if (bRegister)

        return AfxOleRegisterPropertyPageClass(AfxGetInstanceHandle(),

                     m_clsid, IDS_ADDPAGE);

    else

        return AfxOleUnregisterClass(m_clsid, NULL);

}

6.      Измените конструктор нового класса CAddtlPropPage

так, чтобы IDS_ADDPPG_CAPTION передавался в COlePropertyPage конструктор:

CAddtlPropPage::CAddtlPropPage() :

// ****** Add your code below this line ********** //

     COlePropertyPage(IDD,  IDS_ADDPPG_CAPTION)

// ****** Add your code above this line ********** //

{

    //{{AFX_DATA_INIT(CAddtlPropPage)

    // NOTE: ClassWizard will add member initialization here

    //    DO NOT EDIT what you see in these blocks of generated code !

    //}}AFX_DATA_INIT

}

Теперь Вы можете перестроить проект и протестировать элемент в Test Container, чтобы увидеть новую страницу свойств.


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