Навигация:
<< >> Оглавление Указатель

Описание пользователя

Глава 3. Использование стандартных модулей автокомпиляции

§3.7. Краткий перечень вводимых в модель описаний и реакций на события

§3.7.9. Внешний вид блока

§3.7.9.4. Рисование блока

Это событие возникает у всех блоков, для которых в окне параметров установлено программное рисование, при перерисовке окна подсистемы, в котором эти блоки находятся. В реакции на него блок должен нарисовать свой внешний вид при помощи функций Windows API или специальных функций рисования RDS. Примеры моделей, реагирующих на это событие, приведены в §3.6.5.

Текст реакции на событие программного рисования блока вводится на вкладке «события» левой панели редактора модели: раздел «внешний вид блока», подраздел «рисование блока». В классе блока для нее создается функция с именем rdsbcppDraw следующего вида:

  // Drawing the block image in the scheme
  void rdsbcppBlockClass::rdsbcppDraw( DrawData)
  {
     … пользовательский текст реакции … 
  }

Параметр функции DrawData – это указатель на структуру описания события :

  typedef struct {
     dc;             // Контекст устройства рисования
     CalcMode;      // Текущий режим RDS
    int BlockX,         // Координаты точки привязки
        BlockY;         // блока в окне
    double DoubleZoom;  // Масштаб окна (в долях единицы)
     RectValid;     // Флаг изменения размеров блока
    int Left,Top;       // Верхний левый угол блока
    int Width,Height;   // Ширина и высота блока
     *VisibleRect;  // Видимая в окне часть рабочего поля
     FullDraw;      // Необходимо перерисовать весь блок
  } ;
  typedef  *;

Поля структуры имеют следующий смысл:

dc (HDC)
Контекст устройства Windows (device context), на котором модель рисует изображение. Этот параметр используется только в графических функциях Windows API, в графических функциях RDS его указывать не нужно.
CalcMode (BOOL)
TRUE, если RDS находится в режимах моделирования или расчета, и FALSE, если RDS находится в режиме редактирования (в режиме редактирования сложные блоки часто рисуют в наиболее общей их форме и со всеми включенными дополнительными элементами, если эти элементы могут исчезать в процессе расчета).
BlockXBlockY (int)
Координаты верхнего левого угла изображения блока в текущем масштабе окна его подсистемы. В этих координатах уже учтена возможная связь положения блока с его переменными, которая может быть задана в окне параметров на панели «координаты точки привязки».
DoubleZoom (double)
Текущий масштаб окна родительской подсистемы блока в долях единицы: 1 – 100%, 0.5 – 50%, 2 – 200% и т.п. Если какие-то внутренние элементы программно рисуемого изображения блока (например, шрифт надписи) должны масштабироваться вместе с ним, при рисовании размеры этих элементов необходимо умножать на значение этого поля.
RectValid (BOOL)
Признак изменения размеров прямоугольника блока. Если в результате рисования модель изменяет размер блока (например, если его высота или ширина отражают его внутреннее состояние), в это поле необходимо записать значение TRUE и занести в следующие четыре целых поля (Left, Top, Width и Height) новые координаты и размеры блока. В автокомпилируемых блоках эта возможность используется крайне редко.
LeftTopWidthHeight (int)
Координаты левого верхнего угла (Left, Top) прямоугольной области, занимаемой блоком, ее ширина (Width) и высота (Height) в текущем масштабе с учетом возможной связи положения блока с его переменными. Эти значения можно непосредственно использовать в функциях рисования. В эти же поля модель может записать новые координаты и размеры блока, если, по какой-либо причине, она решит изменить их при рисовании (при этом также необходимо записать TRUE в поле RectValid).
VisibleRect (RECT*)
Указатель на структуру RECT Windows API, в которой записаны координаты видимой в данный момент в окне части рабочего поля подсистемы. Модель может использовать их для того, чтобы уменьшить потери времени на обновление окна, не рисуя части блока, не попавшие в видимую в данный момент область. Делать это не обязательно – рисование за пределами видимой в окне области отсекается автоматически.
FullDraw (BOOL)
Логическое поле, указывающее на необходимость полной перерисовки всего изображения блока (TRUE) или только тех его частей, которые изменились с момента последнего рисования (FALSE). Его использование позволяет снизить потери времени на обновление окна, не рисуя не изменившиеся части изображения блока без необходимости. В автокомпилируемых блоках эта возможность используется крайне редко, подробно она рассматривается в §2.10.2 руководства программиста.

При написании моделей блоков без использования модуля автокомпиляции рисованию блока соответствует константа RDS RDS_BFM_DRAW.


<< >> Оглавление Указатель