Приложения
Приложение А. Функции, константы и структуры RDS
А.2. События блока и связанные с ними описания
А.2.6. События пользовательского интерфейса и рисования внешнего вида блоков
А.2.6.10. RDS_BFM_MOUSEDBLCLICK – двойной щелчок мыши
Поток, в котором вызывается функция модели
Главный поток RDS.
Первый параметр функции модели (int CallMode)
Константа RDS_BFM_MOUSEDBLCLICK.
Третий параметр функции модели (void *ExtParam)
Указатель на структуру описания события RDS_MOUSEDATA.
Возвращаемое функцией модели значение
| RDS_BFR_DONE | Двойной щелчок обработан блоком. |
| RDS_BFR_NOTPROCESSED | Двойной щелчок не обработан блоком, он будет передан в родительскую подсистему, а затем, если и она его не обработает, в RDS. |
Примечания
Реакция на событие RDS_BFM_MOUSEDBLCLICK вызывается при двойном щелчке на изображении блока в окне подсистемы, если одновременно выполняются следующие условия:
- RDS находится в режиме моделирования или расчета;
- изображение блока находится на видимом слое окна подсистемы, для которого разрешено редактирование;
- в параметрах блока разрешена реакция на мышь.
Блоки могут обрабатывать щелчки кнопок мыши только в режимах моделирования и расчета: в режиме редактирования мышь используется для редактирования схемы. Если изображения блоков перекрываются, двойной щелчок мыши сначала будет передан в блок, изображение которого находится ближе всего к переднему плану. Если его модель не обработает двойной щелчок, будет вызвана модель блока, находящегося дальше, и т.д. Если ни один блок не обработает двойной щелчок, будет вызвана модель подсистемы для реакции на событие RDS_BFM_WINDOWMOUSEDBLCLICK. Если же и подсистема не среагирует на двойной щелчок, он будет обработан RDS (будет включен режим редактирования и, если щелчок пришелся на блок, будет открыто окно его параметров или вызвана функция настройки). Реакция блоков на мышь подробно рассматривается в §2.12 руководства программиста. Следует помнить, что, в отличие от большинства других событий, при реакции на мышь возврат стандартной константы RDS_BFR_DONE сообщает RDS о том, что блок обработал действие пользователя. Таким образом, если разрешить в параметрах блока реакцию на мышь, блок начнет перехватывать все щелчки, пришедшиеся на его изображение, даже если не включать в модель реакции на события RDS_BFM_MOUSE*. Чтобы блок, которому разрешена реакция на мышь, был «прозрачным» для щелчков, его модель должна вернуть константу RDS_BFR_NOTPROCESSED (пример использования этой константы приведен в §2.12.3 руководства программиста).
Для описания произошедшего события служит структура RDS_MOUSEDATA (она используется и в других событиях реакции на мышь):
typedef struct { RDSINT32 x,y; // Координаты курсора мыши RDSINT32 BlockX,BlockY; // Координаты точки привязки блока RDSINT32 Left,Top; // Верхний левый угол изображения блока RDSINT32 Width,Height; // Размеры изображения блока RDSINT32 IntZoom; // Масштаб окна подсистемы в % DWORD Button; // Кнопка мыши (RDS_M*) DWORD Shift; // Флаги мыши и клавиатуры (RDS_M*, RDS_K*) BOOL BlockName; // Действие на имени блока double DoubleZoom; // Масштабный к-т окна (в долях единицы) RDSINT32 MouseEvent; // Событие RDSINT32 Viewport; // Устаревшее, больше не используется } RDS_MOUSEDATA; typedef RDS_MOUSEDATA *RDS_PMOUSEDATA;
Поля структуры
- x, y (RDSINT32)
- Координаты курсора мыши в окне подсистемы на момент возникновения события.
- BlockX, BlockY (RDSINT32)
- Координаты точки привязки изображения блока в текущем масштабе. Для блоков с векторной картинкой это положение начала координат этой картинки, для программно рисуемых блоков и блоков, изображаемых прямоугольником с текстом, это координаты левого верхнего угла изображения (горизонтальная ось координат направлена вправо, вертикальная – вниз, начало координат – левый верхний угол рабочего поля). Если положение блока связано с его переменными, значения BlockX и BlockY в этой структуре указываются уже с учетом значений этих переменных. При реакции на события RDS_BFM_WINDOWMOUSE* эти поля не используются.
- Left, Top (RDSINT32)
- Горизонтальная (Left) и вертикальная (Top) фактические координаты верхнего левого угла изображения блока в текущем масштабе на момент последней перерисовки окна подсистемы. При реакции на события RDS_BFM_WINDOWMOUSE* эти поля не используются.
- Width, Height (RDSINT32)
- Фактические ширина (Width) и высота (Height) изображения блока в текущем масштабе на момент последней перерисовки окна подсистемы. При реакции на события RDS_BFM_WINDOWMOUSE* эти поля не используются.
- IntZoom (RDSINT32)
- Текущий масштаб окна подсистемы в процентах.
- Button (DWORD)
- Кнопка мыши, нажатие или отпускание которой вызвало событие:
RDS_MLEFTBUTTON Левая кнопка мыши. RDS_MRIGHTBUTTON Правая кнопка мыши. RDS_MMIDDLEBUTTON Средняя кнопка мыши. - Shift (DWORD)
- Битовые флаги, описывающие состояние специальных клавиш клавиатуры и кнопок мыши в момент возникновения события.
- BlockName (BOOL)
- Событие произошло из-за действий с отображаемым именем блока, а не с его изобрадением. Это возможно только в том случае, если модель блока взвела флаг RDS_NAMEMOUSEREACTION.
- DoubleZoom (double)
- Текущий масштаб окна подсистемы в долях единицы: 1 для 100%, 2 для 200%, 0.5 для 50% и т.п.
- MouseEvent (RDSINT32)
- Действие пользователя, которое привело к возникновению события. В реакциях на события
RDS_BFM_MOUSE* дублирует параметр CallMode
функции модели. В реакциях подсистем
RDS_BFM_WINDOWMOUSE* в это поле записывается идентификатор события, близкого
по смыслу к произошедшему событию:
Событие CallMode Поле KeyEvent Нажатие кнопки мыши на изображении блока RDS_BFM_MOUSEDOWN RDS_BFM_MOUSEDOWN Отпускание кнопки мыши на изображении блока RDS_BFM_MOUSEUP RDS_BFM_MOUSEUP Перемещение курсора мыши над изображением блока RDS_BFM_MOUSEMOVE RDS_BFM_MOUSEMOVE Двойной щелчок на изображении блока RDS_BFM_MOUSEDBLCLICK RDS_BFM_MOUSEDBLCLICK Нажатие кнопки мыши на свободном месте окна подсистемы RDS_BFM_WINDOWMOUSEDOWN RDS_BFM_MOUSEDOWN Отпускание кнопки мыши на свободном месте окна подсистемы RDS_BFM_WINDOWMOUSEUP RDS_BFM_MOUSEUP Перемещение курсора мыши в окне подсистемы RDS_BFM_WINDOWMOUSEMOVE RDS_BFM_MOUSEMOVE Двойной щелчок на свободном месте окна подсистемы RDS_BFM_WINDOWMOUSEDBLCLICK RDS_BFM_MOUSEDBLCLICK Проверка возможности выбора блока щелчком мыши RDS_BFM_MOUSESELECT RDS_BFM_MOUSESELECT
См. также
RDS_BFM_MOUSEDOWN, RDS_BFM_MOUSEUP, RDS_BFM_MOUSEMOVE, RDS_BFM_WINDOWMOUSEDOWN, RDS_BFM_WINDOWMOUSEUP, RDS_BFM_WINDOWMOUSEMOVE, RDS_BFM_WINDOWMOUSEDBLCLICK.