MFC Button Click Event ausführen

Jennsy

Grünschnabel
Hallo,

so, leider stehe ich schon wieder an....
und zwar möchte ich, dass bei Klick auf einem Button in einem Dialogfenster etwas ausgeführt wird (im ersten Schritt nur mal die Anzeige einer MessageBox). nur leider klappt das bei mir nicht, obwohl ich eigentlich dieser Anleitung folge:
http://social.msdn.microsoft.com/Fo...-dc19-4228-9432-f8b03a79ea45/mfc-button-click

also in Test.h ist Folgendes eingefügt:
Code:
public:
    afx_msg void OnBnClickedButton1();

und in Test.cpp ist Folgendes eingefügt:

Code:
BEGIN_MESSAGE_MAP(CTest, CDialogEx)
    ON_BN_CLICKED(IDC_BUTTON1, &CTest::OnBnClickedButton1)
END_MESSAGE_MAP()
// CModal-Meldungshandler
void CModal::OnBnClickedButton1()
{
 MessageBox( "You clicked on me");
// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
}

nur leider passiert da genau gar nicht, wenn ich auf Button1 drücke... :confused:
Kennt vielleicht jemand dieses Problem?
Vielen Dank im Voraus :)
 

MCoder

Erfahrenes Mitglied
Hallo,

steht in deinem .h-File auch ein
C++:
DECLARE_MESSAGE_MAP()

(z.B. unter der eingefügten Click-Methode) ?


Gruß
MCoder
 

Jennsy

Grünschnabel
Hallo,
ja steht in dem Bereich:
Code:
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung

	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedButton1();

müsste hier sonst auch noch was stehen?

mfG Jenny
 

MCoder

Erfahrenes Mitglied
Hallo,

der Header sollte so ok sein. Normalerweise kann man da auch nicht viel verkehrt machen. Ich kann's jedenfalls nicht nachvollziehen.

Gruß
MCoder
 
Zuletzt bearbeitet:

MCoder

Erfahrenes Mitglied
Nachtrag: Probiere doch mal, deinen Dialog von CDialog statt von CDialogEx abzuleiten. Vielleicht werden da bestimmte Ereignisse irgendwie anders behandelt.
Ich kann's leider nicht ausprobieren, weil ich eine älteres Visual Studio bzw. MFC Version habe, die die diese Klasse noch nicht hat

Gruß
MCoder
 

Jennsy

Grünschnabel
Hallo,

ich habe jetzt eine neue Klasse erstellt (sonst alles gleich), nur "CDialog" aber es tut sich noch immer nichts...könnte es daran liegen?
Hast du vielleicht schon mal so etwas Ähnliches gemacht? Was wäre denn richtig zu verwenden?

MfG Jenny
 

Jennsy

Grünschnabel
Sorry, hab deinen Nachtrag nicht gesehen...

In dem Fall, scheint es CDialog wohl auch nicht zu sein...wobei ich es nicht verstehe, denn ich habe einen ähnlichen Programmteil, bei denen ich die Klasse "COleProperty" verwende, und dort funktioniert z.B. der Datenaustausch mit Textfeldern einwandfrei...
 

MCoder

Erfahrenes Mitglied
Also ich sehe jetzt keinen Fehler bei deinem Vorgehen; es sollte so funktionieren. Setze doch mal einen Breakpoint an die Stelle des MessageBox-Aufrufes und lasse das Program im Debugger laufen. Evt. wird nur die Messagebox nicht richtig angezeigt (aber wohl unwahrscheinlich).

In welchen Kontext läuft der Dialog? ist esw der Hauptdialog der Applikation?

Gruß
MCoder
 

Jennsy

Grünschnabel
ich dachte eigentlich auch, dass es so funktioniert, nur leider scheint es hier noch irgendwo eine Kleinigkeit zu geben, die ich anscheinend vergessen habe :(

Ich erstelle eine OnDraw Oberfläche, und darauf ein Textfeld, bei Linksklick frage ich die Mausposition ab, und wenn sich diese auf dem Textfeld befindet, wird dann der Dialog geöffnet..

Debugger hab ich auch schon ausprobiert...und es passiert nichts, wenn ich da den Button drücke....
 

MCoder

Erfahrenes Mitglied
Steuerst du an irgendeiner Stelle im darunterliegenden System den Focus ( SetFocus() )? Das kann dazu führen, das der Click-Event ans falsche Fenster geht und demzufolge in deinem Dialog nicht funktioniert.