Condividi tramite


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.