vb !!! 请教 问题谢谢 5

如何实现对MSGBOX的弹出实现位置的确定??!!!... 如何实现 对MSGBOX 的弹出 实现位置的确定 ??!!! 展开
 我来答
lihs815
2006-02-16
知道答主
回答量:65
采纳率:0%
帮助的人:20.1万
展开全部
'窗体代码
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
百度网友e72012dab
2006-02-16 · TA获得超过407个赞
知道小有建树答主
回答量:492
采纳率:0%
帮助的人:527万
展开全部
MsgBox(消息, 按纽风格默认为只有一个确认按纽,标题,帮助连接, [Context]) 返回按健状态。
没有定位参数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2006-02-16
展开全部
用API能实现吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友31bb0ea1d
2006-02-16 · TA获得超过119个赞
知道答主
回答量:327
采纳率:0%
帮助的人:0
展开全部
还不如自己画一个新窗体呢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式