Глава 7 — Структуры данных и анатомия файла

Электронное открытие: создание и управление корпоративной программой

Электронное открытие: создание и управление корпоративной программой

Техническое руководство по поддержке цифровых расследований и судебных разбирательств
2009, страницы 177-200
https://doi.org/10.1016/B978-1-59749 -296-6.00007-9Получение прав и содержимого
Авторские права © 2009 Elsevier Inc. Все права защищены.


Рисование и обработка событий

«PreviousNext»

В этой главе рассказывается, как определить, является ли экземпляр подключаемого модуля оконным или безоконным, как рисовать и перерисовывать подключаемый модуль. s и как обрабатывать события подключаемого модуля.

Когда дело доходит до определения способа отображения экземпляра подключаемого модуля на веб-странице, у вас (и автора веб-страницы) есть много вариантов. Поставщик контента, который пишет веб-страницу, определяет режим ее отображения: является ли подключаемый модуль встроенным или отображается на отдельной отдельной странице. Вы определяете, является ли подключаемый модуль оконным или безоконным, по способу определения самого подключаемого модуля.

  • Оконный подключаемый модуль отображается в собственном собственном окне (или часть собственного окна) на веб-странице. Подключаемый модуль с окнами непрозрачен, скрывая часть страницы под окном отображения. Этот тип подключаемого модуля определяет, когда он рисует себя.
  • Подключаемый модуль без окон не требует собственного окна. Он рисуется в целевом объекте, называемом drawable, который соответствует либо окну браузера, либо внеэкранному растровому изображению. Drawable можно определить несколькими способами, в зависимости от платформы. Плагины без окон могут быть непрозрачными или прозрачными. Подключаемый модуль без окон рисует себя только в ответ на сообщение о рисовании от браузера.

Для получения информации о том, как HTML определяет режим отображения подключаемого модуля, см. Использование HTML для отображения подключаемого модуля -ins.

ПРИМЕЧАНИЕ. Безоконные плагины не поддерживались на платформе X Window System до Gecko 1.9 Alpha 7 (ошибка 137189 ).

Структура NPWindow

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

ПРИМЕЧАНИЕ : Когда подключаемый модуль отображается в окне, он отвечает за сохранение информации о состоянии и обеспечение восстановления исходного состояния..

Для подключаемых модулей без окон браузер вызывает метод NPP_SetWindow со структурой NPWindow, которая представляет собой объект для рисования. Для оконных плагинов браузер вызывает метод NPP_SetWindow со структурой NPWindow , представляющей окно.

// NPWindow Structuretypedef enum {NPWindowTypeWindow = 1, NPWindowTypeDrawable} NPWindowType; typedef struct _NPWindow {void * window; /* Зависящий от платформы дескриптор */uint32 x; /* Положение левого верхнего угла */uint32 y; /* относительно страницы Netscape */uint32 width; /* Максимальный размер окна */uint32 height; NPRect clipRect; /* Прямоугольник отсечения в координатах порта */# ifdef XP_UNIXvoid * ws_info; /* Дополнительные данные, зависящие от платформы */# endif/* XP_UNIX */NPWindowType type; /* Является ли это окном или вытяжным */} NPWindow; 

Параметр окна — это зависящий от платформы дескриптор элемента собственного окна в иерархии окон браузера в Windows и Unix. В Mac OS окно — это указатель на NP_Port.

Поля x и y указывают верхний левый угол подключаемого модуля относительно страницы.

Поля width и height определяют размеры подключаемого модуля площадь. Эти значения не должны изменяться подключаемым модулем.

Поле clipRect определяет прямоугольник отсечения подключаемого модуля в системе координат, где начало координат левый верхний угол вытягиваемого элемента или окна. Браузер вызывает NPP_SetWindow всякий раз, когда изменяемый объект изменяется. Для подключаемых модулей без окон clipRect из 0,0,0,0 сигнализирует, что подключаемый модуль не отображается.

поле type указывает тип NPWindow целевой области:

  • NPWindowTypeWindow: подключаемый модуль с оконным интерфейсом. Поле окна содержит дескриптор окна, зависящий от платформы.
  • NPWindowTypeDrawable: подключаемый модуль без окон. Поле окна содержит зависящий от платформы дескриптор объекта для рисования, как показано ниже:
    • Windows: HDC
    • Mac OS: указатель на NP_Port структура.
    • Unix/X11: не используется. (Возможность рисования предоставляется в сообщении рисования. См. Ниже.)

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

Плагины для рисования

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

Подключаемый модуль использует эти методы для рисования подключаемых модулей и обработки событий:

Методы подключаемого модуля, вызываемые браузером:

  • NPP_HandleEvent: доставляет в экземпляр событие, зависящее от платформы.
  • NPP_Print : Запросить для экземпляра операцию печати, зависящую от платформы.
  • NPP_SetWindow: установить окно, в котором подключаемый модуль рисует.

методы на стороне браузера, вызываемые подключаемым модулем:

  • NPN_ForceRedraw: принудительно отправляет сообщение рисования в подключаемый модуль без окон. дюйма.
  • NPN_InvalidateRect: сделать недействительной область в подключаемом модуле без окон перед перерисовкой или обновлением.
  • NPN_InvalidateRegion: сделать недействительной область в подключаемом модуле без окон перед перерисовкой или обновление.

Печать подключаемого модуля

Браузер вызывает метод NPP_Print , чтобы запросить подключаемый модуль экземпляр для печати самого себя.

 void NPP_Print (экземпляр NPP, NPPrint * printInfo); 

Параметр экземпляра представляет текущий плагин.

Параметр PrintInfo определяет режим печати. Для него установлено значение NP_FULL , чтобы указать печать надстройки на всю страницу, или NP_EMBED , если это встроенный модуль, напечатанный как часть окна. в который он встроен.

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

Встроенный плагин может установить для поля pluginPrinted в своем параметре PrintInfo значение false (по умолчанию). Это поле подструктуры _NPFullPrint структуры NPPrint . Браузер отображает необходимые диалоговые окна печати и снова вызывает NPP_Print . На этот раз для PrintInfo-> mode необходимо установить значение NP_EMBED .

  • Полностраничный плагин -in обрабатывает диалоговые окна печати и процесс печати по своему усмотрению. В этом случае, прежде чем браузер отобразит какие-либо диалоговые окна печати, вызывается NPP_Print с PrintInfo-> mode , равным NP_FULL . В Mac OS для полностраничной печати необходимо, чтобы поле PrintInfo содержало стандартный THPrint Mac OS (см. Printing.h).

Конечно , NPP_Print также вызывается с PrintInfo-> mode равным NP_EMBED , когда экземпляр внедрен. В этом случае platformPrint-> embedPrint.window содержит окно, в котором подключаемый модуль должен печатать.

В MS Windows обратите внимание, что координаты для прямоугольник окна имеют формат TWIPS. По этой причине вам необходимо преобразовать координаты x и y с помощью вызова Windows API DPtoLP при выводе текста.

Настройка окна

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

Последующие вызовы NPP_SetWindow для данного экземпляра обычно означает, что размер окна был изменен. Если window или window-> window имеет значение null, надстройка не должна выполнять никаких дополнительных графических операций в окне и должна освобождать все связанные ресурсы.

  NPError NPP_SetWindow (экземпляр NPP, NPWindow * window); 

Параметр экземпляра представляет текущий плагин.

Параметр окна является указателем на цель рисования для плагин. Для безоконных подключаемых модулей информация об окне, зависящая от платформы, указанная в window-> window , представляет собой зависящий от платформы дескриптор объекта рисования.

MS Windows и Unix

Для оконных плагинов в MS Windows и Unix поле window-> window является дескриптором подокна в иерархии окон Netscape.

Mac OS

Поле window-> window указывает на структуру NP_Port .

Получение информации

Для получения информации из браузера плагин вызывает метод NPN_GetValue .

 NPError NPN_GetValue (экземпляр NPP, переменная NPNVariable, void * value); 

Параметр instance представляет текущий плагин.

Unix и MS Windows

Запрошенная информация возвращается в параметре переменной. Этот параметр действителен только для платформ Unix и MS Windows. Для Unix это либо текущее отображение ( NPNVxDisplay ), либо контекст приложения ( NPNVxtAppContext ). Для MS Windows значением является собственное окно, в котором происходит отрисовка надстройки ( NPNVnetscapeWindow ).

Параметр value содержит имя подключаемого модуля. дюйм.

Вы также можете использовать NPN_GetValue , чтобы помочь создать меню или диалоговое окно для подключаемого модуля без окон.

Оконные плагины

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

В Mac OS браузер не предоставляет подключаемому модулю с оконным интерфейсом собственное окно, поскольку платформа Mac OS не поддерживает поддержка дочерних окон. Вместо этого подключаемый модуль с оконным интерфейсом обращается к графическому порту, связанному с окном обозревателя, со смещением, указанным обозревателем.

В MS Windows и Unix обозреватель создает дочернее окно для каждого подключаемого модуля. -в экземпляре и передает ему окно через NPP_SetWindow . В Mac OS приложение использует NPP_SetWindow , чтобы выделить прямоугольную часть своего графического порта для каждого экземпляра. На любой платформе браузер должен быть осторожен, чтобы не рисовать в области надстройки, и наоборот. Структура данных, переданная в NPP_SetWindow , представляет собой объект NPWindow , который содержит координаты области экземпляра и различные данные для конкретной платформы..

Обычно браузер вызывает NPP_SetWindow после создания экземпляра, чтобы подключаемый модуль мог немедленно начать рисование. Однако браузер может создавать невидимые экземпляры, для которых никогда не вызывается NPP_SetWindow и никогда не создается окно. Это происходит, когда подключаемые модули вызываются с элементом HTML object , который был скрыт с помощью правил CSS (см. Режимы отображения подключаемых модулей во введении) или с помощью embed элемент, для которого установлен атрибут hidden .

Браузер должен снова вызывать NPP_SetWindow всякий раз, когда размер или положение экземпляр изменяется, передавая ему каждый раз один и тот же объект NPWindow , но с разными значениями.

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

  • Mac ОС
  • Windows
  • Unix

Mac OS

В Mac OS браузер передает структуру NP_Port в поле окна структуры NPWindow . Эта структура содержит указатель на графический порт ( CGraphPtr ), в который должен рисовать экземпляр подключаемого модуля, а также координаты x и y левого верхнего угла этого порта. Подключаемый модуль может использовать эти координаты для вызова SetOrigin (portx, porty) для размещения верхнего левого угла своего прямоугольника в точке (0,0). Поле clipRgn структуры Mac OS GrafPort должно быть установлено на прямоугольник отсечения для экземпляра в координатах порта.

плагин и браузер используют один и тот же графический порт, они разделяют ответственность за правильное управление им. Браузер устанавливает порт для подключаемого модуля перед передачей подключаемому модулю события обновления двумя способами:

  • Браузер вызывает SetOrigin (npport- > portx, npport-> porty) . Этот метод делает левую верхнюю координату экземпляра равной (0,0).
  • Браузер устанавливает для области отсечения порта область подключаемого модуля, видимую в данный момент (не прокручиваемую со страницы, скрыты плавающими палитрами или иным образом скрыты).

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

Браузер и надстройка могут устанавливать обработчики Drag Manager для общего порта. Поскольку диспетчер перетаскивания вызывает оба обработчика независимо от того, где находится курсор, браузер не отображает выделение перетаскивания, когда курсор находится над прямоугольником экземпляра. Кроме того, браузер ничего не делает, когда падение происходит внутри прямоугольника экземпляра. Затем подключаемый модуль может отображать выделение перетаскивания и обрабатывать отпускания, когда они происходят в прямоугольнике экземпляра.

Браузер также отвечает за отправку подключаемому модулю всех событий, нацеленных на экземпляр, таких как щелчок мышью, когда курсор находится внутри прямоугольника экземпляра, или события приостановки и возобновления, когда приложение включается и выключается. События отправляются в подключаемый модуль с вызовом NPP_HandleEvent ; полный список типов событий см. в справочной записи для NPEvent .

Windows

В Windows браузер регистрирует window и создает экземпляр этого класса для экземпляра подключаемого модуля. Затем подключаемый модуль может создать подкласс окна для получения любых необходимых событий. Если подключаемому модулю необходимо получать периодические сообщения времени (например, для анимации), он должен использовать таймер или отдельный поток.

Unix

В Unix , браузер создает виджет «Область рисования мотивов» для экземпляра и передает идентификатор окна виджета в поле окна NPWindow . Кроме того, браузер создает объект NPSetWindowCallbackStruct и передает его в поле ws_info в NPWindow . Как и в Windows, плагин может получать все события для экземпляра, в данном случае через виджет. Если подключаемому модулю необходимо получать периодические сообщения времени, он должен установить таймер или создать ветвь потока.

Обработка событий для оконных подключаемых модулей

Все образы и События пользовательского интерфейса для экземпляра оконного плагина обрабатываются в соответствии с оконной системой его собственной платформы. API подключаемого модуля предоставляет собственный дескриптор окна, в котором экземпляр выполняет рисование с помощью вызова API NPP_SetWindow . NPP_SetWindow передает экземпляру объект NPWindow , содержащий собственный дескриптор окна.

В Windows и Unix каждый экземпляр получает свой собственный дочернее окно в иерархии окон браузера, а обработка изображений и обработка событий относятся к этому окну. Mac OS не поддерживает дочерние окна. Собственное окно совместно используется экземпляром и браузером. Экземпляр должен ограничивать свое рисование определенной областью общего окна, и он всегда должен сохранять текущие настройки, настраивать среду рисования и восстанавливать общую среду рисования до предыдущих параметров. В Mac OS события явно предоставляются экземпляру с помощью NPP_HandleEvent.

Plug-ins без окон

Плагин без окон не требует, чтобы собственное окно отображалось в. Вместо этого он отрисовывается в готовом для рисования ( HDC в Windows или CGrafPtr в Mac OS), который может быть как на экране, так и вне экрана.

Безоконные подключаемые модули предоставляют разработчику подключаемых модулей некоторые значительные возможности дизайна:

  • Вы можете разместить подключаемый модуль без окон в разделе; другие разделы могут существовать как над, так и под ним.
  • Вы можете создавать прозрачные плагины. В этом случае браузер рисует ту часть страницы, которая находится за подключаемым модулем. Плагин без окон рисует только непрозрачные части себя. Таким образом, подключаемый модуль может рисовать область неправильной формы, например фигуру или текст, поверх существующего фона.
  • Браузер поддерживает рисование подключаемых модулей за пределами экрана. Это позволяет манипулировать содержимым плагина. Например, трехмерное приложение может использовать содержимое подключаемого модуля в качестве карты текстуры.

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

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

  • Указание того, что подключаемый модуль не имеет окон
  • Недействительность области рисования
  • Принудительное отображение сообщения рисования
  • Делаем плагин непрозрачным
  • Делаем плагин прозрачным
  • Создание всплывающих меню и диалоговых окон
  • Обработка событий для подключаемых модулей без окон

Определение того, что подключаемый модуль безоконный

Чтобы указать, что подключаемый модуль не имеет окон, используйте Метод NPN_SetValue .

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

Чтобы указать, что подключаемый модуль не имеет окон, используйте NPN_SetValue с NPPVpluginWindowBool ​​ в качестве значения переменной и false в качестве значения значения. Подключаемый модуль выполняет этот вызов из своего метода NPP_New . Если подключаемый модуль не выполняет этот вызов, он считается подключаемым модулем с оконным интерфейсом.

Плагины в Mac OS X всегда работают без окон.

 NPError  NPP_New (NPMIMEType pluginType, экземпляр NPP, режим uint16, int16 argc, char * argn [], char * argv [], NPSavedData * saved) {... NPError result = NPN_SetValue (instance, NPPVpluginWindowBool, (void *) false);  } 

Аннулирование области рисования

Прежде чем он сможет перерисовать или обновить часть своей области рисования, подключаемый модуль без окон должен сначала сделать область недействительной с помощью любого из этих браузеров. методы: NPN_InvalidateRect или NPN_InvalidateRegion . Оба метода выполняют одни и те же операции:

  • Они аннулируют указанную область рисования перед перерисовкой или обновлением.
  • Они передают событие обновления или отрисовку сообщение плагину.

Браузер перерисовывает недопустимые области документа и подключаемые модули без окон через регулярные интервалы времени. Чтобы заставить сообщение рисования, надстройка может вызвать NPN_ForceRedraw после вызова одного из методов недействительности. Если подключаемый модуль вызывает один из этих методов, он асинхронно получает сообщение отрисовки.

 void NPN_InvalidateRect (экземпляр NPP, NPRect * invalidRect); void NPN_InvalidateRegion (экземпляр NPP, NPRegion invalidRegion); 

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

Оба метода заставляют метод NPP_HandleEvent передавать событие обновления или сообщение отрисовки в подключаемый модуль.

 #ifdef XP_MACtypedef RgnHandle NPRegion  ; #elif defined (XP_WIN) typedef HRGN NPRegion; #elif defined (XP_UNIX) typedef Region NPRegion; #elsetypedef void * NPRegion; #endif/* XP_MAC */void NPN_InvalidateRect (NPP instance, NPRect * invalidRect); voidate NPP instance (NPRect * invalidRect); voidate NPP instance (NPRect * invalidRect); voidate NPP  , NPRegion invalidRegion); 

Форсирование сообщения рисования

Оконные и безоконные плагины имеют разные модели рисования. Подключаемый модуль с оконным интерфейсом определяет, когда он рисует, тогда как подключаемый модуль без окон рисует в ответ на сообщение о рисовании от браузера. Подключаемый модуль может вызывать NPN_ForceRedraw () для синхронного вывода сообщения рисования, как только область была признана недействительной с помощью NPN_InvalidateRect () или NPN_InvalidateRegion () .

 void NPN_ForceRedraw (экземпляр NPP); 

Этот метод приводит к событию синхронного обновления или сообщению отрисовки для подключаемого модуля.

Примечание. Некоторые браузеры, включая Firefox 4, могут игнорировать вызовы NPN_ForceRedraw () .

Получение сообщения рисования

Подключаемый модуль не должен рисовать в свой объект рисования, если он не получает сообщение рисования. Для начала рисования в окне не нужно вызывать специфичную для платформы функцию. То есть подключаемый модуль не вызывает BeginPaint в Windows или BeginUpdate в Mac OS.

Windows
Подключаемый модуль получает сообщение WM_PAINT . Параметр lParam в WM_PAINT содержит указатель на структуру RECT , определяющую ограничивающую рамку области обновления. Некоторые плагины предпочитают игнорировать этот прямоугольник рисования и вместо этого всегда обновлять все окно плагина. Кроме того, поскольку подключаемый модуль и браузер используют один и тот же HDC, подключаемый модуль должен сохранить текущие настройки на HDC, настроить собственную среду, отрисовать себя и восстановить предыдущие настройки HDC. Параметры HDC необходимо восстанавливать всякий раз, когда управление возвращается в браузер, либо перед возвратом из NPP_HandleEvent , либо перед вызовом связанного с рисованием метода на стороне браузера..
Mac OS
Плагин получает событие обновления. Область отсечения порта CGrafPtr рисованного объекта установлена ​​на область обновления. Как и в случае оконных подключаемых модулей в Mac OS, подключаемый модуль должен сначала сохранить текущие настройки порта, настроить среду рисования соответствующим образом, отрисовать и восстановить порт до предыдущей настройки. Это должно произойти до того, как подключаемый модуль вернется из NP_HandleEvent или до того, как подключаемый модуль вызовет связанный с рисованием метод браузера.
Unix/X11

Подключаемый модуль получает событие GraphicsExpose . Структура XGraphicsExposeEvent содержит Xlib Drawable (который является внеэкранным Pixmap), его Display и грязный прямоугольник ( необязательный прямоугольник обрезки), указанный относительно верхнего левого угла объекта для рисования.

Плагин должен рисовать в Drawable со смещением, указанным в x и y структуры NPWindow, с прямоугольником обрезки, указанным в члене clipRect , и с Visual и Colormap , указанные в элементе ws_info .

Создание Плагин Opaque

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

Подключаемый модуль без окон по умолчанию является прозрачным. Чтобы сделать прозрачный плагин непрозрачным, вызовите NPN_SetValue , чтобы установить для NPPVpluginTransparentBool значение false. Плагин может вызвать этот метод в любое время после указания, что это плагин без окон.

Создание прозрачного плагина

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

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

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

Плагины без окон прозрачны по умолчанию. Если вы хотите сделать непрозрачный подключаемый модуль без окон прозрачным, вызовите метод NPN_SetValue и установите для NPPVpluginTransparentBool значение true. Плагин может вызвать этот метод в любое время после указания, что это плагин без окон.

Создание всплывающих меню и диалоговых окон

MS Windows и Только для Unix/X11

Безоконный плагин не отображает в собственном собственном окне. Вместо этого он рисует непосредственно в предоставленном ему drawable. Такое поведение представляет проблему, если вам нужно отображать всплывающие меню и модальные диалоговые окна в подключаемом модуле; подключаемому модулю требуется родительское окно для создания таких окон.

Для решения этой проблемы используйте NPN_GetValue , чтобы узнать, где находится подключаемый модуль рисует. Используйте NPNVnetscapeWindow в качестве значения для параметра переменной.

 NPError NPN_GetValue (экземпляр NPP, переменная NPNVariable, значение void *); 

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

Windows

Запрошенная информация, значение типа HWND, возвращается из NPN_GetValue в параметре значения.

Во многих случаях плагин -in может по-прежнему создавать собственное окно (прозрачное дочернее окно окна браузера), чтобы действовать как окно-владелец для всплывающих меню и модальных диалоговых окон. Вы можете дать этому прозрачному дочернему окну собственный процесс WindowProc. Подключаемый модуль может использовать это для работы с сообщениями WM_COMMAND , отправленными ему в результате отслеживания всплывающего меню или модального диалогового окна.

Unix/X11
Параметр значения для NPN_GetValue должен указывать на Window Xlib. При успешном возврате он будет содержать окно верхнего уровня браузера. Используйте это Window , чтобы установить свойство WM_TRANSIENT_FOR в диалоговых окнах.

Обработка событий для подключаемых модулей без окон

На всех платформах события, специфичные для платформы, передаются подключаемым модулям без окон с помощью метода NPP_HandleEvent . Подключаемый модуль должен возвращать значение true из NPP_HandleEvent , если он обработал событие, и false, если нет. Mac OS использует этот механизм как для оконных, так и для безоконных плагинов; на этой платформе NPP_HandleEvent — единственный способ, которым подключаемый модуль может получать события от своего хост-приложения.

 int16 NPP_HandleEvent (экземпляр NPP, событие NPEvent *);  

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

Этот код показывает конкретные данные, передаваемые через этот метод для каждой платформы:

 #ifdef XP_MACtypedef EventRecord NPEvent; #elif defined (XP_WIN) typedef struct _NPEvent {int16 event  ; int16 wParam; int32 lParam;} NPEvent; #elif defined (XP_UNIX) typedef XEvent NPEvent; #elsetypedef void NPEvent; #endif/* XP_MAC */int16 NPP_HandleEvent (экземпляр NPP, событие NPEvent *); 

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

«PreviousNext»

Оцените статью
logicle.ru
Добавить комментарий