Metodo InkDraw
CGuiPaper mantiene anche un flag di m_bInking. InkStart lo imposta su TRUE per segnalare che una sequenza di disegno è in fase di elaborazione. Ad esempio, il metodo InkDraw usa questo flag per determinare se deve disegnare e salvare i dati dell'input penna.
Di seguito è riportato il metodo InkDraw da 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;
}
Questo metodo non fa nulla se m_bInking è FALSE. Questa è la condizione quando l'utente sposta semplicemente il mouse sulla finestra client senza premere il pulsante del mouse sinistro.
InkDraw ha chiaramente una doppia responsabilità. Le chiamate Win32 MoveToEx e LineTo vengono effettuate per disegnare immagini di riga nella schermata GUI (usando l'handle del contesto del dispositivo mantenuto in m_hDC). I dati dell'input penna vengono passati anche all'oggetto COPaper per la registrazione usando il metodo InkDraw dell'interfaccia IPaper . Quando m_bInkSaving è FALSE, InkDraw disegna l'immagine della linea ma non archivia i dati in COPaper. Questa condizione viene usata durante il repainting.