窗体为无模式,因窗体上布满控件,无法在Form_MouseMove事件中判断,有没有其它方法实现啊?最好不要用定时器,

解决方案 »

  1.   

        实现这样的功能其实很简单,原理是:判断鼠标是否移动到了屏幕的最左边或最右边,如果移到了则显示窗体,如果鼠标移开了窗体则隐藏。在程序中,我们将用到GetCursorPos这个API函数(是实现这个功能的最重要的一步),这个函数的作用就是获取当前鼠标的坐标值,我们可以通过这个值来判断鼠标是否移到了屏幕的最边缘。    下面我们就开始吧。    新建一窗体,将Form1更名为AutoHide,将vbBorderStyle属性设置为4-Fixed ToolWindow(这样就不能改变窗体的大小),ScaleMode属性设置为2-Point。加入一个Timer控件,将Interval的值设为1。再新建一个模块,输入如下的代码:Public Declare Function GetCursorPos Lib "user32" (lpPoint as POINTAPI) as LongType POINtAPI    x as Long    y as Longend type    该代码则是用于声明GetCursorPos这个API函数的。这个API函数可以在VB6中自带的“API浏览器”中查找到。    在AutoHide窗体中,输入如下代码:dim Mouse as POINTAPI'这句代码在声明部分中加入Private Sub Form_Load()    AutoHide.Height = Screen.Height '使窗体高度与屏幕高度相同    AutoHide.Top = 0'调整窗体的显示位置    AutoHide.Left = (0 - AutoHide.Width) + 50 '使窗体在屏幕的最左边并显示出一小部分窗体,此时为收缩状态end subPrivate Sub Timer1_Timer()    a = GetCursorPos(Mouse)    if Mouse.x = 0 then'鼠标移到了屏幕的最左边(X为屏幕的纵坐标,当纵坐标为0时表示已经移到了最左边,因此这是最关键的一步)        AutoHide.Left = 0    end if    if Mouse.x > AutoHide.ScaleWidth then'如果鼠标没有在窗体之上则隐藏窗体(注意:窗体的ScaleMode属性一定要设置为2-Point,否则达不到隐藏的效果)        AutoHide.Left = (0 - AutoHide.Width) + 50 '如果前面没有加上50,这里也不加上。    end ifend sub    好了,单击F5运行一下就可以看到我们的效果了。
      

  2.   

    to bydisplay(时光) :
        可我的窗体的大小不固定,用你的方法能实现吗?
    还有定时器延时问题,灵敏度又如何?