例如一个有“确定”“取消”按钮的msgbox,想改为其他的,
有没有办法实现

解决方案 »

  1.   

    查查bottom参数的常数表  如果没有你想要的就自己写一个form 封装一下就好了
      

  2.   

    标准做法是利用CBTHOOK。简单代码如下标准模块:Option Explicit
    Private Const WH_CBT                     As Long = 5
    Private Const HCBT_ACTIVATE              As Long = 5             'HCBT_ACTIVATE时wParam是将被激活的窗口的句柄
    Private Const HCBT_CREATEWND            As Long = 3
    Private Const HCBT_DESTROYWND           As Long = 4Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
    Private Declare Function GetActiveWindow Lib "user32" () As Long
    Private 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
    Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
    Private Declare Function SetDlgItemText Lib "user32" Alias "SetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String) As Long
    Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Hook                    As LongPublic Function Msgbox(Prompt As Variant, Optional Button As VbMsgBoxStyle, Optional Title As String) As VbMsgBoxResult
        Hook = SetWindowsHookEx(WH_CBT, AddressOf HookProc, App.hInstance, App.ThreadID)
        Msgbox = MessageBox(GetActiveWindow, Prompt, Title, Button)
    End FunctionPrivate Function HookProc(ByVal Code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If Code = HCBT_ACTIVATE Then                'HCBT_ACTIVATE时wParam是将被激活的窗口的句柄
            Static Index    As Long
            If Index = 0 Then
                SetDlgItemText wParam, vbOK, ByVal "请点击"                '设定按钮的文字
                SetDlgItemText wParam, vbCancel, ByVal "放弃操作"
                Index = 1
            End If
        ElseIf Code = HCBT_DESTROYWND Then
            UnhookWindowsHookEx Hook                                                        '不要再Hook,以免带来不必要的麻烦
        End If
        CallNextHookEx Hook, Code, wParam, lParam
        HookProc = 0
    End Function充分利用SetDlgItemText 你可以改变其他按钮的文字。
      

  3.   

    http://download.csdn.net/source/3398756