原来研究过这个东东,收藏了一些代码,分享一下,API的东东:
1oJBfwP9.rar (11.01 KB, 下载次数: 104) 2010-11-24 23:35 上传 点击文件名下载附件 如何调整MSGBOX对话框的位置? Option ExplicitPrivate Declare Function MessageBox Lib "USER32" Alias "MessageBoxA" (ByVal Hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As LongPrivate Declare Function SetDlgItemText Lib "USER32" Alias "SetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String) As LongDeclare Function UnhookWindowsHookEx Lib "USER32" (ByVal hHook As Long) As LongDeclare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As LongDeclare Function GetCurrentThreadId Lib "kernel32" () As LongDeclare Function SetWindowsHookEx Lib "USER32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As LongDeclare 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 LongConst GWL_HINSTANCE = (-6)Const SWP_NOSIZE = &H1Const SWP_NOZORDER = &H4Const SWP_NOACTIVATE = &H10Const HCBT_ACTIVATE = 5Const WH_CBT = 5Const Appname = "调查:"Dim hHook As LongDim PosLeft As Integer, PosTop As IntegerFunction WinProc1(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If lMsg = HCBT_ACTIVATE Then ' move the messagebox 'HCBT_ACTIVATE时wParam是将被激活的窗口的句柄 Dim Hwnd As Long Hwnd = wParam '设定按钮的文字  osLeft = Cells(2, 1)  osTop = Cells(2, 2) SetDlgItemText Hwnd, vbOK, ByVal "是的:确定" SetDlgItemText Hwnd, vbCancel, ByVal "不是:取消" 'SetDlgItemText hwnd, vbYes, ByVal "是[&Y]" 'SetDlgItemText hwnd, vbNo, ByVal "否[&N]" 'SetDlgItemText hwnd, vbAbort, ByVal "放弃[&A]" 'SetDlgItemText hwnd, vbIgnore, ByVal "忽略[&I]" 'SetDlgItemText hwnd, vbRetry, ByVal "重试[&R]" SetWindowPos wParam, 0, PosLeft, PosTop, 0, 0, SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE 'Unhook,以免带来不必要的麻烦 UnhookWindowsHookEx hHook End If WinProc1 = FalseEnd FunctionSub ShowIt() If MsgBox("你是VBA特长班的吗?", vbQuestion + vbOKCancel, Appname) = vbOK Then Call MsgBox("你按了(是的:确定)!", vbInformation, Appname) Else Call MsgBox("你按了(不是:取消!)", vbInformation, Appname) End IfEnd SubPublic Function MsgBox(Prompt As String, Optional Button As VbMsgBoxStyle = vbOKOnly, Optional Title As String) As VbMsgBoxResult If Len(Title) = 0 Then Title = Application.Caption hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc1, Application.Hinstance, GetCurrentThreadId()) '注意下面的第一个参数最好传递一个窗口的句柄,当然,让它作为0也可以 MsgBox = MessageBox(0, Prompt, Title, Button)End Function 跳转到最佳答案楼层
Option ExplicitPrivate Declare Function MessageBox Lib "USER32" Alias "MessageBoxA" (ByVal Hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As LongPrivate Declare Function SetDlgItemText Lib "USER32" Alias "SetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String) As LongDeclare Function UnhookWindowsHookEx Lib "USER32" (ByVal hHook As Long) As LongDeclare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As LongDeclare Function GetCurrentThreadId Lib "kernel32" () As LongDeclare Function SetWindowsHookEx Lib "USER32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As LongDeclare 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 LongConst GWL_HINSTANCE = (-6)Const SWP_NOSIZE = &H1Const SWP_NOZORDER = &H4Const SWP_NOACTIVATE = &H10Const HCBT_ACTIVATE = 5Const WH_CBT = 5Const Appname = "调查:"Dim hHook As LongDim PosLeft As Integer, PosTop As IntegerFunction WinProc1(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If lMsg = HCBT_ACTIVATE Then ' move the messagebox 'HCBT_ACTIVATE时wParam是将被激活的窗口的句柄 Dim Hwnd As Long Hwnd = wParam '设定按钮的文字  osLeft = Cells(2, 1)  osTop = Cells(2, 2) SetDlgItemText Hwnd, vbOK, ByVal "是的:确定" SetDlgItemText Hwnd, vbCancel, ByVal "不是:取消" 'SetDlgItemText hwnd, vbYes, ByVal "是[&Y]" 'SetDlgItemText hwnd, vbNo, ByVal "否[&N]" 'SetDlgItemText hwnd, vbAbort, ByVal "放弃[&A]" 'SetDlgItemText hwnd, vbIgnore, ByVal "忽略[&I]" 'SetDlgItemText hwnd, vbRetry, ByVal "重试[&R]" SetWindowPos wParam, 0, PosLeft, PosTop, 0, 0, SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE 'Unhook,以免带来不必要的麻烦 UnhookWindowsHookEx hHook End If WinProc1 = FalseEnd FunctionSub ShowIt() If MsgBox("你是VBA特长班的吗?", vbQuestion + vbOKCancel, Appname) = vbOK Then Call MsgBox("你按了(是的:确定)!", vbInformation, Appname) Else Call MsgBox("你按了(不是:取消!)", vbInformation, Appname) End IfEnd SubPublic Function MsgBox(Prompt As String, Optional Button As VbMsgBoxStyle = vbOKOnly, Optional Title As String) As VbMsgBoxResult If Len(Title) = 0 Then Title = Application.Caption hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc1, Application.Hinstance, GetCurrentThreadId()) '注意下面的第一个参数最好传递一个窗口的句柄,当然,让它作为0也可以 MsgBox = MessageBox(0, Prompt, Title, Button)End Function
使用道具 举报
觉得肯定要用到API
1oJBfwP9.rar (11.01 KB, 下载次数: 104) 2010-11-24 23:35 上传 点击文件名下载附件 如何调整MSGBOX对话框的位置? Option ExplicitPrivate Declare Function MessageBox Lib "USER32" Alias "MessageBoxA" (ByVal Hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As LongPrivate Declare Function SetDlgItemText Lib "USER32" Alias "SetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String) As LongDeclare Function UnhookWindowsHookEx Lib "USER32" (ByVal hHook As Long) As LongDeclare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As LongDeclare Function GetCurrentThreadId Lib "kernel32" () As LongDeclare Function SetWindowsHookEx Lib "USER32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As LongDeclare 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 LongConst GWL_HINSTANCE = (-6)Const SWP_NOSIZE = &H1Const SWP_NOZORDER = &H4Const SWP_NOACTIVATE = &H10Const HCBT_ACTIVATE = 5Const WH_CBT = 5Const Appname = "调查:"Dim hHook As LongDim PosLeft As Integer, PosTop As IntegerFunction WinProc1(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If lMsg = HCBT_ACTIVATE Then ' move the messagebox 'HCBT_ACTIVATE时wParam是将被激活的窗口的句柄 Dim Hwnd As Long Hwnd = wParam '设定按钮的文字  osLeft = Cells(2, 1)  osTop = Cells(2, 2) SetDlgItemText Hwnd, vbOK, ByVal "是的:确定" SetDlgItemText Hwnd, vbCancel, ByVal "不是:取消" 'SetDlgItemText hwnd, vbYes, ByVal "是[&Y]" 'SetDlgItemText hwnd, vbNo, ByVal "否[&N]" 'SetDlgItemText hwnd, vbAbort, ByVal "放弃[&A]" 'SetDlgItemText hwnd, vbIgnore, ByVal "忽略[&I]" 'SetDlgItemText hwnd, vbRetry, ByVal "重试[&R]" SetWindowPos wParam, 0, PosLeft, PosTop, 0, 0, SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE 'Unhook,以免带来不必要的麻烦 UnhookWindowsHookEx hHook End If WinProc1 = FalseEnd FunctionSub ShowIt() If MsgBox("你是VBA特长班的吗?", vbQuestion + vbOKCancel, Appname) = vbOK Then Call MsgBox("你按了(是的:确定)!", vbInformation, Appname) Else Call MsgBox("你按了(不是:取消!)", vbInformation, Appname) End IfEnd SubPublic Function MsgBox(Prompt As String, Optional Button As VbMsgBoxStyle = vbOKOnly, Optional Title As String) As VbMsgBoxResult If Len(Title) = 0 Then Title = Application.Caption hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc1, Application.Hinstance, GetCurrentThreadId()) '注意下面的第一个参数最好传递一个窗口的句柄,当然,让它作为0也可以 MsgBox = MessageBox(0, Prompt, Title, Button)End Function
那我们更难看懂了
那我们更难看懂了,请加代码注释
本版积分规则 发表回复 回帖后跳转到最后一页
小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )
GMT+8, 2024-5-16 12:58 , Processed in 0.190409 second(s), 10 queries , Gzip On, Yac On.
Powered by Discuz! X3.4
Copyright © 2001-2020, Tencent Cloud.