如果图只是黑白的
当画一个图时,鼠标还在拖动中,就应该在先前那个结束点和当前点用模式R2_NOT重画图
形.这样就会有鼠标拖到哪画到哪的效果.因为之前的图形被NOT消失了.问题是,如果图是彩色的,使用NOT就会发生严重错误,例如你用黄色画圆,NOT后就变成了蓝
色,而不是消失.但如果简单使用R2_WHITE,在鼠标拖过已经有的图形就会把他们画成白的.请问在彩色模式下,用什么方式既可以不影响已经存在的图形,又可以达到Windows画图程
序的画图效果?我知道把每次的开始点和结束点用Invalidate重画可以达到这一效果.但能不能有其他办
法? 谢谢.
当画一个图时,鼠标还在拖动中,就应该在先前那个结束点和当前点用模式R2_NOT重画图
形.这样就会有鼠标拖到哪画到哪的效果.因为之前的图形被NOT消失了.问题是,如果图是彩色的,使用NOT就会发生严重错误,例如你用黄色画圆,NOT后就变成了蓝
色,而不是消失.但如果简单使用R2_WHITE,在鼠标拖过已经有的图形就会把他们画成白的.请问在彩色模式下,用什么方式既可以不影响已经存在的图形,又可以达到Windows画图程
序的画图效果?我知道把每次的开始点和结束点用Invalidate重画可以达到这一效果.但能不能有其他办
法? 谢谢.
CPen pen(PS_DOT, 1, XorColor);
pDC->SetROP2(R2_XORPEN);
你设置绘图模式时要保存原来的模式;画完之后再恢复到原来的模式。
是这样 NOT 2 次的。你用对了么?这个方法是正确的,你好好研究一下你的程序的流程吧。
HDC g_hMemDC;//显示DC
HDC g_oldMemDC;//未画前的DC
UINT g_uGraphType = 0;
省去初始化描写1200字......鼠标落下时:
SetCapture();
g_uGraphType = 1;///你要画的图形类型
g_beginPoint = point;
g_oldPoint = point;
鼠标移动时
if (1 == g_uGraphType)
{
HDC hMemDC;
省去初始化描写1200字...... //在hMemDC上绘制你的图形 此处省略比较g_beginPoint与g_oldPoint位置,看谁的x坐标更靠近左边,谁的y坐标更靠近上边的代码2000字...... //先把上次mousemove时画的图抹掉
::bitblt(g_hMemDC, g_beginPoint.x, g_beginPoint.y, g_oldPoint.x - g_beginPoint.x, g_oldPoint.y - g_beginPoint.y, g_oldMemDC, g_beginPoint.x, g_beginPoint.y, SRCCOPY);//这里认为g_beginPoint比g_oldPoint更靠近左上角 此处省略比较g_beginPoint与p位置,看谁的x坐标更靠近左边,谁的y坐标更靠近上边的代码2000字......
//把hMemDC上的图形贴到你的显示DC(g_hMemDC)中
::bitblt(g_hMemDC, g_beginPoint.x, g_beginPoint.y, point.x - g_beginPoint.x, point.y - g_beginPoint.y, hMemDC, g_beginPoint.x, g_beginPoint.y, SRCCOPY);//这里认为g_beginPoint比point更靠近左上角 g_oldPoint = point;
//此处省去释放hMemDC的代码1000字...... Invalidate(FALSE);//或InvalidateRect(你刚画的区域)
}鼠标抬起时:
ReleaseCapture();
g_uGraphType = 0;