我使用CRectTracker时,屏幕上的虚线框总在那里,比如在对话框上显示了一个CRectTracker虚线框后,发生窗口重绘时那个虚线框仍然没有清除,但是如果调用了Invalidate或UpdateWindow后,虽然虚线框被清除了,但所要绘制的图像(图像是在OnPain()中绘制的,而且Invalidate或UpdateWindow是在绘制图像之前调用)也没有了,对话框上一片空白,弄了很久还是这样,不知到错在哪里,请大家帮忙!

解决方案 »

  1.   

    用SetROP2(R2_XOR)异或的方式画两遍,就可以把前一次的图像擦掉
    这里有擦除直线的代码,你可以参考一下 
    ::SetROP2(hdc,R2_XORPEN); 
    SelectObject(hdc,pen); 
    ... 
    LineTo(hdc,100,100);   //画线
    --------------------------------------------------------------- CDC* pDC = GetDC(); 
    CPen pen(PS_SOLID,4,RGB(128,0,0)); CPen* pOldPen = pDC->SelectObject(&pen); 
    pDC->SetROP2(R2_XORPEN); 
    pDC->MoveTo(0,0); 
    pDC->LineTo(100, 100);  // 擦除
    pDC->SelectObject(&pOldPen); 
    ReleaseDC(pDC); 
    //画线的时候也用上SetROP2(R2_XORPEN); 
    //就是调用相同的代码执行擦除和重画动作就可以了 
      

  2.   

    感谢marrco2005这么快给予帮助,但是,你那个好像是用于清除所绘制的图像,而不是清除那个橡皮筋虚线框哦,而且我不是直接绘图,我是在对话框上的一个图像控件上绘图,然后用CRectTracker对这个图像控件进行移动和缩放,当把图像控件移动到另一个位置后,原位置处那个橡皮筋虚线框仍然存在,而且当前图像控件处那个橡皮筋虚线框也还存在,也就是说,图像控件移动前和移动后这两个位置处都显示着那个橡皮筋虚线框,这样,当多次移动图像控件后,对话框上就会显示着许多个橡皮筋虚线框,把对话框窗口都弄得花花的,实在苦恼。
      

  3.   

    marrco2005是给你橡皮线的例子 你可以不使用CRectTracker而是自己画
      

  4.   

    你可以使用CDC的DrawDragRect方法来实现拖拽效果
    http://www.differentpla.net/content/2004/03/using-drawdragrect-to-rubber-band-a-selection