Schliessen eines CView (CFormView) verhindern



  • Hallo

    ich wollte eine Messagebox anzeigen wenn der Benutzer das X betätigt.
    Hab mal eine PreTranslateMessage in den View eingefügt und warte auf WM_CLOSE
    bzw. WM_DESTROY beide kamen nicht.

    Dann hab ich es in dem ChildFrame versucht doch da kamen die beiden Messages auch nicht.

    BOOL CChildFrameTempControlView::PreTranslateMessage(MSG* pMsg) 
    {
    	switch(pMsg->message){
    	case WM_CLOSE:
    		TRACE("Ich will schliessen\n");
    		return true; // verwirft den Befehl
    		break;
    	case WM_DESTROY:
    		TRACE("Ich werde zerstört \n");
    	}
    	return CMDIChildWnd::PreTranslateMessage(pMsg);
    }
    

    Warum funkts dat nicht 😡



  • Du musst die Message WM_SYSCOMMAND mit wParam=SC_CLOSE direkt verarbeiten und nicht an die DefWndProc weiterleiten



  • Danke Rene war ein guter Tip

    jetzt verwende ich diesen Code und es klappt

    void CChildFrameTempControlView::OnSysCommand( UINT nID, LPARAM lParam )
    {
       BOOL bCallBase = TRUE;
       if ((nID & 0xFFF0) == SC_CLOSE)
           if(AfxMessageBox("Schliessen?",MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2  )==IDNO) 
    		   bCallBase = false;
    
       if (bCallBase)
          CMDIChildWnd::OnSysCommand(nID, lParam);
    }
    

    Aber warum bekommt nur der Rahmen die Nachricht und nicht der View? Gehört das X nicht mehr zum View?



  • Meines Wissens nach gehört der Rahmen mit den Schließen-/Minimieren-/Maximieren-Schaltflächen ebensowenig zur View wie die Menü- und Symbolleisten und die Statusleiste.

    Gruß, seppelina


Anmelden zum Antworten