Buttons dynamisch erstellen und darauf zeichen.
-
Hallo zusammen,
wie kann ich Buttons während der Laufzeit erzeugen?
weitere Frage:
Wenn ich nun den Button erstellt habe wie kann ich darauf z.B. ein gruenes Rechteck zeichnen?Gruß
spacehelix
-
Du brauchst dazu die von CWnd abgeleitete Klasse CButton. Mit Create kannst du dann den Button erzeugen. Um ein Rechteck anzuzeigen, erstellst du entweder ein entsprechendes Bitmap und lässt den Button dann das Bitmap anzeigen, per CButton::SetBitmap. Wenn du aber nicht einfach nur ein Rechteck angezeigt haben willst, sondern etwas komplexeres, dann musst du wohl dir eine Klasse von CButton ableiten. Danach wird diese Funktion für dich wichtig: CButton::DrawItem.
Wieso willst du eigentlich ein Rechteck auf einen Button malen? ^^
Grüssli
-
Hi,
jedem Button ist ein Sollwert zugewiesen, und diesen möchte ich als analogen Wert auf dem Button darstellen.
Wie funktioniert das mit dem Create?
Create(CButton);?? keine Ahnung.
Gruß
spacehelix
-
Hallo
weis jetzt wie ich den Button dynamisch erzeugen kann, mir fehlt aber eine Information.
hier das Beispiel:
CButton myButton1; // Create a push button. myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,30), pParentWnd, 1);
Woher bekomme ich pParentWnd?????
Gruß spacehelix
-
CButton::Create
Dort liest man:
pParentWnd
Specifies the button control's parent window, usually a CDialog. It must not be NULL.Du erstellst dein Button ja in einem Fenster. Das Mutterfenster wo der Button drauf ist, das ist das ParentWindow. Du musst also den Zeiger von diesem Mutterfenster übergeben.
And dieses Mutterfenster werden dann auch all die Messages von einem Button gesendet. Also zum Beispiel die Klicks.Grüssli
-
schon klar, aber woher bekomme ich den Pointer.
Vieleicht:
CTest_mfc2Dlg::GetParent //geht aber net, ist ja wenn ich das richtig verstehe das parent vom Dialog
also:
CTest_mfc2Dlg::???gruß
spacehelix
-
Schon mal was von this gehört?
// Wenn CTestWnd dein Fenster ist, wo du den Button drin haben möchtest. // m_Button ist eine Membervariable von CTestWnd. CTestWnd::OnCreate(...) { m_Button.Create(_T("My Text"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,30), this, 1); }
Ich empfehle dir vielleicht nochmals ein Tutorial zu C++ durchzumachen. Der this-Zeiger ist ja absolutes Basiswissen.
Grüssli
-
danke schön,
ich hab schon davon gehört, aber alles wieder vergessen.
Ich bin gerade am testen (performence Test) ob ich mit der mfc arbeite oder lieber auf einige vorteile verzichte und alles mit der Win API mache (schneller).Falls ich die mfc benutze werde ich nochmal ein tutorial durcharbeiten.
gruß
spacehelix
-
Hi,
also das Buttons erstellen funktioniert. Aber das darauf zeichnen bzw. ausgeben einer Bitmap nicht.
CButton* myButton;
Hier wird eine Matrix aus Buttons erstellt:
myButton=new CButton[56]; int i_count=0; for (int i=0; i<7; i++) //Zeilen { for (int j=0; j<8; j++) //Spalten { myButton[i_count].Create(_T(""), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10+ 40*j,10+40*i ,40+40*j,40+40*i), this, i_count); i_count++; } }
Wie kann ich ich darauf z.B. in der mitte jeder Taste ein 10x10 Pixel großes Rechteck zeichnen?
Gruß
spacehelix
-
Hmmm hab ich doch schon gesagt. Wo liegt das Problem denn genau? Kannst ja auch ein wenig selber rumprobieren oder dann genauere Problemangaben geben
Was verstehst du nicht? Wo gibt es Probleme? Was für Probleme? usw.Grüssli