ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
1548
1548
EMPFEHLEN
-
14.06.04 17:04 #1
- Registriert seit
- May 2004
- Beiträge
- 7
hi zusammen! ich probier da nu wirklich ne Woche drann rum und stricke das Programm dauernd um, in der Hoffnung mein Problem umgehen zu können... (und ja, ich habe meinen Namen alle Ehre gemacht *g*)
Ich arbeite unter WinXP MVStudio 6. Seit neuestem mit der MFC.
Problem:
Ich lass über ein Menübefehl ein Dialog anzeigen:
ChildView.cpp
Cdaten dlg;
dlg.DoModal();
und habe über den Klassenassistenten eine neue allgemeine Klasse angelegt. (also eine extra cpp und h datei). Die Headerdatei hab ich in Cdaten.cpp inkludiert.
Nun sollen Funktionen dieser Klasse auf Dialogelemente (Textfeld,button etc.) zugreifen und verändern können (gerne auch auf Funktionen in dieser Dialogklasse - aber das müsste ja der selbe Weg des ansprechens sein)
Ist bestimmt banal, aber mein schickes bhv-taschenbuch weigert sich standhaft mir die Lösung zu verraten
-
Ähm, soll Cdaten von CDialog abgeleitet sein und du die Klasse Cdaten soll auf Dialogelemente zugreifen? Da brauchst du nur mit dem Klassenassistenten Variablen für deine Dialogelemente erstellen und dann kannst du ganz einfach mit ihnen arbeiten. Um aus der Klasse heraus Methoden aufzurufen, brauchst du dir Methoden einfach nur schreiben (à la printf(...)
. Oder verstehe ich hier was falsch?
-
14.06.04 18:10 #3
- Registriert seit
- May 2004
- Beiträge
- 7
ob das davon abgeleitet is, weiß ich net so wirklich, hab halt das gemacht was in meinem schlauen Buch steht:
hab mfc programm erstellt und da dann erstmal n neuen Dialog eingefügt, da dann verschiedene Textboxen usw. reingeklickt. Im Klassenassistent hab ich mir dann dafür die Klasse Cdaten erstellen lassen.
Dort kann ich ja jetzt z.b.
void Cdaten::OnCheck1()
{
}
verarbeiten.
Dann hab ich über den Klassenassistenten eine neue (allgemeine) Klasse zum Projekt hinzugefügt. Funktionen dieser Klasse sollen jetzt eben auf Schaltflächen usw. des Dialoges zugreifen.
mit
Cdaten.SetItemText
geht das ja 'scheints nich...
-
14.06.04 19:54 #4
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Also eine andere Klasse soll auf die Kontrollelemente einer Instanz deiner Dialogklasse zugreifen können, richtig?
Ich war schon dabei, dir eine genaue Erklärung zu schreiben, als mir auffiel, dass dein Dialog ja modal ist. Es gibt eigentlich keine sinnvolle Möglichkeit, von aussen auf die Kontrollelemente eines modalen Dialoges zuzugreifen. So einen Dialog fütterst du vor dem Öffnen mit Daten und liest die Resultate nach dem Schliessen aus. Dazwischen ruht die aufrufende Anwendung. Man kann das zwar auf verschiedene Weise umgehen, aber es ist keine gute Idee. Ein modaler Dialog sollte sich einfach so verhalten. Falls das aus irgendeinem Grund nicht möglich ist, verwende lieber einen nichtmodalen Dialog.
Jedenfalls, eine gute Möglichkeit wäre es, die Kontrollelemente mit dem Assistenten mit Membervariablen versehen zu lassen (z.B. CEdit m_ctlMeinEdit). Wenn du diese in der Headerdatei deines Dialoges public machst, falls sie es nicht schon sind, kannst du an den Stelle, wo du Instanzen deiner Dialogklasse verwendest, auf diese Controls zugreifen. Im Falle eines modalen Dialoges allerdings nur vor und nach Öffnen und Schliessen des Dialoges. An die eigentlichen Controls kommst du allerdings nicht heran, weil die entweder noch nicht erzeugt oder schon zerstört sind. SetItemText() kannst du da vergessen.
Ich hoffe, ich konnte dir einen Schubs in die richtige Richtung geben -- falls nicht, frag bitte noch mal nach.Geändert von Kachelator (14.06.04 um 20:54 Uhr)
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
14.06.04 20:23 #5
- Registriert seit
- May 2004
- Beiträge
- 7
Danke für diese einleuchtende Erklärung !

das bedeutet, ich muss alle Funktionen, die ein Button auslösen könnte auch in selbiger Dialogklasse unterbringen ?
das is ärgerlich.. mmh dann probier ichs über einen anderen Weg:
ich strukturier das Programm dann mal wieder um ..
und komm dann wieder auf dieses topic zurück
wenn ich grad schon mal den Meister (ja, ich les öfters hier im Forum *g*) an der Strippe hab:
wie übergeb ich denn ein dynamisches Array an eine Funktion als Referenz ?
...
matrix = new int[zeilen][20];
...
void verarbeiten( matrix) {
}
was erwartet der compiler bei den Fragezeichen ?
thx
-
14.06.04 20:36 #6
- Registriert seit
- Jan 2002
- Ort
- Bayern
- Beiträge
- 1.390
Also normalerweise schon, aber wenn du etwas Erfahrung in C++ hast, dann kannst du das auch umgehen, in dem du mit einem CallBack arbeitest, also quasi dei Dialog eine Funktion "auserhalb" aufruft.das bedeutet, ich muss alle Funktionen, die ein Button auslösen könnte auch in selbiger Dialogklasse unterbringen ?
Stichwort Funktionszeiger.
Gruß Homerwe would change the world if god gave us the source code...
and remember, science is nothing more than reverse engineering nature...
Current projects:
- LdrawConverter
-
14.06.04 20:37 #7
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
@SucheUndFinde:
Aua, da habe ich jetzt nicht mit gerechnet...
Ich würde einen std::vector oder ein zweidimensionales boost::multi_array per Referenz übergebn. Wenn du willst, erkläre ich das bei Gelegenheit.
Aber auf die Schnelle... würde ich es eventuell so etwa machen:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
int zeilen = 20; void verarbeiten( int* irgendeinpointeraufvieleints ) { // hier muss das programm [zeilen * 20] kennen int zeile = 7; int spalte = 5; irgendeinpointeraufvieleints[ zeile + spalte * zeilen ] = 4711; } int main() { int* matrix = new int[zeilen * 20]; // Zugriff ist klar, oder? verarbeiten( matrix ); return 0; } }
Das mit dem "[ zeile + spalte * zeilen ]" ist eine immer wieder irreführende Definitionssache. Keine Ahnung, ob ich mich jetzt vertan habe. Jedenfalls ist es eine Möglichkeit, die geforderten zwei Dimensionen mit einem eindimensionalen Array zu simulieren. Ich rate dennoch heftig zu boost::multiarray.
---
@Daniel:
Über Callbacks stolpert man zwar alle zwei Schritte, wenn man sich mit Windows beschäftigt, aber man sollte sie vermeiden. Callbacks sind pures, bösartiges Ur-C. Sie stehen im direkten Widerspruch zur Objektorientierung.Also normalerweise schon, aber wenn du etwas Erfahrung in C++ hast, dann kannst du das auch umgehen, in dem du mit einem CallBack arbeitest, also quasi dei Dialog eine Funktion "auserhalb" aufruft.
Ist ja schon schlimm genug, wenn man sich mit SendMessage() rumärgern muss.Geändert von Kachelator (14.06.04 um 21:13 Uhr)
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
14.06.04 21:43 #8
- Registriert seit
- May 2004
- Beiträge
- 7
mmh ?
na, das mit dem Erstellen des Arrays is kein Problem.. das geht ja alles - ich weiß nur nich wie ich es an eine Funktion übergeben kann...
void verarbeiten (&matrix) {Code :1 2 3 4 5 6 7
headerdatei: enum { elemente=27}; int (* matrix)[elemente]; source: cin >> zeilen; matrix = new int[zeilen][elemente];
}
geht ja net..
P.S. warum wird hier das neudeutsche
Wort "f-u-n-z-t" gefiltert ? *g*
-
15.06.04 07:50 #9
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Übergib nur den Zeiger auf's Array, so wie ich im letzten Post.ich weiß nur nich wie ich es an eine Funktion übergeben kann...Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
15.06.04 12:26 #10
- Registriert seit
- May 2004
- Beiträge
- 7
ah ok danke
ist diese Art von Array wohl ein wenig uneffektiv?
-
15.06.04 16:47 #11
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Eher unpraktisch.
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
Ähnliche Themen
-
Aus einer Klasse auf die Form zugreifen...
Von thespecialx im Forum C/C++Antworten: 0Letzter Beitrag: 21.02.08, 10:42 -
Von einer Klasse auf die Form zugreifen
Von Eroli im Forum .NET Windows FormsAntworten: 21Letzter Beitrag: 02.04.07, 09:52 -
Auf Variable einer Klasse zugreifen
Von Metha im Forum PHPAntworten: 7Letzter Beitrag: 14.05.06, 15:54 -
Compiler Error beim einbinden einer Dialog Klasse
Von Indian im Forum C/C++Antworten: 0Letzter Beitrag: 21.01.05, 15:31 -
[MFC VS6] von einer Klasse auf den Dialog zugreifen
Von SOB im Forum C/C++Antworten: 3Letzter Beitrag: 09.04.03, 14:47





Zitieren
Login






