Wie deaktiviere ich das Schließen-Kreuz?



  • Ich möchte das Kreuz oben rechts und den Systemmenübefehl deaktivieren. Wie geht das?

    Habt ihr mal Stichworte zum Suchen? Mir fällt nichts ein. 😞



  • Eigenschaften vom Fenster-> Systemmenü deaktivieren, damit sind aber auch die Minimieren und Maximieren, wenn drin, weg.



  • Ups, entschuldige ich habe es nicht genügend beschrieben:

    Wie de-/aktiviere ich das zur Laufzeit?

    Der Nutzer soll während der Eingabe nicht das Programm schließen können - er soll vorher abbrechen oder speichern.



  • Waere es da nicht leichter im Dialog selber einen Button zu erstellen der diesen schliesst und diesen dann zu aktivieren bzw. deaktivieren_



  • Wer redet denn von einem Dialog? Es ist eine SDI Anwendung.

    Und ich möchte keine Umweglösung sondern was vernünftiges. Eine Anwendung MUSS einen Schließen-Knopf haben, sonst sind DAUs verwirrt und wollen den haben. Und da ich den dann einbauen muss, mache ich es lieber JETZT.



  • HMENU hSysMenu = GetSystemMenu(hWnd, FALSE);
    DeleteMenu(hSysMenu, SC_CLOSE, MF_BYCOMMAND);
    

    Das deaktiviert IMHO auch das Schließen-Kreuz. Einfach mal ausprobieren.



  • Das funktioniert, danke - aber das Aktivieren wird schwer.

    Aber durch den Codeschnipsel habe ich die gesuchten Befehle gefunden.

    CMenu* pSysMenu = AfxGetMainWnd()->GetSystemMenu(FALSE); 
    	pSysMenu->EnableMenuItem(SC_CLOSE, MF_GRAYED);
    

    und zum Aktivieren:

    CMenu* pSysMenu = AfxGetMainWnd()->GetSystemMenu(FALSE); 
    	pSysMenu->EnableMenuItem(SC_CLOSE, MF_ENABLED);
    


  • Hmm das funktioniert bei meiner Dialoganwendung leider nicht 😕
    Muss man da was beachten? Ich habs so gemacht:

    void CLoaditupDlg::OnRunprogramm() 
    {
        CMenu* HandleToSystemMenu = this->GetSystemMenu(FALSE); 
        HandleToSystemMenu->EnableMenuItem( SC_CLOSE, MF_GRAYED);
    }
    


  • Hallo,

    mit einer kleinen Korrektur sollte es gehen:

    void CLoaditupDlg::OnRunprogramm() 
    {
    	CMenu* pm = GetSystemMenu(FALSE);
    	pm->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND | MF_GRAYED);
    }
    

    MfG



  • hallo, habe es wie Probenutzer es beschrieben hat gemacht...
    nichtdeklarierte Bezeichner MF_Grayed und MF_Enabled

    muss ich das noch was einbinden, header oder so?



  • achja MFC Anwendung ist es



  • ihr könntet doch auch einfach das schließen-kreuz lassen wie es ist und mit einer hübschen meldung a la "so nicht, lieber benutzer" reagieren, wenn der user das programm an der falschen stelle beenden will ?!



  • sadi schrieb:

    Hmm das funktioniert bei meiner Dialoganwendung leider nicht 😕
    Muss man da was beachten? Ich habs so gemacht:

    void CLoaditupDlg::OnRunprogramm() 
    {
        CMenu* HandleToSystemMenu = this->GetSystemMenu(FALSE); 
        HandleToSystemMenu->EnableMenuItem( SC_CLOSE, MF_GRAYED);
    }
    

    copy & paste will eben gelernt sein 😃
    http://c-plusplus.net/forum/viewtopic.php?t=39033

    HILFE_ schrieb:

    hallo, habe es wie Probenutzer es beschrieben hat gemacht...
    nichtdeklarierte Bezeichner MF_Grayed und MF_Enabled

    muss ich das noch was einbinden, header oder so?

    füge mal am Anfang deiner Implementierungsdatei folgenden Code ein:

    #define MF_Grayed MF_GRAYED
    #define MF_Enabled MF_ENABLED
    

    dann sollte es funktionieren... ich sag nur "CASE SENSITIVE" 😃 😮

    ciao ramirez


Anmelden zum Antworten