关于窗口重画的问题,求助

海天候 2004-09-14 11:30:11
程序功能:拖动鼠标到桌面不同控件或窗口上以红色显示其外框,类似于超级屏捕效果.
现在效果已经实现,但是小弟试了很多次,都没搞定,前一次绘图的内容如何擦除??
试用updatewindow,sendmessage(wm_paint...等等,都没效果,请各位兄弟帮忙看看...

{这是主功能块,鼠标移动时取得对应窗口或控件...}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
p:tpoint;
whand:thandle;
fs:tcanvas;
begin

if 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;
...全文
215 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
海天候 2004-09-20
  • 打赏
  • 举报
回复
好像也不行耶
海天候 2004-09-19
  • 打赏
  • 举报
回复
好像不行耶:P
海天候 2004-09-19
  • 打赏
  • 举报
回复
兄弟这方法试试,呵呵:P
scycgjr 2004-09-19
  • 打赏
  • 举报
回复
Canvas.Pen.Mode := pmNotXor
蓝色光芒 2004-09-17
  • 打赏
  • 举报
回复
SydPink(Miss Syd.Barrett) ( ) 信誉:98
方法不错,不过这样很慢!!

楼主:
画线时设置:
Canvas.Pen.Mode := pmXor;
意思就是取反,如果再反一次就恢复了三。:)

也就是画第一次,线条出来,同样的位置再画一次就消失。
海天候 2004-09-16
  • 打赏
  • 举报
回复
可惜这样想是不行迪...
lili1 2004-09-16
  • 打赏
  • 举报
回复
艾哈,我的意见也是这样耶。
海天候 2004-09-16
  • 打赏
  • 举报
回复
兄弟你和我的想法不谋而合,今天在抽烟的时候也想到了:P^_^
SydPink 2004-09-15
  • 打赏
  • 举报
回复
在你画图(改变桌面图片内容)前,先备分这张桌面图到一张TBimtap中,然后往桌面上画。想擦去原来画的东西的时候,就把需要恢复的区域(TRect)从那张TBitmap中用CopyRect()再贴回来。没做过,你试试。发消息应该可以的吧??

1,185

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧