CGuiPaper では、m_bInking フラグも保持されます。 InkStart 、描画シーケンスが処理中であることを通知するために true を に設定します。 たとえば、InkDraw メソッドは、このフラグを使用して、インク データを描画して保存する必要があるかどうかを判断します。
GUIPAPER の InkDraw メソッドを次に示します。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 の呼び出しは、GUI 画面に線イメージを描画するために行われます (m_hDCに保持されているデバイス コンテキスト ハンドルを使用)。 インク データは、IPaper インターフェイスの InkDraw メソッドを使用して記録するために COPaper オブジェクトにも渡されます。 m_bInkSavingが FALSE 場合、InkDraw は線イメージを描画しますが、COPaper にはデータを格納しません。 この条件は、再描画中に使用されます。