就是在Windows自带的画图程序中,可以选定一定的范围,选定以后,被选定的矩形用虚线方框显示。我的问题是:如果用虚线画在图像上,等鼠标拖到别的地方,虚线如何擦除呢?或者说原来的内容如何恢复呢?

解决方案 »

  1.   

    我想过很多种办法,都挺麻烦的。比如把原来的图像保存到一个内存位图中,等虚线方框改变后,先用内存位图中的内容恢复原图像内容,再保存新位置的内容,再在新位置画出虚线方框。但是这个挺麻烦。另外,可以用WM_PAINT消息来重画原处内容,这个虽然代码不复杂,但效率好象太低了。我在拖动鼠标的过程中,虚线方框要随时移动,每移动一点点,就要WM——PAINT消息重新恢复整个图像内容。这个还有一种方法,就是在画虚线方框的时候,用取反的方式,就是说把原图象的像素取反,黑的变成白的,白的变成黑的。恢复的时候,只要再取反一次就可以了。但是这样一来,就不能画出自己希望的线条了。有什么简便的方法吗?
      

  2.   

    "......先用内存位图中的内容恢复原图像内容,再保存新位置的内容,再在新位置画出虚线方框......"个人感觉用这种方法是不错的,只是不知道你这段话中的第二步有什么用。在只是在贴图过程中为了提高效率需要考虑Clip区域。好像是原先的虚线框区域和新的虚线框区域的异或吧。
      

  3.   

    CRectTracker类可以实现.有个成员函数TrackRubberBand,用它2,3句程序就可以实现这个功能.以前做过的.或者用SetROP2反转像素也可以.前者简单点
      

  4.   

    如果你想在鼠标拖动的时候 显示框,那么你的绘制框的函数就要onmousemove种完成。否则就要在onpaint或ondraw中完成。