Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все по ФБ (VS6).doc
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
210 Кб
Скачать
☆

Справка к страницам свойств фб

Вызов справки к страницам свойств ФБ осуществляется через стандартный метод IPropertyPage::Help.

Для упрощения реализации HTML справки можно использовать шаблон IMSHtmlHelpPropPageImpl, определенный в файле «MSHtmlHelpPropPage.h». Для внедрения справки с использованием этого шаблона необходимо выполнить следующую последовательность действий –

  1. В свойствах проекта на странице C/C++/Preprocessor в опцию "Additional include directories" добавить ..\\common (если это не было сделано ранее).

  2. В stdafx.h файл подключить #include "MSHtmlHelpPropPage.h"

  3. В списке наследования класса страницы свойст заменить класс IPropertyPageImpl на IMSHtmlHelpPropPageImpl.

  4. В конструкторе класса страницы свойств присвоить переменной m_dwHelpFileID идентификатор строки (из STRINGTABLE), содержащей имя chm-файла.

  5. В конструкторе класса страницы свойств присвоить переменной m_dwHelpContext идентификатор топика в chm-файле.

  6. Если данной странице свойств соответствует несколько топиков (например, страница свойств может открываться для разных объектов с разным содержанием), то нужно определить функцию UINT GetHelpTopicID() Она должна возвращать текущий топик.

Разработка визуальных фб на основе существующей библиотеки фб

Здесь и далее предполагается, что уже существует библиотека ФБ и сами ФБ, которые будем делать визуальными.

Визуальный ФБ состоит из ФБ и ActiveX контрола. ФБ и контрол обмениваются данными через набор переменных. Пока этот набор должен быть фиксированным. Каждая конкретная переменная служит только для односторонней передачи данных. Все переменные индексируются числами, но предлагается набор макросов, позволяющий автоматически вводить для них идентификаторы. Для того, что-бы эти идентификаторы были доступны и в реализации ФБ, и в реализации контрола необходимо создать header-файл и включить его в файлы контрола и ФБ. Этот файл можно сделать единым для нескольких визуальных ФБ (даже если в разных наборах одинаковые переменные, конфликтов не будет!).

  1. Создание общего h-файла (подкл в файл описания фб и файл описания контрола)

Набор имен переменных определяется с помощью таких макросов :

#ifndef __ ИМЯФАЙЛА _H__

#define __ ИМЯФАЙЛА _H__

BEGIN_VPIN_DEF (FBClass)

Name1,

Name2,

…..

END_VPIN_DEF

#endif //__ИМЯФАЙЛА_H__

FBClass – название класса ФБ (не контрола!).

Name1,Name2,… - имена переменных визуального ФБ. (В конце списка должна быть ‘,’)

  1. Изменения в создании фб

    • Подключить файл #include "IVisualFBImpl.h"

    • В список наследования добавить public IVisualFBImpl<FBClass>

    • В список интерфейсов добавить COM_INTERFACE_ENTRY(IVisualFB)

    • Добавить в декларацию класса макрос

CONTROL_CLSID (CLSID_Control)

с CLSID контрола, соответствующего данному ФБ, который посмотреть в описании класса контрола (когда он будет вставлен) где-нибудь в списке наследования, например

public CComCoClass<CLampCtrl, &CLSID_LampCtrl>,.

  • В FinalConstruct добавить вызов InitVisualMap();

  • Создать раздел – определение типов переменных с помощью макросов

BEGIN_VISUAL_MAP(FBClass)

VISUAL_POUT_ENTRY (Name1, VT_R8, 1.0) – для передачи данных от ФБ к контролу

VISUAL_PIN_ENTRY (Name2, VT_I4, 20) – для передачи данных от контрола к ФБ

END_VISUAL_MAP

Name1, Name2 – имена переменных. Они должны быть те же, что и в разделе BEGIN_VPIN_DEF.

VT_* - тип переменной

1.0, 20 – значение по умолчанию, передается контролу при переходе в Runtime.

  • Если нужно реагировать на изменение данных в контроле, переопределить функцию virtual HRESULT OnVisualData (short sIndex) sIndex – не используется.

Она вызывается когда изменяются переменные, описанные с помощью макроса VISUAL_PIN_ENTRY.

  • В начале функций, где необходим доступ к переменным (для чтения или записи), вставить USE_VISUALFB(FBClass)

  • Чтения производится функцией HRESULT GetVisualData (Name, &var), запись - HRESULT SetVisualData (Name, var)