(1 )在类里定义变量和消息:
bool m_bClickEmpty; //判断是否点击了空白的地方,以实现拖动框选择
CPoint OldEmptyBegin;//点击空白开始的座标
CPoint NowEmptyEnd;//移动时保存座标
afx_msg void OnMouseMove(UINT nFlags, CPoint point);afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
( 2 )在鼠标相关的消息里面写代码:
void XX::OnLButtonDown(UINT nFlags, CPoint point){
m_bClickEmpty = true;
OldEmptyBegin = point;
NowEmptyEnd = point;
}
void XX::OnMouseMove(UINT nFlags, CPoint point)
{
if ( m_bClickEmpty ) { CClientDC dc(this);
CBrush *pBrush = CBrush::FromHandle( (HBRUSH)GetStockObject( NULL_BRUSH) );
CBrush *POldBrush = dc.SelectObject( pBrush );
int nOldMode = dc.SetROP2(R2_NOTXORPEN);
dc.Rectangle( &CRect( OldEmptyBegin, NowEmptyEnd ) );
dc.Rectangle( &CRect( OldEmptyBegin, point ) );
NowEmptyEnd = point;
dc.SelectObject( POldBrush );
dc.SetROP2( nOldMode );
}
}
void XX::OnLButtonUp(UINT nFlags, CPoint point){
if ( m_bClickEmpty ) { m_bClickEmpty = false;
CClientDC dc(this);
CBrush *pBrush = CBrush::FromHandle( (HBRUSH)GetStockObject( NULL_BRUSH) );
CBrush *POldBrush = dc.SelectObject( pBrush );
int nOldMode = dc.SetROP2(R2_NOTXORPEN);
dc.Rectangle( &CRect( OldEmptyBegin, NowEmptyEnd ) );
dc.SelectObject( POldBrush );
dc.SetROP2( nOldMode );
}}