2017-02-02 4 views
1

Ich habe zwei kleine Fragen bei Visual Studio MFC-GUI Programmiertechnik in Bezug auf die Handhabung einer Gruppe von Radio-Buttons in VS2015 CE.MFC Radio Button Group Nachrichtenhandler

Ich habe eine kleine Dialoganwendung. Diese Anwendung zeichnet einige Zeilen in meinem Dialog mit einem bestimmten Stift. Jetzt habe ich eine Gruppe von Radio-Buttons gemacht, um verschiedene Farben für den Stift verwenden zu können. Also habe ich ein Gruppenfeld erstellt, die Optionsschaltflächen in dieses Gruppenfeld eingefügt, die Gruppeneigenschaft des ersten Optionsfelds aktiviert und die Tabulatorfolge überprüft, so dass alle Optionsfelder ordnungsgemäß aufeinander abgestimmt sind.

Das ist ok - Testen der GUI Ich kann nur einen der Optionsschalter wie geplant auswählen, weil ich nicht in der Lage wäre, eine Linie in verschiedenen Farben gleichzeitig zu zeichnen. Jetzt habe ich einen Handler für die BN_CLICKED-Nachricht des ersten Radio-Button-Objekts im Klassen-Assistenten hinzugefügt, um die Auswahl an verschiedenen farbigen Stiften hinzuzufügen.

Jetzt kommt der interessante Teil. Dieser Handler wird nur ausgeführt, wenn ich auf das erste Optionsfeld klicke. Der mit der Gruppeneigenschaft ist aktiviert. Ich dachte, es sollte ausgeführt werden, wenn ich auf einen der Radioknöpfe in dieser Gruppe klicke. Als nächstes versuchte ich, einen BN_CLICKED-Message-Handler zu all diesen Optionsfeldern hinzuzufügen, aber der ClassWizard zeigt die BN_CLICKED-Message für die anderen Optionsfelder nicht an - nur für die mit Group-Anteil aktiviert.

Nachdem ich gegoogelt habe, habe ich gelesen, dass man einen BN_CLICKED-Message-Handler für einen Button hinzufügen könnte, indem man ihn im Dialog doppelt anklickt. Also habe ich alle meine Radio-Buttons doppelt angeklickt und einen Aufruf des BN_CLICKED-Message-Handlers des ersten Radiobuttons hinzugefügt. Das funktioniert als Workaround, so dass jetzt meine Linie in den verschiedenen Farben gezeichnet wird, wenn ich auf einen dieser Radioknöpfe klicke (schwarz, blau, rot, usw.).

Ich habe zwei Fragen - ist dieses Verhalten beabsichtigt? Ich nehme an, der Grund, warum ich nur einen BN_CLICKED-Message-Handler im Klassenassistenten für den ersten Radiobutton hinzufügen kann, ist, dass er von einem Radioknopf in meiner Gruppe aufgerufen würde, oder? Eine andere Frage ist, ich hätte es vorgezogen, den Handler einmal zu schreiben und in der Lage zu sein, dem Klassenassistenten zu sagen, diesen speziellen Handler zu verwenden, anstatt einen eindeutigen Handler für jeden der Knöpfe zu erzeugen. Das ist unabhängig von diesen Optionsfeldern. Ich habe das mit einer einfachen Anwendung getestet, die aus einer Zusammenstellung von mehreren Schaltflächen besteht, die ihre eigenen BN_CLICKED-Messagehandler durch den Klassenassistenten anhängen können. Wenn ich den automatisch generierten Funktionsnamen nicht vom Assistenten akzeptiere und den Namen meiner eigenen Handler-Funktion eintrage, sagt er einfach, dass er ihn nicht überschreiben könnte. Wie kann ich einen vorhandenen Handler für eine Objektnachricht im Klassenassistenten auswählen oder ist das nicht möglich und muss ich dies manuell in Code für mich tun?

Hoffnung gibt es eine VS2015 MFC Guy gibt der Lage sein, mir zu sagen ..

+0

Fügen Sie einfach die Handler von Hand, es funktioniert gut. –

+0

Zwischen Visual Studio 6 und Visual Studio 2010 hatten wir keinen MFC-Klassenassistenten. Es ist eine Bequemlichkeit, und Sie müssen bereit sein, MFC-Code ohne es zu schreiben. Jeff Prosise '[Windows mit MFC programmieren, zweite Ausgabe] (https://www.amazon.com/dp/1572316950) wird empfohlen zu lesen. Es erklärt, was hinter all diesen Makros und automatisch generiertem Code steckt. – IInspectable

Antwort

2

Dies ist in der Tat von Entwurf. Sie könnten für jeden Tastenklick ein anderes Verhalten gewollt haben - wenn Sie das nicht tun, verbinden Sie nicht einfach alle BN_CLICKED mit demselben Botschaftshandler und löschen Sie diejenigen, die automatisch generiert wurden. Sie können auch ON_CONTROL_RANGE (BN_CLICKED, id1, id2, memberFxn) verwenden - stellen Sie sicher, dass Ihre Schaltflächen im selben Bereich in Ihrer Ressource sind. H Hoffe, dass hilft!

+0

Danke.Schade, dass dies nicht mit einer eingebauten Funktion des Klassenassistenten gelöst werden konnte. Aber das ON_CONTROL_RANGE Makro, das du erwähnt hast, ist definitiv einen Blick wert. Obwohl die Definition der Kontroll-IDs ein wenig schwierig zu sein scheint. Ich lese gerade ein paar Beispiele und die Definition bei MSDN. Ich werde es versuchen. – Wciibb