2009-05-04 3 views
5

Wir haben eine Legacy-Anwendung in C geschrieben, die WinAPI verwendet. Wir möchten in einigen unserer Dialogfelder die Schaltfläche "Ja zu allen" hinzufügen. Leider erlaubt die vorhandene MessageBox-Funktion keine benutzerdefinierten Schaltflächen oder Schaltflächenbeschriftungen.Wie kann ich einen "Ja zu allen" Button mit WinAPI erstellen?

Was ist der beste Weg, dies zu tun? Gibt es einen raffinierten Hack, um einfach eine benutzerdefinierte Schaltfläche hinzuzufügen? Oder sollten wir unseren eigenen MessageBox-Ersatz erstellen?

+3

Um, erstellen Sie eine Schaltfläche und geben Sie die Beschriftung "Ja zu allen"? Ich denke, Sie müssen etwas genauer sein. –

+0

MessageBox in der WinAPI ermöglicht anscheinend nicht das Erstellen eigener Schaltflächen und das Erstellen von benutzerdefinierten Beschriftungen. Das wäre das Erste gewesen, was ich versucht hätte. – Brown

+1

Sie können MessageBox() anpassen. Verwenden Sie SetWindowsHookEx(), um einen Thread-spezifischen CBT-Hook direkt vor dem Aufrufen von MessageBox() zu installieren. Wenn der Hook ausgelöst wird, haben Sie Zugriff auf das HWND des Dialogs und können alles tun, was Sie möchten (zusätzliche untergeordnete Steuerelemente hinzufügen, Steuerelemente verschieben, Text ändern usw.). –

Antwort

2

Es gibt eine andere Art von einem Meldungsfeld in WinAPI, seit Windows 2000. Es SHMessageBoxCheck ist.

Es ermöglicht Sie, ein Standard-MB_OKCANCEL/MB_YESNO/MB_OK -Typ MessageBox mit der Option angezeigt wird es nie wieder zeigen, indem Sie angeben, welche die Standardoption in diesem Fall ist.

Vielleicht ist es nicht genau das, was Sie suchen, aber es ist ziemlich konsistent mit Windows-Benutzeroberfläche.

In Vista funktionieren die meisten Dialoge "Ja zu allen" der Shell tatsächlich so - es gibt keine zusätzliche Schaltfläche mit der Aufschrift "Ja/Nein zu allen" - stattdessen wird die Checkbox "Gewählte Aktion für alle Objekte ausführen" aktiviert.

jedoch der Hinweis in der Dokumentation macht mir Sorgen:

Diese Funktion durch Microsoft Windows XP und Windows Server verfügbar ist 2003. Es könnte in späteren Versionen von Windows geändert oder nicht verfügbar sein.

2

Sie können auch Pflege des Textumbruchs ergreifen müssen, um es zu MessageBox ähnlich zu machen. Auch MessageBox verwendet eine andere Schriftart als die Standard-GUI-Schriftart. Und vergiss nicht, den Sound zu spielen, wenn der Dialog erscheint :)