Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Array aus Buttons

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.11.2002, 18:08 Uhr
~Alois
Gast


Ich habe versucht einen Array aus Buttons zu machen, indem ich das hier in die Dialogklasse eingefügt habe:

CButton Button[20] (in die *.h)

DDX_Control(pDX, IDC_Button_0, Button[0]) (in die DoDataExchange)
DDX_Control(pDX, IDC_Button_1, Button[1])
...

Wenn ich nun dem Dialog eine neue Ereignisroutine hinzufügen will, kommt die Fehlermeldung: Parser-Fehler: ";" erwartet. Eingabezeile: "CButton Button[20];
Das kann man beheben, in dem zuerst die Ereignisroutine hinzufügt und dann DoDataExchange verändert.

Aber genau dasselbe passiert, wenn ich einem der Buttons eine Routine zuordnen will. Es muss doch einen sauberen Weg geben, ein Steuerelementefeld zu erstellen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.11.2002, 11:38 Uhr
Volle



Hallo Alois,

ein "Steuerlementfeld", so wie es versuchst, geht nicht. Das hast du ja selbst schon festgestellt.

Bleibt die Frage, warum du darauf hinaus willst. D.h., vielleicht gibt es ja noch einen anderen Weg, das zu erreichen, was du willst. Bzw., warum willst du von der gängigen Methode Buttons zu definieren abweichen?

Gruß, Volle.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.11.2002, 13:49 Uhr
~Alois
Gast


Ich habe 20 Buttons, die alle eine Sound-Datei abspielen sollen. Welche Datei, steht in einem Array, z.B.: CString Sound[20];
Da ich das Programmieren in VB gewöhnt bin dachte ich ich könnte ein Steuerelementenfeld aus 20 Buttons machen, dann eine Prozedur dazu die mir den Index des gedrückten Button angibt, und diesen Index auch als Index in den Sound-Array benutzen (Wie halt in VB). Dann wären das nur einige Zeilen. Ohne Steuerelementenfeld müsste ich jedoch für jeden der 20 Buttons eine eigene Prozedur schreiben. Gibt es da eine einfachere Lösung?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.11.2002, 14:19 Uhr
Volle



Hallo Alois,

wenn du nicht unbedingt bei den 20 Pushbuttons bleiben musst, dann könnte ich mir das schon auch noch anders vorstellen...
Soll das so eine Art MediaPlayer werden? Dann könntest du deine Sounddateien ja auch in einer Listbox visualisieren und nur mit einem Button (Play) arbeiten. Bei jedem Drücken prüfst du, welche Datei aktuell in der Listbox ausgewählt ist. Die Nummer/ Dateinamen übergibst du dann an eine Abspielprozedur.

Aber vielleicht hat noch jemand ein bessere Idee.

Grüße, Volle.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.11.2002, 14:54 Uhr
~Alois
Gast


Danke, das mit der ListBox wäre eine gute Idee, ich habe mir aber noch was überlegt:
Wenn ich sowas in einem API-Projekt realisieren wollte, würde ich auf die Message WM_COMMAND warten, dann die ID mit den 20 Button-IDs vergleichen und dann hätte ich ja meinen Index auf den Button. Wenn ich dem Fenster jetzt neue Ereignisroutinen hinzufügen will, habe ich ne riesen Liste an Messages zur Auswahl, aber nicht WM_COMMAND. Wie kann ich auf diese Message reagieren?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.11.2002, 15:59 Uhr
Volle



Hallo Alois,

den Vergleich kannst du dir bei der MFC sparen. Jeder Button ruft seine eigene Behandlungsroutine auf (OnMyButton).

Am einfachsten bekommst du die in deinen Code, wenn du im Resourceneditor einen Doppelklick auf deinen Button machst. Dann fragt er dich, ob du die Behandlungsroutine einfügen willst.
Ansonsten kannst du das auch im Klassenassistent machen.

Bei einer Listbox könntest du in deiner Behandlungsroutine für deinen Button, die beispielsweise OnPlay heissen könnte, mit GetFirstSelectedPosition und GetNextSelectedItem den entsprechenden Eintrag aus der Box holen und abspielen.

Grüße, Volle.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.11.2002, 16:13 Uhr
Tommix




Zitat:
~Alois postete
... aber nicht WM_COMMAND. Wie kann ich auf diese Message reagieren?


Rechte Maustaste in der Klassenansicht auf den Klassennamen, dann "Virtuelle Funktion hinzufügen" und dort dann OnCommand auswählen.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.11.2002, 16:32 Uhr
~Alois
Gast


Es funkioniert, und zwar so:
- Ich habe einen Array int IDs[20], in dem ich alle IDs speichere
- In der OnCommand-Prozedur wird lParam mit den IDs verglichen und liefert mir so den ButtonIndex

Danke für eure Hilfe!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: