注册 登录
编程论坛 VB6论坛

新手求教!关于VB窗体停靠的问题

肇励影 发布于 2016-11-08 21:43, 1117 次点击
我想做一个具有类似于QQ的窗体停靠的软件,怎么写窗体停靠这部分的代码?希望大神们能帮助一下,谢谢了!
5 回复
#2
yangfrancis2016-11-08 22:32
用api函数GetCursorPos获取鼠标当前的屏幕坐标,再根据得到的坐标位置确定是否将窗体移到屏幕区域外或移回屏幕区域。也可设置visible属性来实现
#3
风吹过b2016-11-08 22:57
这种窗体是一般为无标题栏,在移动窗体的过程中,判断 窗体 上左右与 屏幕边框的距离。屏幕使用对象 screen 。
如果有标题栏,那就只能 Hook 自己消息,检索移动结束的消息。
简单一点的办法,就是把判断放到定时器里执行。
#4
xiangyue05102016-11-09 11:36
估计楼主想要实现一个类似于WINDOWS任务栏自动隐藏的效果,之前编写过一个,但是现在没有完整的代码。
只能提供几个关键词:窗口悬浮置顶、自动隐藏
窗口悬浮置顶需要用下面的函数
程序代码:

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Const KEYEVENTF_KEYUP = &H2
Const VK_LWIN = &H5B
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Declare Sub SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

程序代码:

Private Sub Form_Activate()
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub
Private Sub Timer1_Timer()  'interval = 1
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub

自动隐藏/显示这个,需要通过获取鼠标位置,根据窗口状态和位置的关系修改窗口尺寸之类就可以
程序代码:

Private Type POINT_TYPE
X As Long
Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32.dll" (xyPoint As POINT_TYPE) As Long
#5
肇励影2016-11-09 15:58
回复 2楼 yangfrancis
大神,有源码吗?我是新手,还不太懂怎么写。
#6
yangfrancis2016-11-10 21:32
回复 5楼 肇励影
没有呢。
1