画像コントロール上でマウスをドラッグしてユーザーに四角形を描画させようとしている MFC アプリケーションがあります。CStatic によってサブクラス化された独自の PictureCtrl クラスを作成しました。ただし、マウスをクリックしても OnLButtonUp() が起動しません。
void PictureCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
SetCapture();
anchor = point;
CRect rect(point,point);
CDC* pDC = GetDC();
pDC->DrawDragRect(&rect, CSize(1,1), NULL, CSize(1,1), NULL, NULL);
m_lastRect = rect;
ReleaseDC(pDC);
CStatic::OnLButtonDown(nFlags, point);
}
void PictureCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
if(GetCapture() == this)
{
CRect rect(anchor, point);
rect.NormalizeRect();
CDC *pDC = GetDC();
pDC->DrawDragRect(&rect, CSize(1,1), &m_lastRect, CSize(1,1), NULL, NULL);
m_lastRect = rect;
ReleaseDC(pDC);
ReleaseCapture();
}
CStatic::OnMouseMove(nFlags, point);
}
void PictureCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
if(GetCapture() == this)
{
CDC *pDC = GetDC();
CRect rect(0,0,0,0);
pDC->DrawDragRect(rect, CSize(1,1), &m_lastRect, CSize(1,1), NULL, NULL);
ReleaseDC(pDC);
ReleaseCapture();
}
CStatic::OnLButtonUp(nFlags, point);
}
OnLButtonUp が起動しない理由について誰かが私に洞察を与えることができれば、それはありがたいです。マウスをドラッグすると、OnMouseMove がすべての呼び出しを使い果たしているためですか?
また、長方形が既に描画されている場合、ユーザーが新しい長方形を描画すると古い長方形が削除されるように、コードを変更する方法について誰かが提案してもらえますか?