Метод InkDraw
CGuiPaper также сохраняет флаг m_bInking. InkStart задает для него значение TRUE , чтобы сообщить о том, что последовательность рисования находится в процессе. Например, метод InkDraw использует этот флаг, чтобы определить, следует ли рисовать и сохранять данные рукописного ввода.
Ниже приведен метод InkDraw из 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;
}
Этот метод ничего не делает, если m_bInking имеет значение FALSE. Это условие, когда пользователь просто перемещает указатель мыши на клиентское окно без нажатия левой кнопки мыши.
InkDraw явно несет двойную ответственность. Вызовы Win32 MoveToEx и LineTo выполняются для рисования изображений линий на экране графического пользовательского интерфейса (с помощью дескриптора контекста устройства, хранящихся в m_hDC). Данные рукописного ввода также передаются в объект COPaper для записи с помощью метода InkDraw интерфейса IPaper . Если m_bInkSaving имеет значение FALSE, InkDraw закрашивает изображение линии, но не сохраняет данные в COPaper. Это условие используется во время перерисовки.