要实现的效果就是如果鼠标点击一窗口,但是当前的窗口不响应鼠标点击事件,而是而是窗口后面的窗口响应这个鼠标点击事件,例如对话框的后面是桌面上的图标,则“点击”对话框,对话框没反应,而是点中对话框后面的图标。请问这种效果怎样实现?在外国网站上看到一点涉及到这方面的资料,好像叫做click through,只能在2000/xp中实现!是不是一个未公开的API来的?

解决方案 »

  1.   

    得到下面窗体的句柄,然后POSTMESSAGE鼠标消息不就可以了吗。
      

  2.   

    我有一法,不知管用不? 如下要点击窗体下面的 [按钮] 之类的东西,其实也不难啊,(其它的类似)
    过程:
    1, 首先确定当前鼠标位置pt;GetCursorPos()
    2, 枚举当前所有的窗体;EnumWindows(),获得n个父窗体HWND.
    3, 得到每个父窗体的位置大小rect,比较看看pt是否在其中.如果在其中,则在枚举当前父窗口的子窗口,直到枚举完,枚举过程中比较子窗口的类别是否是Button类,如果是,则发一条消息让他按下执行,PostMessage();这样不断的枚举,直到完成所有的窗体查找.
    4, 如果是桌面图标,那麻烦就大了,先获得SysListView32类(桌面类),然后枚举出各个快捷图标的位置,[这是比较难的,要嵌入dll方式到iexplore中,恐怖吧:),具体参见windows核心编程]
       还有,就算你解决了此问题,如何让他执行???发消息肯定是没有折了,他是图标啊,如果模拟鼠标功能?也不行啊!图标在你窗体下面,使用mouse_envet(),也是白搭啊,单击双击都在你窗体上了,如果是这种情况,就先隐藏你的窗体,然后,嘿嘿,mouse_envet(),双击之吧,就ok.然后在回复过来,是窗体又可见.呵,麻烦啊,但不是没有办法的.
       当然如果桌面图标上有n个窗体,那么你得n次hide这些窗体哦!~~~~希望对你有所帮助
      

  3.   

    谢谢你的解答!我曾从国外的网站上下载一个clockx的软件来用,它就可以实现这种功能,不过它注明是说在win200/xp上用的,是不是跟操作系统有关!?
      

  4.   

    hbb1981 :
    你说的那种应该是osd了
      

  5.   

    http://www.codeproject.com/w2k/forecast.asp?target=osd#xx506378xx
      

  6.   

    To: woaini5994(坚持到底) 我就是找不到类似的代码,如果找到了,我也就不会上这里来发贴了!