Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
76
Добавлен:
02.04.2015
Размер:
8.79 Mб
Скачать
    1. Использование внутренних связей в Вашем программном коде

          1. Декларации

Для каждой внутренней связи, определённой в Вашем приложении, PhAB генерирует декларацию, так чтобы Вы могли идентифицировать и получить доступ к связи.

Поскольку PhAB извлекает имя декларации из имени модуля, каждый модуль может иметь только одну внутреннюю связь. Это может показаться ограничением, но PhAB предоставляет относящиеся к модулям функции (см. ниже), позволяющие Вам изнутри Вашего программного кода переделать установочную функцию модуля и месторасположение.

При создании имени декларации PhAB берёт имя модуля и добавляет ABM_ в качестве префикса. Так, например, если Вы создаёте внутреннюю связь к модулю с именем mydialog, PhAB создаст декларацию ABM_mydialog.

          1. Функции внутренней связи

Декларация используется следующими функциями API PhAB'a:

ApCreateModule()

Позволяет Вам вручную создавать модули, спроектированные в PhAB'е. Модуль, созданный этой функцией, ведёт себя точно так же, как если бы он был непосредственно связан связью ответной реакции. Например, если Вы определяете месторасположение и установочную функцию для внутренней связи, модуль появится в этом заданном месте и будет вызвана установочная функция. Более того, ответные реакции виджетов, горячие клавиши и всё такое прочее тоже активизируется.

ApModuleFunction()

Позволяет Вам изменить установочную функцию, присоединённую к внутренней связи.

ApModuleLocation()

Позволяет Вам изменить местоположение модуля на экране, присоединённое к внутренней связи.

ApModuleParent()

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

ApOpenDBase()

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

Для получения более полной информации об этих функциях см. "Справочник библиотечных функций Photon'а".

          1. Пример – отображение меню

Вот так Вы можете отобразить меню, когда пользователь нажмёт правую кнопку мыши, поместив её указатель на виджет:

  1. В PhAB создайте модуль меню. Дайте ему имя, скажем my_menu.

  2. Создайте внутреннюю связь (см. раздел "Создание внутренних связей" настоящей главы), как описано выше. Для выпадающего меню, обычно Вам потребуется, чтобы модуль располагался относительно виджета либо относительно указателя мыши.

  3. Выберите виджет, связанный с меню. Убедитесь, что в его Pt_ARG_FLAGS установлен флаг Pt_MENUABLE и сброшен Pt_ALL_BUTTONS.

  4. Сгенерируйте код для Вашего приложения. PhAB создаст декларацию внутренней связи. В нашем случае она будет называться ABM_my_menu.

  5. Каждый виджет, являющийся потомком PtBasic, имеет ресурс Pt_CB_MENU, который представляет из себя список ответных реакций, вызываемых, когда Вы нажимаете правую клавишу мыши при указателе мыши на виджете. Отредактируйте этот ресурс и создайте функцию ответной реакции, подобную этой:

int text_menu_cb( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo ) {

/* предотвращает предупреждения (варнинги) об отсутствии ссылок */

widget = widget, apinfo = apinfo, cbinfo = cbinfo;

ApCreateModule (ABM_my_menu, widget, cbinfo);

return( Pt_CONTINUE );

}

Параметр widget, передаваемый функции ApCreateModule(), используется, если меню позиционируется относительно виджета; аргумент cbinfo – если относительно указателя мыши.

  1. Скомпилируйте, слинкуйте и запустите Ваше приложение. Когда Вы нажмёте правую клавишу на виджете, появится Ваше меню.

Соседние файлы в папке Литература_1