16,551
社区成员
发帖
与我相关
我的任务
分享
class CMyDlg : public CDialog
{
...
protected:
BOOL m_bLBtnDown;
CPoint m_ptStart;
CArray<CPoint> m_ptArr;
};
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bLBtnDown = TRUE;
m_ptStart = point;
CDialog::OnLButtonDown(nFlags, point);
}
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
m_ptArr.Add( point );
if( m_ptArr.GetSize() == 3 )
{
m_ptArr.RemoveAt( 0 );
}
ASSERT( m_ptArr.GetSize() <= 2 );
CClientDC dc( this );
if( m_ptArr.GetSize() == 2 )
{
dc.SetROP2( R2_XORPEN );
if( m_bLBtnDown )
{
dc.MoveTo( m_ptStart );
dc.LineTo( m_ptArr[0] );
}
}
if( m_bLBtnDown )
{
dc.MoveTo( m_ptStart );
dc.LineTo( point );
}
TRACE1 ( "m_ptArr.GetSize() = %d\n", m_ptArr.GetSize() );
CDialog::OnMouseMove(nFlags, point);
}
void CMyDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bLBtnDown = FALSE;
CDialog::OnLButtonUp(nFlags, point);
}
//m_ptStart、m_ptPre、m_ptEnd分别为起始点、鼠标移动前的虚终点、终点
pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
nOldMode = pDC->SetROP2(R2_NOTXORPEN); //或者是XORPEN
pDC->Rectangle(m_ptStart.x, m_ptStart.y, m_ptPre.x, m_ptPre.y); //擦除之前的矩形
pDC->Rectangle(m_ptStart.x, m_ptStart.y, m_ptEnd.x, m_ptEnd.y); //绘制当前的矩形
pDC->SetROP2(nOldMode);
pDC->SelectObject(pOldBrush );