CButton anklicken
-
Hallo,
ich habe mit der CButton Klasse ein normalen Pushbutton erstellt. Mein Problem ist dass ich ihn nicht anklicken kann. Was kann ich tun um Ihn anklicken zu können, bzw. um die Nachricht eines klickens auswerten zu können ?!Meine Syntax:
CButton sendButton;
CRect size;size.SetRect(50,50,300,300);
sendButton.Create("send", WS_VISIBLE|BS_PUSHBUTTON, size, this, 1);Also der Button erschein, ist nur nicht "anklickbar"...
Danke im vorraus
hever
-
Hi,
in der Hilfe zu CButton steht, das man WS_ChILD immer angeben muss. BS_PUSHBUTTON brauchst Du wahrscheinlich nicht (löst WM_COMMAND aus).
Gruß
Alex
-
Hallo,
Ich habe jetzt auch mal das WS_CHILD hinzugefügt. Das hat aber nichts gebracht.
Ich sollte wohl noch etwas ergänzen und zwar möchte ich diesen Button in einem Child-Window erstellen und nicht in einem Dialog.
Wo genau sollte ich denn den Code zum erstellen des Buttons einfügen ? Momentan habe ich Ihn in der CChildFrame::OnCreate. Muss ich noch andere Methoden wie UpdateWindow etc. verwenden ?Aber danke schonmal für die Hilfe.
hever
-
Guten Abend,
Ich habe festgestellt, dass ich in dem Fenster garnichts verwenden kann, weder Button, noch Eingabegfeld noch sonstwas. Es liegt also nicht daran wie ich den Button erstellt habe sondern an irgendwas was anderem.Ich würde mich sehr über Hilfe freuen
hever
-
...noch eine Ergänzung.
Wenn ich anstatt den Parameter this, den Parameter this->GetParent() verwende erscheind der Button im Hauptfenster und ich kann ihn auch anklicken. Wie lautet der Window-Hanlde eines ChildWindows ?AfxGetApp()->GetMainWnd() hilft auch etwas weiter, bringt mich aber nicht zum Ziel.
danke
hever
-
Nabend,
Ich habe nun den Parameter this durch den Parameter this->GetTopWindow() ersetzt und der Button bzw. alles andere Funktioniert nun auch:sendButton.Create("send", WS_CHILD|WS_VISIBLE|BS_CENTER, size, this->GetTopWindow(), 1);
thx
hever
-
Zeig mal die komplette Funktion, in der Du den Button erstellst!
-
Hier ist der Code:
//Auszug aus der ChildFrm.h
//#####################################
// Attribute
public:
CButton sendButton;
CEdit EditField;
CRect size, editsize;//ChildFrm.cpp
//###########################################################################
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
return -1;// Ansicht erstellen, um den Client-Bereich des Rahmen zu belegen
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("Ansichtfenster konnte nicht erstellt werden\n");
return -1;
}size.SetRect(70, 70, 200, 200);
sendButton.Create("send", WS_CHILD|WS_VISIBLE|BS_CENTER, size, this->GetTopWindow(), 1);editsize.SetRect(10, 10, 300, 50);
EditField.Create(WS_BORDER|WS_CHILD|WS_VISIBLE|ES_PASSWORD, editsize, this->GetTopWindow(), 0);return 0;
}
-
und hallo nochmal...
auch wenn ich dass Gefühl hab nur mit mir allein zu sprechen. Habe ich immer noch ein Problem, und zwar muss der wie oben Beschriebene Button nun ausgerichtet werden und zwar zur Fensterseite. Wenn ich also dass Fenster vergößer, soll auch der Button vergößert werden. Beispielsweise ich strecke dass Fenster in der Breite, dann soll auch der Button in der Breite gestreckt werden. Hat vielleicht jemand einen Lösungsansatz für mein Beschriebenes Problem ?Mit folgender Syntax kann ich zwar die Koordinaten des Fensters auslesen, aber ich kann diese Koordinaten nicht verwenden um den Button auszurichten.
((TestApp*)AfxGetApp())->m_pMainWnd->GetClientRect(test)Wäre für Hilfe dankbar
hever
-
Also erstmal, Du sprichst nicht mit Dir alleine, aber 1. muss man erstmal verstehen, was Du überhaupt für 'Schrott' gecodet hast, denn ein richtig erstellter Button empfängt nunmal immer seine Nachrichten!
Und die Lösung liegt wie immer in Details, die erst gepostet werden, wenn man explizit danach fragt.Hier bei Dir liegt es einfach daran, dass der Button, das Edit und View Childs des CChildFrame sind, aber das View aufgrund seiner ID dem CChildFrame bekannt ist, welches dann beim Grösse ändern automatisch das View mit ändert.
Du musst also diese Controls in dem View erstellen.
Das Vergrössern nimmst Du dann in View::OnSize vor! Berechnen dürfte ja nicht das Problem darstellen!
-
Erstmal danke für deine Hilfe, aber wie bereits schon gesagt bin ich Anfänger im Bereich der Windowsprogrammierung und versuche mich da gerade einzuarbeiten. zu
1. Wie kann ich es realisieren, dass ein Button seine eigenen Nachrichten verarbeitet ?Und die andere Frage ist, wo muss ich den Button erstellen, also in welcher Methode des ChildViews genau muss ich den Button erstellen (OnPaint, Serialize, etc??) Ich habs zwar ausprobiert bin aber an einigen Fehlermeldungen gescheitert.
Es wäre sehr hilfreich wenn jemand mal einen kleinen Beispielcode posten könnte.
danke
hever