Variable Funktionen

CodeFatal

Erfahrenes Mitglied
Moin moin,

ich hab da mal wieder ne komplizierte Idee und bräuchte nen paar Tipps von euch:-)

Ich habe ein Dialogfeld basierendes MFC Projekt.
Im Header einer Dialog-Klasse findet sich unteranderem folgendes:
Code:
#define ANZ_EDIT 5

class Dlg:: public CDialog{
...
public:
   CEdit m_Edit[ANZ_EDIT];
  CAndereKlasse ElementausKlasse;
...
}´;

In der CPP greife ich dann in den Funktionen DoDataExchange, OnCreate, etc über Schleifen auf ANZ_EDIT viele Elemente zu.
Zur Laufzeit kann ich die dann auch entspechend handhaben und nach gut dünken verändern.

Soweit so gut. Jetzt aber mal zu meinem Problem.
Da ich eine Variable Anzahl an Elementen habe, möchte ich jetzt eigentlich keine feste Anzahl an AFX-Funktionen haben. Ich hab mal irgendwann was von Funktions-Pointern aufgeschnappt und soweit ich aus verschiedenen Quellen herraus gelesen hab, ist das auch ein Weg zur Lösung. Wie bekomm ich aber herraus, welches Element geklickt oder geändert wurde und wie kann ich dann den Funktionsnamen zur Laufzeit zusammen basteln.
Im Endeffekt sollen alle Funktionen folgendes machen:
Code:
void dlg::FunktionXXX(){
    ElementausKlasse->tuwas(...);
}
Der tuwas Funktion soll dann alles übergeben werden, was man brauch um das geklickte Element zu identifizieren.

Hoffe ihr habt das Problem in ansätzen verstanden.

Danke schon mal für eure Hilfe
Gruss Michael
 
CodeFatal hat gesagt.:
Da ich eine Variable Anzahl an Elementen habe, möchte ich jetzt eigentlich keine feste Anzahl an AFX-Funktionen haben.
Was hat das eine mit dem anderen zu tun?
Was willst Du überhaupt machen?
Wofür steht das tuwas?

Funktionspointer sind definitiv möglich, aber werden soooo selten - wenn überhaupt dann meistens beim Starten von Threads - benutzt, dass Du Dein Problem bestimmt auch mit normaler Objekt-Orientierung hinbekommst.

Mir ist Dein Problem bisher überhaupt nicht klar.
 
moin


Ich verstehe auch nciht was du möchtest.
In der CPP greife ich dann in den Funktionen DoDataExchange, OnCreate, etc über Schleifen auf ANZ_EDIT viele Elemente zu.
Du bekommst ja für jedes ein Handle, dann erstellst du dir einfach ein Array von Handles und weisst jedem Element dieses Arrays ein Element zu.

Ansonsten versuch deine Frage nochmal anders zu formulieren.


mfg
umbrasaxum
 
Abend zusammen...
Hmm... versuch es mal anders.
Wenn ich in meinem Dialog eine Variable Anzahl an CEdit-Contorls habe, dann möchte ich auch für jedes CEdit Element eine OnChange Methode haben. In jeder der Funktion soll meintwegen ne andere Funktion gerufen werden, der ein Wert übergeben wird, der das geänderte CEdit-Element übergeben wird. Wenn dies in einem Array angelegt ist, dann z.B. die Nummer innerhalb des Arrays.
Hoffe das ist so etwas verständlicher.

Gruss Michael
 
Das geht nicht. Die Messagemaps von MFC sind getrickste Structures die durch die Makros DDX_EXCHANGE usw. gefüllt werden. Struct-Arrays zur Laufzeit ändern geht nicht.

Du musst bei sowas manuelle die EN_CHANGE-Nachricht abfangen (am besten WindowProc überladen) und dann dort je nach Handle die passende Routine aufrufen. Wobei ich mich dabei frage, ob da für jedes Edit eine eigene Routine Sinn macht oder das generell mit einer Funktion abgefackelt werden könnte/sollte/hätte?
 
Endurion hat gesagt.:
Wobei ich mich dabei frage, ob da für jedes Edit eine eigene Routine Sinn macht oder das generell mit einer Funktion abgefackelt werden könnte/sollte/hätte?

Da geb ich ihm Recht.
Allerdings kenne ich normalerweise Funktionen wie Object* getSender() die beim Aufruf einer gemeinsamen onChange() Methode das direkte Objekt ermitteln können.
Wenn Du nun für jedes Objekt eine spezielle Membervariable mit einem ENUM oder so füllst, könntest Du in der onChange-Methode diesen Wert abfragen und danach den Aufruf einer weiteren Funktion auswählen. Ich weiss jetzt aber nicht, ob Dich das viel weiter bringt.
Besser und klüger wäre es auf jeden Fall deine Programmstruktur deutlich zu überdenken und dem normalen Verhalten einer GUI-basierten Anwendung anzupassen.
 
Hi, danke erstmal für eure Antworten.
Hab mir jetzt ne "Laaange" Msg Map erstellt. Da ich für jeden Unterschiedlichen Elementen Typ ne andere Reaktion brauch konnte man das ganze noch relativ gut Handeln auch wenn es evt nicht ganz so toll ausschaut.
Es ist für den Moment immerhin so flexibel, das ich nicht an irgendwelche Grenzen stosse:-)

Gruss Michael
 
Zurück