急!小妹请教关于自定义msgbox弹出位置的疑问?!
小妹找了段可以自定义msgbox弹出位置的代码,但点击弹出的msgbox按钮无返回值,不知道为什么,请教大家!小女子谢过先~
請您參考:
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
Sub Aufruf_MsgBox()
Dummy = msg("目前位置:-)", 4 + 32, ":-!", 10, 100)
End Sub
问题点数:0、回复次数:11Top
1 楼twofish(toofoo)回复于 2006-07-03 12:44:56 得分 0
急啊,拜托大家了Top
2 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 12:52:44 得分 0
我不会,,,不过小妹挺可爱的!帮顶!Top
3 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 12:55:23 得分 0
要什么返回值啊?
Sub Aufruf_MsgBox()
Dummy = msg("目前位置:-)", 4 + 32, ":-!", 10, 100)
End Sub
Dummy的返回值?
要返回值没问题,主要是你要返回值做什么?希望返回点什么。。
在msg函数里最后加上一句“msg=返回值”,比如:
…………
MsgBox msgText, msgButton, msgTitel, 0, 0
msg = 1
End Function
就可以了Top
4 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 12:57:07 得分 0
我没理解错的话,你要这个,在msg函数最后一段这么改也成。
msg = MsgBox(msgText, msgButton, msgTitel, 0, 0)Top
5 楼twofish(toofoo)回复于 2006-07-03 13:06:57 得分 0
先谢过上面诸位的大哥,
也许是我没说清楚,我要的是Dummy 的值,就是说例如设Dummy = msg("目前位置:-)", vbOkCancel, ":-!", 10, 100),就应该要得到点击vbok时的返回值1,点击vbcancel时的返回值2。但现在不管设哪种msgbutton组合,得到的返回值都为0。Top
6 楼twofish(toofoo)回复于 2006-07-03 13:13:44 得分 0
一定不能沉阿~Top
7 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 13:33:55 得分 0
我用你程序运行的,确定返回7,取消返回6。
在msg函数最后一段这么改:
msg = MsgBox(msgText, msgButton, msgTitel, 0, 0)
你再试试。
辛苦回答半天,小妹居然没给分啊!!狂汗Top
8 楼aspower_(敬个礼 握个手 大家都素好朋友!)回复于 2006-07-03 14:03:18 得分 0
他一分没有给
怎么给你分阿
呵呵Top
9 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 14:07:00 得分 0
楼上的
发扬风格方面多提提,重色轻友一定要少提!Top
10 楼aspower_(敬个礼 握个手 大家都素好朋友!)回复于 2006-07-03 14:11:32 得分 0
不明白
我怎么重色轻友了?Top
11 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 15:59:09 得分 0
无语。。。。
我再说自己。。。。。
昨晚熬一宿,今天坚持到现在,不行了,睡觉了,1点准时起床!Top




