Compartilhar via


Método InkDraw

CGuiPaper também mantém um sinalizador de m_bInking. InkStart o define como TRUE para sinalizar que uma sequência de desenho está em processo. Por exemplo, o método InkDraw usa esse sinalizador para determinar se ele deve pintar e salvar dados de tinta.

Veja a seguir o método InkDraw de 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;
  }

Esse método não fará nada se m_bInking for FALSE. Essa é a condição quando o usuário está simplesmente movendo o mouse sobre a janela do cliente sem pressionar o botão esquerdo do mouse.

InkDraw claramente tem uma dupla responsabilidade. As chamadas Win32 MoveToEx e LineTo são feitas para desenhar imagens de linha na tela gui (usando o identificador de contexto do dispositivo mantido em m_hDC). Os dados de tinta também são passados para o objeto COPaper para gravação usando o método InkDraw da interface IPaper . Quando m_bInkSaving é FALSE, InkDraw pinta a imagem de linha, mas não armazena os dados em COPaper. Essa condição é usada durante o repositório.