Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » problem mit (CEdit*) / Zuweisung von Objekten als Variablen

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
07.02.2006, 15:53 Uhr
~peterchen
Gast


hallo

ich habe folgendes Problem...

als Variablen im Header definiert:

CEdit* x; // ??????
CEdit* Objekt1;
CEdit* Objekt2;
CEdit* Objekt3;
CEdit* Objekt4;
usw ....


in der CCP dann:

Objekt1 = (CEdit*) GetDlgItem(IDC_Objekt1);
Objekt2 = (CEdit*) GetDlgItem(IDC_Objekt2);
Objekt3 = (CEdit*) GetDlgItem(IDC_Objekt3);
Objekt4 = (CEdit*) GetDlgItem(IDC_Objekt4);
usw...

nun soll eines dieser Objekte durch eine Abfrage o.ä. ausgewählt werden und eine neue Position (die im Array gespeichert ist) mit MoveWindow bewegt werden.

für ein bestimmtes Objekt, zb Objekt1 geht das dann mit folgender Zeile auch:

Objekt1->MoveWindow(array[0][0],array[0][1],25,25);

das Problem ist aber, dass ich vorher noch nicht weiß, welches der Objekte mit MoveWindow verschoben werden soll, aber wenn etwas in der Art

x->MoveWindow(array[0][0],array[0][1],25,25); mit x=Objekt1, dann bekomme ich Fehlermeldungen, weil die Typen nicht verträglich sind !?

ich möchte also, z.B. über eine if-Abfrage o.ä. vorher irgendwann das Objekt auswählen, und auf dieses (also hier 'x') soll dann die MoveWindow - Zeile angewendet werden. da es relativ viele objekte sind möchte ich nicht zig if-abfragen machen, das muss ja irgendwie eleganter gehen !?!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.02.2006, 09:28 Uhr
Patricia



Machs doch einfach so:

CEdit* Objekts[4];

Objekts[0] = (CEdit*) GetDlgItem(IDC_Objekt1);
Objekts[1] = (CEdit*) GetDlgItem(IDC_Objekt2);
Objekts[2] = (CEdit*) GetDlgItem(IDC_Objekt3);
Objekts[3] = (CEdit*) GetDlgItem(IDC_Objekt4);
usw ...

nun kannst du anstelle von x->MoveWindow(array[0][0],array[0][1],25,25);
Objekts[x]->MoveWindow(array[0][0],array[0][1],25,25);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.02.2006, 09:29 Uhr
mmc20
puss in boots


hi, warum legst nicht einfach ein array aus CEdit's an ?
also:

C++:
CEdit ceObjekt[4];
ceObjekt[0] = GetDlgItem(IDC_Objekt1);
...


und greifst dann über nen index drauf zu

C++:
int index = 0;
ceObjekt[index]->MoveWindow(array[index][0],array[index][1],25,25);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.02.2006, 05:56 Uhr
Spacelord
Hoffnungsloser Fall


Auch auf Gefahr hin dass ich der Pablo der temporären HandleMaps werde....

Der Zeiger den dir GetDlgItem liefert ist nach der ersten Idle Phase ungültig!!
Entweder du erzeugst deine CEdit explizit per Create selber oder du legst mit dem Klassenassi Controlvariablen dafür an und nutzt diese anstatt deiner Zeiger.Wenn du deine Zeiger mit der ID des Controlls "subclassed" müste es auch funktionieren.
Der C Cast nach CEdit* ist übrigens auch technisch nicht korrekt(ich weiß dass es selbst im MSDN Beispiel so vorgemacht wird!).
Ersetz den mal durch nen dynamic_cast....
Was dir GetDlgItem liefert ist ein C(Temp)Wnd*(ausser du hast das Control selber erzeugt).
Da kannst du casten wie du willst.Es ist und bleibt ein temporäres CWnd das beim nächsten OnIdle wieder abgebaut wird.
Ich weiß nicht wie oft ich den Käse schon geschrieben habe,aber wenn da in der MSDN steht dass man den Zeiger den GetDlgItem liefert nicht für ne spätere Verwendung speichern soll,dann hat das schon seinen Grund.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 09.02.2006 um 05:57 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.02.2006, 17:24 Uhr
mmc20
puss in boots



Zitat von Spacelord:
Auch auf Gefahr hin dass ich der Pablo der temporären HandleMaps werde....


keine angst... bis dahin ist's noch ein langer weg

stimmt aber alles, aus diesem grund hab ich sowas auch immer anders gelöst ( jetzt wo du's erwähnst... )
also: eine membervar anlegen

C++:
CEdit m_ceEdits[99];



und dann im "DoDataExchange(..)" ausserhalb des AFX_DATA_MAP-blocks (am besten gleich dahinter) selbst die DDX_'es eintragen

C++:
    //}}AFX_DATA_MAP
////////////////////////////////////////////////////
    DDX_Control(pDX, IDC_EDIT0, m_ceEdits[0]);
    DDX_Control(pDX, IDC_EDIT1, m_ceEdits[1]);
// usw

 
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: