SDI-Anwendung bei falscher Bildschirmauflösung abbrechen



  • Hallo,
    ich habe eine SDI-Andwendung (VC7) und überprüfe in CMainFrame::PreCreateWindow die akuelle Bildschirmauflösung. Bei einer falschen Auflösung möchte ich eine Meldung (AfxMessageBox...) ausgeben und das Programm beenden.

    Frage: Wie kann ich das Programm beenden?

    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    if( !CFrameWnd::PreCreateWindow(cs) )
    return FALSE;
    // TODO: Ändern Sie hier die Fensterklasse oder die Darstellung, indem
    // CREATESTRUCT cs modifizieren.
    int i_breite = GetSystemMetrics( SM_CXSCREEN );
    int i_hoehe = GetSystemMetrics( SM_CYSCREEN );

    // Anzeigemodus ist 1024 x 768
    if( (i_breite == 1024) && (i_hoehe == 768) ) {
    cs.x = 0;
    cs.y = 0;
    cs.cx = GetSystemMetrics(SM_CXFULLSCREEN);
    cs.cy = GetSystemMetrics(SM_CYFULLSCREEN) + GetSystemMetrics(SM_CYCAPTION);
    cs.style |= WS_MAXIMIZE;
    cs.style &= ~WS_THICKFRAME; // TO avoid resizing
    cs.style &= ~WS_MAXIMIZEBOX; // Disable maximize button
    }
    else {
    // Bildschirmaufloesung zu gering
    AfxMessageBox( IDS_MSG_01, MB_OK | MB_ICONSTOP );
    }



  • Ich habe das in InitInstance drin, hier mal der Abschnitt:

    // Das hier ist nur der Rest von InitInstance, das davor ist hierfür unwichtig.
    
    	// Erstmal holen wir uns die Auflösung des Monitors in Pixeln:
    	CClientDC dc(NULL);
    	int nXRes = dc.GetDeviceCaps(HORZRES);
    	int nYRes = dc.GetDeviceCaps(VERTRES);
    
    	// Wenn wir eine Auflösung haben, die kleiner ist als 1024 x 768, geben wir eine Meldung aus
    	if ((nXRes < X_RES) || (nYRes < Y_RES))
    	{
    		AfxMessageBox(_T("Die Auflösung des Monitors muss mindestens 1024 x 768 betragen.\nÄndern Sie das bitte und starten Sie dann das Programm erneut."));
    		return FALSE; // Das Programm darf nicht laufen!!!
    	}
    	// Wenn wir eine Auflösung von 1024 x 768 haben, wird das Fenster maximiert
    	else if ((nXRes == X_RES) && (nYRes == Y_RES))
    	{
    		m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
    	}
    	// Wir haben eine Auflösung größer als 1024 x 768, das Fenster wird also kleiner als der Bildschirm
    	else
    	{
    		m_pMainWnd->ShowWindow(SW_SHOWNORMAL); // Soll eigentlich 1024 x 768 gross sein!!!
    	}
    
    	// Das Hauptfenster ist initialisiert und kann jetzt angezeigt und aktualisiert werden.
    	m_pMainWnd->UpdateWindow();
    
    	return TRUE;
    }
    

    Die Größenfestlegung passiert dann da, wo du deinen Quellcode bisher hast. 🙂



  • War ein guter Tipp, funktioniert jetzt genau wie ich es wollte!

    Schönen Dank 🙂


Log in to reply