Probleme mit Dialog
-
Hallo,
ich hab mit VC++ 6.0 ein dialogfeldbasiertes Programm erstellt.
Der Main-Dialog hat einige Buttons, die verschiedenen Funktionen starten.
Der "Beenden" - Button funktioniert auch, aber wenn ich auf das "Schließen-Kreuz" ganz rechts oben klick, wird das Programm NICHT GESCHLOSSEN, sondern es passiert dasselbe wie beim ersten Button des Dialogs.Woran kann das liegen?
Danke und mfg
rodo
-
Wie heißt der erste Button?
-
Mit dem ersten Button mein ich den ersten in der Tabulator-Reihenfolge.
-
Der Button, auf den du die Funktion gelegt hast, hat die ID: IDCANCEL und die Funktion, welche vom Button ausgeführt wird, heißt OnCancel. Diese Funktion wird auch aufgerufen, wenn du das "X" oben rechts klickst...
-
Die ID des ersten Buttons ist NICHT IDCANCEL (auch nicht IDOK).
-
Würdest du uns bitte trotzdem mal mitteilen, wie der heißt?
Oder was passiert, wenn du die Taborder änderst?
Wie sieht die Messagemap (cpp) aus?
-
Sorry, hab mich verlesen ("Was heißt", statt "Wie heißt"...)
Wenn ich die Taborder änder, ändert sich gar nichts.
Der erste Button heißt: IDC_OPEN_FEMINMessagMap:
BEGIN_MESSAGE_MAP(CFEMDlg, CDialog) //{{AFX_MSG_MAP(CFEMDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_START_OSCI, OnStartOsci) ON_BN_CLICKED(IDC_START_TEST, OnStartTest) ON_BN_CLICKED(IDC_STOP_OSCI, OnStopOsci) ON_BN_CLICKED(IDC_STOP_TEST, OnStopTest) ON_BN_CLICKED(IDC_OPEN_FEMIN, OnOpenFemin) ON_BN_CLICKED(IDC_OPEN_FEMOUT, OnOpenFemout) ON_BN_CLICKED(IDC_SETTINGS, OnSettings) ON_BN_CLICKED(IDC_INFO, OnInfo) ON_BN_CLICKED(IDC_CALC, OnCalc) ON_BN_CLICKED(IDC_SHOW_LAYOUT, OnShowLayout) //}}AFX_MSG_MAP END_MESSAGE_MAP()
Außerdem gibt es noch einen Button IDOK, der den Dialog schließt. Einen Button, der IDCANCEL heißt, gibts nicht.
-
Sehr komisch.
Setz mal einen Breakpoint in OnOpenFemin und guck, wo du herkommst, wenn der da drin hält, nachdem du auf das Kreuz geklickt hast.
Vielleicht kann man daran was sehen.Oder such mal, wo in der cpp überall die Funktion OnOpenFemin aufgerufen wird.
-
Hi,
erstmal danke fuer deine Mühe!
Setz mal einen Breakpoint in OnOpenFemin und guck, wo du herkommst
Wie kann ich sehen woher ich komm?
Oder such mal, wo in der cpp überall die Funktion OnOpenFemin aufgerufen wird.
OnOpenFemin wird gar nicht aufgerufen, steht nur in der MessageMap.
Gruss
rodo
-
Das siehst du im Callstack/Aufrufliste.
Mach ma rechte Maustaste auf die freie Fläche neben dem Menü, da kannst du die einblenden lassen.
Durch Doppelklick kannst du dann zwischen den Funktionen wechseln.
-
Also, das ist die Aufrufliste, wenn ich aufs Kreuz klick:
CFEMDlg::OnOpenFemin() line 135
AfxDispatchCmdMsg(CCmdTarget * 0x0012fc28 {CFEMDlg hWnd=0x0005072c}, unsigned int 2, int 0, void (void)* 0x0040207c CFEMDlg::OnOpenFemin(void), void * 0x00000000, unsigned int 12, AFX_CMDHANDLERINFO * 0x00000000) line 88
CCmdTarget::OnCmdMsg(unsigned int 2, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 302 + 39 bytes
CDialog::OnCmdMsg(unsigned int 2, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 97 + 24 bytes
CWnd::OnCommand(unsigned int 2, long 788218) line 2088
CWnd::OnWndMsg(unsigned int 273, unsigned int 2, long 788218, long * 0x0012f96c) line 1597 + 28 bytes
CWnd::WindowProc(unsigned int 273, unsigned int 2, long 788218) line 1585 + 30 bytes
AfxCallWndProc(CWnd * 0x0012fc28 {CFEMDlg hWnd=0x0005072c}, HWND_ * 0x0005072c, unsigned int 273, unsigned int 2, long 788218) line 215 + 26 bytes
AfxWndProc(HWND__ * 0x0005072c, unsigned int 273, unsigned int 2, long 788218) line 368
USER32! 77d18734()
USER32! 77d18816()
USER32! 77d189cd()
USER32! 77d196c7()
CWinThread::PumpMessage() line 853
CWnd::RunModalLoop(unsigned long 4) line 3478 + 19 bytes
CDialog::DoModal() line 539 + 12 bytes
CFEMApp::InitInstance() line 57 + 11 bytes
AfxWinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00141f0f, int 1) line 39 + 11 bytes
WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00141f0f, int 1) line 30
WinMainCRTStartup() line 198 + 54 bytes
KERNEL32! 7c816d4f()Zeile 135 ist die erste Zeile von OnOpenFemin() (die mit dem Breakpoint) und das
unsigned int 2
kommt vielleicht (?) aus der resources.h:
#define IDC_OPEN_FEMIN 2
Falls die 2 wirklich daher kommt, würd des doch heißen, dass das Kreuz auch die ID 2 hat, oder?
-
Das kann sehr gut sein.
Warum hat IDC_OPEN_FEMIN denn eine so kleine ID?
Warum hast du die automatisch vergebene verändert, das macht immer Probleme, vor allem wenn du den Wertebereich verläßt, der für "dich" ist. Und in diesem Fall hast du ihn verlassen.Mach die ID mal wieder normal. (Und falls du noch mehr so kleine hast, die bitte auch.) und dann drück "Alles neu erstellen".
Dann sollte es gehen, wenn das der einzige Fehler war.
-
Hi,
vielen Dank für die Hilfe - das wars!
Was aber komisch ist: ICH habe die IDs NICHT verändert!
Bei mir waren alle Button-IDs von 2 bis 12. Kann das daran liegen, dass ich den IDCANCEL-Buttun umbenannt und dann immer kopiert hab, anstatt neue Buttons zu machen?Mach die ID mal wieder normal.
Was heist das eigentlich? hab sie jetzt mal alle auf 200+ gemacht und so gehts.
Danke nochmal
rodo
-
Das kann es gewesen sein, keine Ahnung.
Also, ich hab so 1000+ als IDs - die wurden automatisch so.
-
ok, danke nochmal - ich hab schon befürchtet, ich müsst den ganzen Dialog nochmal neu machen...