描述:我们平时想要选择一个区域东西的时候,会用鼠标拖动选择,那个时候会有一个随着鼠标动的方框,下面的代码就是实现这个的
先说下异或笔:
R2_NOTXORPEN是C++中一种绘画模式,它先把画笔颜色与屏幕颜色异或,(这里异或是数学计算,1与1为0,1与0为1,我们说颜色其实就是二进制数,)异或之后再取反最后得到一个颜色值显示在屏幕上。 举个例子,你使用R2_NOTXORPEN这种绘画模式,你用红色画笔在黑色背景上画一条直线,显示红色,但你再用这只笔在刚画的直线上重画一遍,就相当于把开始画的红线擦除掉了,划线的地方显示为背景色
void Clesson4View::OnMouseMove(UINT nFlags, CPoint point){ if (m_bdraw) { CClientDC dc(this); CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); CBrush *PoldBrush=dc.SelectObject(pBrush); int oldmode=dc.SetROP2(R2_NOTXORPEN); //dc.Ellipse(CRect(m_beginpoint,m_movepoint)); dc.Rectangle(CRect(m_beginpoint,m_movepoint)); m_movepoint=point; //dc.Ellipse(CRect(m_beginpoint,m_movepoint)); dc.Rectangle(CRect(m_beginpoint,m_movepoint)); dc.SelectObject(PoldBrush); dc.SetROP2(oldmode); // m_movepoint=point; //dc.Rectangle(CRect(m_beginpoint,m_movepoint)); //dc.Ellipse(CRect(m_beginpoint,m_movepoint)); ReleaseDC(&dc); } CView::OnMouseMove(nFlags, point); } void Clesson4View::OnLButtonDown(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 m_beginpoint=point; m_bdraw=true; m_beginpoint = m_movepoint = point; CView::OnLButtonDown(nFlags, point);}void Clesson4View::OnLButtonUp(UINT nFlags, CPoint point){ m_bdraw=false; CView::OnLButtonUp(nFlags, point);}
本文介绍如何使用 C++ 在 Windows 平台上实现拖拽选择框功能,通过鼠标的移动来绘制矩形选区,并利用 R2_NOTXORPEN 绘画模式实现选区的动态更新。
1558

被折叠的 条评论
为什么被折叠?



