Afficher une alerte avec des titres de bouton personnalisés sous Windows?

À l’aide de CoreFoundation, je peux afficher une boîte de dialog d’alerte contenant les éléments suivants:

CFUserNotificationDisplayAlert(0.0, kCFUserNotificationPlainAlertLevel, NULL, NULL, NULL, CFSTR("Alert title"), CFSTR("Yes?), CFSTR("Affirmative"), CFSTR("Nah"), NULL, NULL); 

Comment est-ce que je réplique ceci en utilisant l’API Windows C? Le plus proche que j’ai eu est:

 MessageBox(NULL, "Yes?", "Alert title", MB_OKCANCEL); 

mais que les codes “OK” et “Annuler” sont codés en dur, ce qui n’est pas ce que je veux. Existe-t-il un moyen de contourner ce problème ou d’utiliser une autre fonction?

Vous pouvez utiliser SetWindowText pour modifier la légende des boutons. Parce que MessageBox () bloque le stream d’exécution, vous avez besoin d’un mécanisme pour résoudre ce problème – le code ci-dessous utilise un minuteur.

Je pense que le code FindWindow peut dépendre de l’absence de parent pour MessageBox (), mais je ne suis pas sûr.

 int CustomMessageBox(HWND hwnd, const char * szText, const char * szCaption, int nButtons) { SetTimer( NULL, 123, 0, TimerProc ); return MessageBox( hwnd, szText, szCaption, nButtons ); } VOID CALLBACK TimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ) { KillTimer( hwnd, idEvent ); HWND hwndAlert; hwndAlert = FindWindow( NULL, "Alert title" ); HWND hwndButton; hwndButton = GetWindow( hwndAlert, GW_CHILD ); do { char szBuffer[512]; GetWindowText( hwndButton, szBuffer, sizeof szBuffer ); if ( strcmp( szBuffer, "OK" ) == 0 ) { SetWindowText( hwndButton, "Affirmative" ); } else if ( strcmp( szBuffer, "Cancel" ) == 0 ) { SetWindowText( hwndButton, "Hah" ); } } while ( (hwndButton = GetWindow( hwndButton, GW_HWNDNEXT )) != NULL ); } 

La fonction Windows MessageBox ne prend en charge qu’un nombre limité de styles. Si vous voulez quelque chose de plus compliqué que ce qui est fourni, vous devrez créer votre propre boîte de dialog. Voir MessageBox pour une liste des types possibles de MessageBox.

Si vous décidez de créer votre propre boîte de dialog, nous vous conseillons d’examiner la fonction Windows de DialogBox .

Si vous souhaitez vous connecter à Windows Vista et versions ultérieures , vous pouvez envisager la fonction ” TaskDialog “. Je crois que cela vous permettra de faire ce que vous voulez.