Поделиться через


Метод InkDraw

CGuiPaper также сохраняет флаг m_bInking. InkStart задает для него значение TRUE , чтобы сообщить о том, что последовательность рисования находится в процессе. Например, метод InkDraw использует этот флаг, чтобы определить, следует ли рисовать и сохранять данные рукописного ввода.

Ниже приведен метод InkDraw из GUIPAPER. CPP.

HRESULT CGuiPaper::InkDraw(
                       SHORT nX,
                       SHORT nY)
  {
    if (m_bInking)
    {
      // Start this ink line at previous old position.
      MoveToEx(m_hDC, m_OldPos.x, m_OldPos.y, NULL);

      // Assign new old position and draw the new line.
      LineTo(m_hDC, m_OldPos.x = nX, m_OldPos.y = nY);

      // Ask the Paper object to save this data.
      if (m_bInkSaving)
        m_pIPaper->InkDraw(m_nLockKey, nX, nY);
    }

    return NOERROR;
  }

Этот метод ничего не делает, если m_bInking имеет значение FALSE. Это условие, когда пользователь просто перемещает указатель мыши на клиентское окно без нажатия левой кнопки мыши.

InkDraw явно несет двойную ответственность. Вызовы Win32 MoveToEx и LineTo выполняются для рисования изображений линий на экране графического пользовательского интерфейса (с помощью дескриптора контекста устройства, хранящихся в m_hDC). Данные рукописного ввода также передаются в объект COPaper для записи с помощью метода InkDraw интерфейса IPaper . Если m_bInkSaving имеет значение FALSE, InkDraw закрашивает изображение линии, но не сохраняет данные в COPaper. Это условие используется во время перерисовки.