抓屏中的控件选中原理(50分)

  • 主题发起人 主题发起人 leser
  • 开始时间 开始时间
L

leser

Unregistered / Unconfirmed
GUEST, unregistred user!
我最近用了好几个抓屏软件,其中他们都有一个capture control的功能,也就是能够抓取
屏幕中某窗口中的按键,菜单。。。,

我只知道通过下面:
GetCursorPos()
WindowFromPoint()
GetWindowRect()
这三个函数可以知道控件的位置,然后将全屏幕抓下来,最后用BitBlt函数将控件所在全屏
幕图形中位置的控件图形提取出来完成了。

但是在这些抓屏软件中这个功能你可以选择要抓取的控件,在被选中的控件周围就会有一个
表示被选中的框,你就知道这个框被选中了,我不明白这个被选中的功能是如何做的,
希望知道的高手能讲一讲。谢谢。
 
没人知道该如何做吗
 
用DrawFocusRect等实现的

你可以先通过GetDC(0)取得屏幕的DC,然后用DrawFocusRect
 
to 诸葛白痴
谢谢,有详细的代码吗?希望能贴点出来。
 
to leser
诸葛白痴 的建议很对!
你要自己动手试试!

DrawFocusRect(GetDC(0),Rect(1,1,10,10));
DrawFocusRect(GetDC(0),Rect(1,1,10,10));

 
是这样的,我想实现的功能是鼠标在屏幕上移动,若移动到某应用程序则能在应用程序上
画出一个框。这类似于'HyperSnap-Dx'中的用windows截图时所见的情形。不知如何实现,
或者谁能告诉我HyperSnap-Dx是怎么作的。

我发现HyperSnap-Dx截图时画面是静止的,所以我猜想它也许是先将整个屏幕截
下,然后在该图上处理画框,但若鼠标在该图上移动又如何取得其它程序句柄以取得某
window的rect,去画画框呢?难道可以在form上移动而把鼠标移动映射到桌面以取
得句柄?

不知哪位高手能指点一二?
 
下了一个分析看,原理:
先取得鼠标所在的控件的Rect,就是用你上面的那几个函数,然后将这个Rect存入一个
全局Rect,然后取得屏幕的DC,然后建立Canvas,将Pen的Style设成或方式(XOR) ,画
这个Rect,同时监视全局鼠标钩子,如果老鼠不在原来的Rect,将原来的Rect画去,就是
这样了,用一个Timer可以搞定
 
接受答案了.
 
后退
顶部