SDI und MessageBox



  • Hi,

    habe ein kleines Problem, bei dem ich nicht weiterkomme.
    Ich habe eine SDI-Anwedung erstellt und will an einigen Stellen via MessageBox Abfragen (OK/ABBRECHEN). Mein Problem ist, dass die MessageBox immer hinter meiner Anwendung erscheint und nur mit drücken der ALT-Taste in den Voerdergrund kommt. Wenn die MessageBox aufgerufen wird kann ich nicht auf meine Anwendung zugreifen, was ja logisch ist.

    Kann ich irgendwo das Verhalten meine MessageBox einstellen? Topmost oder sowas?

    so rufe ich auf:

    if(MessageBox(_T("You will save the shown bitmap?"), _T("Saving Bitmap"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK)
    {
    
    }
    


  • Schau dir mal die Flags für uType an. Da gibt's MB_APPLMODAL, MB_SYSTEMMODAL...

    EDIT: MB_TOPMOST wird dir wahrscheinlich reichen. MB_SYSTEMMODAL wäre wohl ein wenig übertrieben. 😉



  • Hab ich schon versucht, mit dem selben Ergebnis. Hab die MSDN schon durchgeschaut und nichts hilft. Oder muss ich an meiner Anwenung was ändern?



  • Also ich würde einfach mal MB_TOPMOST, MB_SETFOREGROUND und MB_SYSTEMMODAL der Reihe nach durchprobieren (wenn nicht schon geschehen). Wenn die ersten beiden aus irgendeinem Grund nicht funktionieren, sollte MB_SYSTEMMODAL doch aber in jedem Fall die Box in den Vordergrund bringen. Noch weiter vorne geht nicht! 😉



  • Das hab ich mir auch gedacht, aber aus irgend einem Grund kommt die MessageBox erst nach Vorne, wenn ich ALT drücke. Ich schnalls nicht sonst klappts doch.

    MessageBoxW(_T("You will save the shown bitmap?"), _T("Saving Bitmap"), MB_OKCANCEL | MB_SYSTEMMODAL);
    

    So viel kann man da doch nicht falsch machen 😞



  • Ich hab mal ein leeres SDI-Projekt erstellt. Da klappts ohne Probleme. Nun bin ich total Ratlos.

    Vllt. hilfen ein paar Infos zum Fehlerfinden:

    Ich habe eine SDI mit Doc/View, einige Dialoge, dich ich hier als Child anlege:

    CMyAppView::CMyAppView()
    {
    	m_wndTools = NULL;
    	m_wndMain = NULL;
    	m_wndDetail = NULL;
    	m_wndRec = NULL;
    
    	// Create the modal dialog box
    	if (!m_wndTools)
    		m_wndTools = new CToolsDlg;
    
            //usw
    }
    

    und ansonsten verarbeite ich Daten und erstelle eine Grafik. Alles in meiner View-Klasse. Ich habe noch eine Toolbar mit ComboBoxen.



  • Hm... sorry, keine Ahnung, woran das liegt...



  • So jetzt wirds kriminell. Wenn ich ASSERTS bekomme, dann werden die auch hinter meinem SDI plaziert und erst mit ALT in den Vordergrund geholt. Was zum .... kan das bitte sein?



  • So habe das Problem nun gefunden. Ich rufe zum zeichnen OnPaint auf. Und da ist dann der Fehler, dass MessageBoxen und konsorten nicht angezeigt werden. Nun muss ich meine Zeichenroutine wo anders aufrufen. OnDraw kapier ich noch nicht ganz und wenn ich Invalidate() nutze ist der Fehler wieder da solange mein Timer läuft.

    Hat einer einen Tipp wie und wo ich am besten Zeichne? Ich Zeichne in einem memDC und gebe das dann alle 8ms aus.


Log in to reply