珠海惠景慧园价格:vb !!! 请教 问题谢谢

来源:百度文库 编辑:高校问答 时间:2024/04/28 03:13:39
如何实现 对MSGBOX 的弹出 实现位置的确定 ??!!!

'窗体代码
Private Sub Command1_Click()
Hx = msg("当前位置", 4 + 32, "!", 10, 100)
End Sub
'模块代码

Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long
Public Declare Function UnHookWindowsHookEx Lib "user32" Alias "UnhookWindowsHookEx" (ByVal hHook As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function 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) As Long
Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Public Const GWL_HINSTANCE = (-6)
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Public Const SWP_NOACTIVATE = &H10
Public Const HCBT_ACTIVATE = 5
Public Const WH_CBT = 5

Public hHook As Long
Public MsgBoxPosX As Integer
Public MsgBoxPosY As Integer

Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Function WinProc(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If lMsg = HCBT_ACTIVATE Then
SetWindowPos wParam, 0, MsgBoxPosX, MsgBoxPosY, 0, 0, SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE
UnHookWindowsHookEx hHook
'Declare Function UnHookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
'
'函数说明: 本函数是解除Hook之用。hHook是Hook函数的控制码。
'
End If
WinProc = False
End Function

Function msg(msgText As String, msgButton As Long, msgTitel As String, xPos As Long, yPos As Long)
Dim hInst As Long
Dim XLInst As Long
Dim Thread As Long

MsgBoxPosX = xPos
MsgBoxPosY = yPos

XLInst = FindWindow("xlmain", vbNullString) '取得Excel Hwnd
hInst = GetWindowLong(XLInst, GWL_HINSTANCE) '从指定视窗的架构中取得资讯:拥有视窗的实例的句柄
Thread = GetCurrentThreadId() '获取目前执行绪之识别代码(ID)
hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc, hInst, Thread)
'WH_CBT Hook:系统在激活,创建,消毁,最小化,最大化,移动,改变窗体前;在完成一条系统命令前;_
' 在从系统消息队列中移去鼠标或键盘事件前;在设置输入焦点前,或同步系统消息队列前,将调用WH_CBT
'Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
'
'函数说明:本函数是用於启动Hook设置。
'
'idHook是Hook的类型,即处理的消息类型。
'
'Lpfn是Hook子程(函数或过程)的位址指针。如果dwThreadId参数为0或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的Hook子程。除此以外,lpfn可以指向当前进程的一段Hook子程代码(我们利用的就是这个性质)。
'
'hMod是应用程式实例的控制码,标识包含lpfn所指的子程的DLL。如果dwThreadId 标识当前进程创建的一个线程,而且子程代码位於当前进程,hMod必须为NULL。
'
'dwThreadId是与安装Hook子程相关联的线程的识别字,如果为0,Hook子程与所有的线程关联。 返回值:函数成功则返回Hook子程的控制码,失败
MsgBox msgText, msgButton, msgTitel, 0, 0
End Function

MsgBox(消息, 按纽风格默认为只有一个确认按纽,标题,帮助连接, [Context]) 返回按健状态。
没有定位参数

用API能实现吧

还不如自己画一个新窗体呢!