to tomboy:<br> 其实,截获Form的MouseEnter和MouseLeave消息的缺点还不仅仅是你上面说的那种情况,当你快速<br> 移动鼠标时,往往根本就截获不到。请看Another_eYes大侠在下面这个帖子中的精彩发言<br> http://www.delphibbs.com/delphibbs/dispq.asp?lid=367914<br> <br> 除了Another_eYes大侠提供的两个方法以外,我在提供第三个方法。这个方法虽然笨一些,但绝对<br> 有效。是C++Builder代码,但由于代码比较简单,你应该能看明白<br> 下面代码实现的功能和OICQ的窗口类似,鼠标移向屏幕的左上角,弹出窗口,鼠标移出窗口时,窗口<br> 立即隐藏<br> 放置一个TTimer控件,设置200毫秒相应一次,再声明一个全局变量bIsHide,并将其初始化为<br> bIsHide = true;表示此时窗口是隐藏状态的<br> 然后,<br> void __fastcall TfrmMain::TimerTimer(TObject *Sender)<br> {<br> TPoint ScreenPos;<br> GetCursorPos(&ScreenPos);<br> if(bIsHide)<br> {<br> if( ScreenPos.x == 0 && ScreenPos.y == 0 )<br> {<br> Left = 0;<br> Top = 0;<br> Show();<br> bIsHide = false;<br> }<br> }<br> else<br> {<br> if( (ScreenPos.x < Left) || (ScreenPos.x > Left+Width) ||<br> (ScreenPos.y < Top) || (ScreenPos.y > Top+Height) )<br> {<br> Hide();<br> bIsHide = true;<br> }<br> }<br> }<br> 就这么简单。