Re: Drawing a rectangle via mouse drag?
What part of Scott's OnMouseMove did not support SDI? One has nothing to do
with other?
Why are you drawing your rectangle in the OnMouseMove method? All your
drawing code should be in OnPaint, just the way Scott posted it.
In your OnMouseMove, while there is capture you are recording the endpoint
and then invalidating the client area which will cause a WM_PAINT to get
posted after OnMouseMove returns, and then drawing a rect which will get
erased when the WM_PAINT from the Invalidate() call gets processed.
Anyway drawing anything in OnMouseMove is pointless.
AliR.
"Charles Tam" <CharlesTam@discussions.microsoft.com> wrote in message
news:B1E93C60-C653-45DA-83C7-F48893CDBD85@microsoft.com...
Hi Scott,
I've modified your code in OnMouseMove to support SDI applications. It
seems to be working fine. Please reply otherwise.
void CXxxDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if (GetCapture() == this)
{
m_ptEnd = point;
Invalidate();
}
CRect r(m_ptStart, m_ptEnd);
CPaintDC dc(this);
dc.GetSafeHdc();
dc.Rectangle(&r);
}
"Scott McPhillips [MVP]" wrote:
"Charles Tam" <CharlesTam@discussions.microsoft.com> wrote in message
news:8CA07CA7-F2AE-432F-9D81-15C5FC42C04E@microsoft.com...
In MFC 6, how do I draw a rectangle via a mouse drag?
Is there any example code I could look at?
Here's a minimal example:
void CSDIView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_ptStart = point;
m_ptEnd = point;
SetCapture();
}
void CSDIView::OnMouseMove(UINT nFlags, CPoint point)
{
if (GetCapture() == this)
{ m_ptEnd = point;
Invalidate();
}
}
void CSDIView::OnLButtonUp(UINT nFlags, CPoint point)
{
if (GetCapture() == this)
{ ReleaseCapture();
m_ptEnd = point;
Invalidate();
}
}
void CSDIView::OnDraw(CDC* pDC)
{
CRect r(m_ptStart, m_ptEnd);
pDC->Rectangle(&r);
}
--
Scott McPhillips [VC++ MVP]