Migliorare la MsgBox

La funzione MsgBox del Visual Basic è semplice e completa, ma non notifica il refresh dello schermo al form sottostante perché non tiene conto da quale form è stata richiamata, causando un risultato sgradevole, infatti spostando la finestra generata dalla funzione MsgBox, l'evento Paint del form da cui è stata chiamata non si attiva ed ogni disegno generato a runtime viene semplicemente cancellato (se la proprietà
Autoredraw è impostata su False). Utilizzando la funzione MessageBox delle API, che accetta tutti i parametri di MsgBox con in più l'handle del form dove viene richiamata, si può rimediare a questo sgradevole effetto.

Const MB_DEFBUTTON1 = &H0&
Const MB_DEFBUTTON2 = &H100&
Const MB_DEFBUTTON3 = &H200&
Const MB_ICONASTERISK = &H40&
Const MB_ICONEXCLAMATION = &H30&
Const MB_ICONHAND = &H10&
Const MB_ICONINFORMATION = MB_ICONASTERISK
Const MB_ICONQUESTION = &H20&
Const MB_ICONSTOP = MB_ICONHAND
Const MB_OK = &H0&
Const MB_OKCANCEL = &H1&
Const MB_YESNO = &H4&
Const MB_YESNOCANCEL = &H3&
Const MB_ABORTRETRYIGNORE = &H2&
Const MB_RETRYCANCEL = &H5&
Private 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 Sub Form_Load()
Dim ret As Long
ret = MessageBox (form.hwnd, messaggio, titolo, flags)
End Sub

Testato su: Windows 98, Windows Me, xxxxxxxxxx