Child fenster in sdi maximieren



  • Hallo zusammen,

    habe folgendes Problem: In einer SDI Anwendung will ich ein Tochterfenster erzeugen. Dieses soll beim Start so gross sein wie das Ansichtsfenster.
    Dazu habe ich in die Mainframe.h folgende Zeilen ergänzt:

    // Attribute
    public:
        CGeneral m_General;
    

    In der OnCreate der Mainframe erzeuge ich dann das Tochterfenster mit:
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

    {
    	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    		return -1;
    
    	if (!m_wndStatusBar.Create(this) ||
    		!m_wndStatusBar.SetIndicators(indicators,
    		  sizeof(indicators)/sizeof(UINT)))
    	{
    		TRACE0("Fehler beim Erstellen der Statusleiste.\n");
    		return -1;      // Fehler beim Erstellen
    	}
        CRect ParentRect;
        this->GetClientRect(ParentRect);
        m_General.Create(NULL,_T("MyChild1"),WS_CHILD|WS_VISIBLE,
            CRect(0,0,ParentRect.Width(),ParentRect.Height()),this,1,NULL);
        m_General.SetWindowPos(&wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
    
    	return 0;
    }
    

    Die Anwendung erzeugt mir zwar mein Tochterfenster jedoch deckt es gerade mal 3/4 des Ansichtsfensters ab. Weiss jemand vielleicht was ich falschm mache?

    Danke..



  • Was ist denn CGeneral für ein Typ? 😃



  • hi connan,

    CGeneral ist ein CWnd.



  • Dann sollte es eigentlich funktionieren. Passt du vieleicht die Größe des Mainframes später noch an?



  • hi connan,

    angeregt durch deinen Tip habe ich versucht mal das Childfenster am Ende der Initinstance zu erzeugen.

    m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
        CMainFrame* pMainWnd = (CMainFrame*) m_pMainWnd;
        m_pMainWnd->UpdateWindow();
        CRect ParentRect;
        pMainWnd->GetClientRect(ParentRect);
        pMainWnd->m_General.Create(NULL,_T("MyChild1"),WS_CHILD|WS_VISIBLE,
            CRect(0,0,ParentRect.Width(),ParentRect.Height()),pMainWnd,1,NULL);
        pMainWnd->m_General.SetWindowPos(&CWnd::wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
    

    So klappt es auch. D.h. die Mainframe wurde irgendwie noch verändert.

    Vielen Dank!


  • Mod

    Du solltest die Größenänderunen an dieser Stelle gar nicht machen.
    Reagiere auf WM_SIZE in dem äußeren Fensterund passe auf diese Nachricht hin, das innere Fenster an.


Anmelden zum Antworten