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?