Probleme mit Dialog



  • 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_FEMIN

    MessagMap:

    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...


Anmelden zum Antworten