矩形绘制中闪烁的有关问题(使用橡皮线,但屏幕闪烁)
矩形绘制中闪烁的问题(使用橡皮线,但屏幕闪烁)
矩形绘制中使用橡皮线,但屏幕闪烁。采取两次安下左键来端点的值,用int m_step 来记录绘制的步骤,代码如下,
void CCreateRectView::OnLButtonDown(UINT nFlags, CPoint point)
{
CDC* pDC=GetDC();
pDC-> SelectStockObject(NULL_BRUSH);
switch(m_step)
{
case 0://第一次按下鼠标左键
m_lup=m_rbp=point;//矩形的左上点和右下点
m_step++;
break;
case 1://第二次按下鼠标左键
m_rbp=point;
m_step=-1;
m_bRect=TRUE; //标志直线生成
DrawRect(pDC,m_lup,point);
m_step++;
m_bRect=FALSE;
break;
}
ReleaseDC(pDC);
CView::OnLButtonDown(nFlags, point);
}
void CCreateRectView::OnMouseMove(UINT nFlags, CPoint point)
{
CDC* pDC=GetDC();
int nDrawMode=pDC-> SetROP2(R2_NOT); //设置绘图模式
pDC-> SelectStockObject(NULL_BRUSH);
if(m_step==1&&!m_bRect)//绘制图形的第二步,并且矩形没有生成
{
CPoint preRbp;
CPoint curRbp;
//获得鼠标所在的前一个位置
preRbp=m_rbp;
curRbp=point;
DrawRect(pDC,m_lup,preRbp);
DrawRect(pDC,m_lup,curRbp);
m_rbp=point;
}
pDC-> SetROP2(nDrawMode);
ReleaseDC(pDC);
CView::OnMouseMove(nFlags, point);
}
void CCreateRectView::DrawRect(CDC *pDC, CPoint rup, CPoint rbp)
{
pDC-> Rectangle(CRect(m_lup,m_rbp));
}
请问是怎么回事啊??????????
------解决方案--------------------
DrawRect(pDC,m_lup,preRbp);
DrawRect(pDC,m_lup,curRbp);
前一个是擦除前一个矩形,后一个是重新绘制矩形,于是在部分区域连续出现色彩变换,这就是闪烁的由来,一般采用现在内存DC中绘好,然后再用位块传输的方法解决
矩形绘制中使用橡皮线,但屏幕闪烁。采取两次安下左键来端点的值,用int m_step 来记录绘制的步骤,代码如下,
void CCreateRectView::OnLButtonDown(UINT nFlags, CPoint point)
{
CDC* pDC=GetDC();
pDC-> SelectStockObject(NULL_BRUSH);
switch(m_step)
{
case 0://第一次按下鼠标左键
m_lup=m_rbp=point;//矩形的左上点和右下点
m_step++;
break;
case 1://第二次按下鼠标左键
m_rbp=point;
m_step=-1;
m_bRect=TRUE; //标志直线生成
DrawRect(pDC,m_lup,point);
m_step++;
m_bRect=FALSE;
break;
}
ReleaseDC(pDC);
CView::OnLButtonDown(nFlags, point);
}
void CCreateRectView::OnMouseMove(UINT nFlags, CPoint point)
{
CDC* pDC=GetDC();
int nDrawMode=pDC-> SetROP2(R2_NOT); //设置绘图模式
pDC-> SelectStockObject(NULL_BRUSH);
if(m_step==1&&!m_bRect)//绘制图形的第二步,并且矩形没有生成
{
CPoint preRbp;
CPoint curRbp;
//获得鼠标所在的前一个位置
preRbp=m_rbp;
curRbp=point;
DrawRect(pDC,m_lup,preRbp);
DrawRect(pDC,m_lup,curRbp);
m_rbp=point;
}
pDC-> SetROP2(nDrawMode);
ReleaseDC(pDC);
CView::OnMouseMove(nFlags, point);
}
void CCreateRectView::DrawRect(CDC *pDC, CPoint rup, CPoint rbp)
{
pDC-> Rectangle(CRect(m_lup,m_rbp));
}
请问是怎么回事啊??????????
------解决方案--------------------
DrawRect(pDC,m_lup,preRbp);
DrawRect(pDC,m_lup,curRbp);
前一个是擦除前一个矩形,后一个是重新绘制矩形,于是在部分区域连续出现色彩变换,这就是闪烁的由来,一般采用现在内存DC中绘好,然后再用位块传输的方法解决