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.