如何实现气泡式提示(不是mousemove)?

PowerDesigner 2006-04-29 09:16:12
思路是用户操作错误时给出提示(例如密码错误),如果用传统的messagebox效果不是很好,现网上很多都是tooltips_class32的mousemove的例程,有没有不用mousemove?请大家帮帮忙,谢谢了!
...全文
282 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
PowerDesigner 2006-05-08
  • 打赏
  • 举报
回复
首先谢谢楼主!我要的不是这个,我是想弹出一个气泡式提示,提示用户输入错误,就像在XP登录窗口,输入密码时按下大写键就会弹开气泡提示,不需要用户干预
liuyuesoft 2006-05-05
  • 打赏
  • 举报
回复
看看这段可以吗?

Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

'mdlTray.bas
'NOTIFYICONDATA.dwState
Public Const NIS_HIDDEN = &H1 ' 隐藏图标
Public Const NIS_SHAREDICON = &H2 ' 共享图标

'NOTIFYICONDATA.uFlags
Public Const NIF_ICON As Long = &H2
Public Const NIF_INFO As Long = &H10
Public Const NIF_MESSAGE As Long = &H1
Public Const NIF_STATE As Long = &H8
Public Const NIF_TIP As Long = &H4

'Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
'dwMessage
Public Const NIM_ADD As Long = &H0
Public Const NIM_MODIFY As Long = &H1
Public Const NIM_DELETE As Long = &H2
Public Const NIM_SETFOCUS As Long = &H3
Public Const NIM_SETVERSION As Long = &H4
'End Function

'Function WindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'msg
Public Const WM_RBUTTONUP = &H205 '单击右键
Public Const WM_RBUTTONDBLCLK = &H206 '双击右键
Public Const WM_USER = &H400 '?
Public Const WM_NOTIFYICON = WM_USER + 1 '自定义消息
Public Const WM_LBUTTONDBLCLK = &H203 '双击左键
Public Const WM_LBUTTONUP = &H202 '单击左键
'关于气球提示的自定义消息, 2000下不产生这些消息
Public Const NIN_BALLOONSHOW = (WM_USER + &H2) ' 当 Balloon Tips 弹出时执行
Public Const NIN_BALLOONHIDE = (WM_USER + &H3) ' 当 Balloon Tips 消失时执行(如 SysTrayIcon 被删除),
' 但指定的 TimeOut 时间到或鼠标点击 Balloon Tips 后的消失不发送此消息
Public Const NIN_BALLOONTIMEOUT = (WM_USER + &H4) ' 当 Balloon Tips 的 TimeOut 时间到时执行
Public Const NIN_BALLOONUSERCLICK = (WM_USER + &H5) ' 当鼠标点击 Balloon Tips 时执行。
' 注意:在XP下执行时 Balloon Tips 上有个关闭按钮,
' 如果鼠标点在按钮上将接收到 NIN_BALLOONTIMEOUT 消息。
'End Function

Public Type NOTIFYICONDATA
cbSize As Long ' 结构大小(字节)
hwnd As Long ' 处理消息的窗口的句柄
uId As Long ' 唯一的标识符
uFlags As Long ' Flags
uCallBackMessage As Long ' 处理消息的窗口接收的消息
hIcon As Long ' 托盘图标句柄
szTip As String * 128 ' Tooltip 提示文本
dwState As Long ' 托盘图标状态
dwStateMask As Long ' 状态掩码
szInfo As String * 256 ' 气球提示文本
uTimeoutOrVersion As Long ' 气球提示消失时间或版本
' uTimeout - 气球提示消失时间(单位:ms, 10000 -- 30000)
' uVersion - 版本(0 for V4, 3 for V5)
szInfoTitle As String * 64 ' 气球提示标题
dwInfoFlags As Long ' 气球提示图标
End Type

Public Function WindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
' 拦截 WM_NOTIFYICON 消息
If msg = WM_NOTIFYICON Then
Select Case lParam
Case WM_RBUTTONUP
' 右键单击图标是运行这里的代码, 可以在这里添加弹出右键菜单的代码
Case WM_LBUTTONDBLCLK
'left dbl click
Case NIN_BALLOONSHOW
'Debug.Print "显示气球提示"
Case NIN_BALLOONHIDE
'Debug.Print "删除托盘图标"
Case NIN_BALLOONTIMEOUT
'Debug.Print "气球提示消失"
Case NIN_BALLOONUSERCLICK
'Debug.Print "单击气球提示"
End Select
End If
WindowProc = CallWindowProc(preWndProc, hwnd, msg, wParam, lParam)
End Function

Public Sub AddIcon(ByRef IconData As NOTIFYICONDATA)
' 向托盘区添加图标
Shell_NotifyIcon NIM_ADD, IconData
preWndProc = SetWindowLong(IconData.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Public Sub DelIcon(ByRef IconData As NOTIFYICONDATA)
' 删除托盘区图标
Shell_NotifyIcon NIM_DELETE, IconData
SetWindowLong IconData.hwnd, GWL_WNDPROC, preWndProc
End Sub

Public Sub ResetIcon(ByRef IconData As NOTIFYICONDATA)
' 向托盘区修改图标
Shell_NotifyIcon NIM_MODIFY, IconData
preWndProc = SetWindowLong(IconData.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
zxczxczxc 2006-04-30
  • 打赏
  • 举报
回复
自定义一个用户控件,在上面画要显示的气泡样式,设置显示的timer,然后设定结束的时间,跟踪鼠标位置或者设置你要的任意位置,然后提示的时候显示这个控件就可以了
PowerDesigner 2006-04-30
  • 打赏
  • 举报
回复
我的意思是不用这种方法,使用标准的win32的api调用,可以吗?
PowerDesigner 2006-04-30
  • 打赏
  • 举报
回复
有没有标准的API调用?

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧