在鼠标移动的时候可以用api函数得到鼠标所在点的窗口handle,然后可以得到它的窗口,然后
可以用api画框。好像这些都不会触发什么消息

解决方案 »

  1.   

      Declare Function SetCapture& Lib "user32" (ByVal hwnd As Long) 
     
      【说  明】   将鼠标捕获设置到指定的窗口。在鼠标按钮按下的时候,这个窗口会为当前应用程序或整个系统接收所有鼠标输入 
     【返回值】   Long,之前拥有鼠标捕获的窗口的句柄  
     
      【参数表】 
     
      hwnd -----------  Long,要接收所有鼠标输入的窗口的句柄
     Declare Function ReleaseCapture& Lib "user32" () 
     
      【说  明】   为当前的应用程序释放鼠标捕获  
     
      【返回值】   Long,TRUE(非零)表示成功,零表示失败  
      

  2.   

    to frs(FANG):
    当鼠标移动到工具栏时,图标会凸起来,移动到文件上时,文件会被选中,而我说的是连这种反应都没有的
      

  3.   

    to songyangk(小草) 
    我觉得不太可能是先抓好图片,如果是那样的话,该怎么知道在那个位置画框呢?只能对窗口对象画框,比方说一个按钮,一幅图片什么的
      

  4.   

    可能是使用API函数BITBLT将屏幕的内容拷贝到自己的窗口中,使自己窗口的内容和屏幕原先的内容一样,并将窗口的样式设成无边框和最大化和置于顶端,使用户感到是在原先的屏幕上抓取,其实是在自己的窗口中进行操作。
      

  5.   

    to htu(黄土):
    setcapture能够为整个系统接收所有鼠标输入吗?
    好像当本窗口没有焦点以后,他就接受不到消息了丫
      

  6.   

    to superzxf(superzxf):
    那画框是怎么实现的呢?比如当移动到一个按钮上时,按钮四周会有一个框显示,指示如果你现在点鼠标,那么抓取的就是这个按钮,其他的窗口对象也是一样。
      

  7.   

    to songyangk(小草):关键可能就在再处理~~~
    可以参考以下HyperSnapDX
      

  8.   

    to seeyard(浣熊) 
    SetCapture,ReleaseCapture,WindowFromPoint,GetWindowRect,Rectangle
    用以上函数就可以做到抓图程序
    你最好试一下,在下结论,我有完整的例子
      

  9.   

    to htu(黄土):
    能给点更多的提示吗?呵呵,我要不是试不成功也不会来这里问啦我有见一个用setcapture抓图的,那是点住某个控件不放,然后拖到哪里抓哪里的,那样子不行
    哦不是,是不符合我的要求我想要的效果就像hypersnapdx那样,其他问题都已解决,可惜当鼠标移动到工具栏时,图标会凸起来,移动到文件上时,文件会被选中,抓图是没有问题,我觉得效果不好,所以才来问解决的办法
      

  10.   

    当鼠标移到按钮上时,截获windows消息,让按钮以为鼠标没有移到它身上,至于画线可以用api来画的。
      

  11.   

    留个EMail吧,我给你发个例子,但可能不完全合你的要求,只是希望能给你一些帮助。
      

  12.   

    to songyangk(小草):
    谢谢!
    [email protected]
      

  13.   

    to seeyard(浣熊) 你说得对,图标会凸起来。
    我同意woowindice(黑山老妖)的意见 
    看来要截获windows消息,并把它从队列里撤出。
      

  14.   

    用api函数windowfrompoint可以得到屏幕上任意点对应的控件hwnd
    利用该hwnd可以得到该控件的信息(坐标长宽等)
    根据这些信息可以在自己的窗口中标出对应的控件