Steuerlemente zur Laufzeit erstellen
-
Okay danke für deine schnelle Antwort.
Aber ich glaube ich habe das noch nicht richtig verstanden.Muss ich mir vorher mit dem ressourcen Editor ein Objekt erstellen.
Habe mit dem Create Befehl rumgespielt aber noch kein Ergebnis erhalten.
Habe ich vielleicht etwas vergessen ;CButton test; test.Create("Test 1234",WS_CHILD,CRect(10,10,100,30),this,1);
-
Versuchs mal so:
CButton test;
test.Create("Test 1234",WS_CHILD | WS_VISIBLE,CRect(10,10,100,30),this,1);
Was die Ressourcen betrifft solltest Du lediglich in der Resource.h ein Makro definieren. Z.B.:
#define ID_BUTTON 1
Dann wuerde der Code so aussehen:
test.Create("Test 1234",WS_CHILD | WS_VISIBLE,CRect(10,10,100,30),this,ID_BUTTON);
Thomas
-
Leider funktioniert das nicht . Ich kann jedenfalls keinen Button sehen.
Was bewirkt die 1 eingentlich beim Eintrag in Ressourcen.h
-
Das geht schon. Achte nur daruf, dass das Control Object (hier CButton) nicht aus dem Skope geht und dadurch den Destruktor auslöst! Also pack den CButton in Deine Dialogklasse und erzeuge es. Zur Not kanst Du das mit dem Spy++ kontrollieren.
-
?????????????
Huch das habe ich nicht verstanden kannst du das bitte etwas einfacher erklären ?
-
void CDMyDialog::OnInitDialog() { CButton button; button.Create(...); ... return TRUE; }button ist ein lokales Objekt. Der Button wird erzeugt. Wenn OnInitDialog verlassen wird ist der Button aus dem Scope und der Destruktor wird aufgerufen, was wiederum das Button-Fensterle zerstört.
HTH
-
Okay das habe ich verstanden. Ich wusste mit dem Begriff Skope nichts anzufangen. Ich habe es bisher immer in OninitDialog gesteckt. Wie und wo ist es richtig.?
VIelen Dank
-
du könntest eine membervariable dafür verwenden. am besten einen stl container, damit die anzahl der steuerelemente dynamisch bleibt.
-
Habs hinbekommen vielen Dank euch allen und ein schönes Wochenende
-
Hallo ich habe noch ein Problem . Ich erzeuge mir verschiedene Objekte dynanisch zur Laufzeit. Nun möchte ich um die ELemente einen rahmen zeichn
CRect window; m_checkbox[0].GetWindowRect(&window);Allerdings wenn ich mit
CClientDC dc(this); CPen lPen(PS_SOLID, 2, RGB(127,127,0)); dc.SelectObject(&lPen); dc.Rectangle(window);versuche einenRahmen zu zeichnen, sind zwar die x - Kooradinaten richtig aber nicht die y- Koordinaten. Was kann ich machen ?