1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
Public Function fuMsgBox_ChangeBtnText(sTitle As String, sMsg As String, sB1 As String, sB2 As String, sB3 As String)
'Pour personnalisé le titre, le message et les boutons
'Ici 3 boutons obligatoires. On pourrait aller plus loin en faisant un select case pour le nombre de bouton,
'Il faudrait alors ajuster le choix du type de message de base. Ici j'ai choisi vbAbortRetryIgnore parce que le but
'était d'avoir 3 boutons.
Const WH_CBT = 5
Dim Reply As Integer
'Ici on inscrit les nouveaux titres sur les boutons
BtnTitle(1) = sB1: BtnTitle(2) = sB2: BtnTitle(3) = sB3
'set up the hook
msgHook = SetWindowsHookEx(WH_CBT, AddressOf MsgBoxTitleBtnProc, hInstance, GetCurrentThreadId())
'call function
Reply = MsgBox(sMsg, vbAbortRetryIgnore + vbQuestion, sTitle)
'free the hook
UnhookWindowsHookEx msgHook
'Selon le bouton choisi si on veut autre chose que les constantes Windows
'On pourrait passer la réponse dans la fonction pour avoir autre chose que le titre des boutons.
Select Case Reply
Case vbAbort
fuMsgBox_ChangeBtnText = sB1
Case vbRetry
fuMsgBox_ChangeBtnText = sB2
Case vbIgnore
fuMsgBox_ChangeBtnText = sB3
End Select
Erase BtnTitle
'Test pour voir que les msgbox sont de retour
MsgBox "Est-ce que les boutons sont de retour!!!", vbAbortRetryIgnore
End Function
Private Function MsgBoxTitleBtnProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const HCBT_ACTIVATE = 5
Const GW_CHILD = 5
Const GW_HWNDNEXT = 2
If nCode < 0 Then
MsgBoxTitleBtnProc = CallNextHookEx(msgHook, nCode, wParam, lParam)
Exit Function
End If
If nCode = HCBT_ACTIVATE Then
Dim hWndChild As Long, hWndChildNext As Long
'premier bouton: Abort button
hWndChild = GetWindow(wParam, GW_CHILD)
'changer pour sB1
Call SetWindowText(hWndChild, BtnTitle(1))
'deuxième bouton: Retry button
hWndChildNext = GetWindow(hWndChild, GW_HWNDNEXT)
hWndChild = hWndChildNext
'changer pour sB2
Call SetWindowText(hWndChild, BtnTitle(2))
'Troisième bouton: Ignore
hWndChildNext = GetWindow(hWndChild, GW_HWNDNEXT)
hWndChild = hWndChildNext
'changer pour sB3
Call SetWindowText(hWndChild, BtnTitle(3))
End If
' processing...
MsgBoxTitleBtnProc = False
End Function |
Partager