brauche hilfe bei meinem programm um dialog fenster neu zuzeichnen



  • hi

    ich will ein dialogfenster mit einem recheck im ersten quadraten haben. das habe ich auch.

    wenn ich das projekt in der normalen oder direkt in der maximalen fenster groesse starte, berechnet es mir dann alles richtig.

    meine problem ist es

    wenn ich von der normalen fenstergrosse mit dem maximierbutton oben recht in den maximierten welchsele, mir dann ein maximiertes fenster gibt aber der inhalt wurde nicht mitgenommen. ich braeuchte da jetzt einen befehl der es neu berechnet.

    void SetSmallFont(CDC *dc);
    
    CFont m_ScaleFont;
    CFont m_YTitleFont;
    
    CRect m_Coordinate;
    CRect m_ClientRect;
    
    CPoint m_CoRect;	
    CPoint m_ClientHalfSide;
    CPoint m_Border;
    
    BOOL CTestDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    	int nBreite, nHoehe;
    
    	nBreite = m_ClientHalfSide.x;
    	nHoehe = m_ClientHalfSide.y;
    
    	// OK-Button variable der Auflösung anzeigen 
    	CRect CBtnRect;
    
    	CButton *pOK = (CButton*)GetDlgItem(IDOK); 
    	CButton *pCANCEL = (CButton*)GetDlgItem(IDCANCEL); 
    
    	// Maße des Buttons ermitteln 
    	pOK->GetWindowRect(CBtnRect);
    
    	// Ermittelte Koordinaten bzw Maße umwandeln 
    	ScreenToClient(&CBtnRect);
    
    		pOK->MoveWindow(nBreite + CBtnRect.Width(), nHoehe,  
    			CBtnRect.Width(), CBtnRect.Height(), TRUE); 
    		pCANCEL->MoveWindow(nBreite + CBtnRect.Width(), nHoehe/2,  
    			CBtnRect.Width(), CBtnRect.Height(), TRUE); 
    
    	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
    }
    
    void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    	{
    		CAboutDlg dlgAbout;
    		dlgAbout.DoModal();
    	}
    	else
    	{
    		CDialog::OnSysCommand(nID, lParam);
    	}
    }
    
    // Wollen Sie Ihrem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie 
    //  den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das 
    //  Dokument/Ansicht-Modell verwenden, wird dies automatisch für Sie erledigt.
    
    void CTestDlg::OnPaint() 
    {
    	CPaintDC dc (this); 
    
    	GetClientRect (&m_Coordinate);    
    
    	dc.SetMapMode (MM_ANISOTROPIC);
    	dc.SetWindowExt (m_ClientRect.right, m_ClientRect.bottom); 
    
    	dc.SetViewportExt (m_ClientRect.right, -m_ClientRect.bottom); 
    	dc.SetViewportOrg (0, m_ClientRect.bottom/2); 
    	dc.SetBkMode(TRANSPARENT);
    
    	dc.TextOut (m_Border.x, m_ClientHalfSide.y - m_Border.y/2, CString (_T ("Diagramm 1")));	
    
    	SetSmallFont(&dc);
    	CFont* pOldFont = dc.SelectObject(&m_YTitleFont);	
    	dc.TextOut (m_Border.x/16, m_ClientHalfSide.y/2 - m_Border.y/2, CString (_T ("Y-Achse")));
    	dc.SelectObject(pOldFont);
    	m_YTitleFont.DeleteObject();
    
    	dc.TextOut (m_ClientHalfSide.x/2 - m_Border.x/2, m_Border.y/2, CString (_T ("X-Achse")));
    	dc.Rectangle (m_Border.x, m_Border.y, m_CoRect.x, m_CoRect.y);
    	m_ScaleFont.DeleteObject();
    }
    
    int CTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    	if (CDialog::OnCreate(lpCreateStruct) == -1)
    		return -1;
    
    //	wenn man es mit showmaximaized startet berechnet er alles richtig!!!
    
    //	this->ShowWindow(SW_SHOWMAXIMIZED);	
    
    	CClientDC dc (this); 
    	GetClientRect (&m_ClientRect);
    
     	m_ClientHalfSide.x = m_ClientRect.right/2;
    	m_ClientHalfSide.y = m_ClientRect.bottom/2; 
    
    	m_Border.x = m_ClientRect.right/18;
    	m_Border.y = m_ClientRect.bottom/18;
    
    	m_CoRect.x = m_ClientHalfSide.x - m_Border.x;
    	m_CoRect.y = m_ClientHalfSide.y - m_Border.y;  
    
    	// TODO: Speziellen Erstellungscode hier einfügen
    
    	return 0;
    }
    
    void CTestDlg::SetSmallFont(CDC *dc)
    {
    	// Schriftart für die Achsenbeschriftung
    	m_ScaleFont.CreatePointFont(85,_T("Tahoma"),dc);
    	dc->SelectObject(&m_ScaleFont);
    
    	LOGFONT lf;
    
    	::ZeroMemory (&lf, sizeof (lf));
    	lf.lfHeight = 85;
    	lf.lfEscapement = -900;
    	::lstrcpy (lf.lfFaceName,_T("Tahoma"));	
    
    	m_YTitleFont.CreatePointFontIndirect(&lf);
    }
    


  • invalidate?



  • hmm

    der befehl muesste der richtige sein aber es funktioniert nicht???

    habe den befehl in OnSize eingefuegt

    kann mir da jemand helfen?


Anmelden zum Antworten