程序功能:拖动鼠标到桌面不同控件或窗口上以红色显示其外框,类似于超级屏捕效果.
现在效果已经实现,但是小弟试了很多次,都没搞定,前一次绘图的内容如何擦除??
试用updatewindow,sendmessage(wm_paint...等等,都没效果,请各位兄弟帮忙看看...{这是主功能块,鼠标移动时取得对应窗口或控件...}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var
   p:tpoint;
   whand:thandle;
   fs:tcanvas;
beginif capture then
 begin
    fs:=tcanvas.Create;
    getcursorpos(p);
    whand:=windowfrompoint(p);
    fcan.Handle:=getwindowdc(getdesktopwindow);    //sendmessage(whand,WM_PAINT,0,0);//好像也无效...
    getwindowrect(whand,fp);
    fcan.Pen.Color:=clred;
    fcan.Pen.Width:=2;
    fcan.Brush.style:=bsclear;    fcan.Refresh;//刷新画布无效...
    fcan.Rectangle(fp); end;
end;

解决方案 »

  1.   

    在你画图(改变桌面图片内容)前,先备分这张桌面图到一张TBimtap中,然后往桌面上画。想擦去原来画的东西的时候,就把需要恢复的区域(TRect)从那张TBitmap中用CopyRect()再贴回来。没做过,你试试。发消息应该可以的吧??
      

  2.   

    SydPink(Miss Syd.Barrett) ( ) 信誉:98 
    方法不错,不过这样很慢!!楼主:
    画线时设置:
    Canvas.Pen.Mode := pmXor;
    意思就是取反,如果再反一次就恢复了三。:)也就是画第一次,线条出来,同样的位置再画一次就消失。