InkDraw 方法

CGuiPaper 还保留m_bInking标志。 InkStart 将其设置为 TRUE 以指示绘图序列正在进行中。 例如,InkDraw 方法使用此标志来确定它是否应绘制和保存墨迹数据。

下面是来自 GUIPAPER 的 InkDraw 方法。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) 中的设备上下文句柄 (在 GUI 屏幕上绘制线条图像。 墨迹数据还会传递到 COPaper 对象,以便使用 IPaper 接口的 InkDraw 方法进行录制。 当m_bInkSaving为 FALSE 时,InkDraw 绘制线条图像,但不将数据存储在 COPaper 中。 此条件在重绘期间使用。