RichEditFeld der Fenstergröße anpassen

Konsumierer

Mitglied
Hallo!

Ich habe in meinem Programm zwei RichEdit Felder, die den Inhalt zweier Dateien anzeigen.
Beim Maximieren des Fensters sollen diese Felder entsprechend vergrößert werden.
Kann mir da jemand einen Tipp geben?

Grüße, Konsumierer
 
OK, nach langem Ausprobieren hab ich's jetzt selber geschafft:

Code:
void CCompareDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	if (IsZoomed())
	{
		RECT rectDlg;
		GetClientRect(&rectDlg);
		(CRichEditCtrl*) GetDlgItem(IDC_RICHEDIT_FILE1)->SetWindowPos(GetWindow(GW_OWNER),14,100,(rectDlg.right)/2-19,(rectDlg.bottom - 110),SWP_SHOWWINDOW);
		(CRichEditCtrl*) GetDlgItem(IDC_RICHEDIT_FILE2)->SetWindowPos(GetWindow(GW_OWNER),(rectDlg.right)/2+8,100,(rectDlg.right)/2-19,(rectDlg.bottom - 110),SWP_SHOWWINDOW);
	}
}

Edit: Jetzt habe ich noch ein Problem. Wenn ich das Fenster wieder "entmaximiere" behalten die Felder ihre Größe.
Wenn ich aber die Abfrage
Code:
if (IsZoomed())
weglasse, bekomme ich beim Programmstart einen Fehler "read konnte nicht auf dem Speicher ausgeführt werden".

Was kann ich da machen?
 
Zuletzt bearbeitet:
Du machst folgendes:

Du lässt das "if( IsZoomed())" weg und änderst deinen Code wie folgt:

Code:
void CCompareDlg::OnSize(UINT nType, int cx, int cy) 
     {
     	CDialog::OnSize(nType, cx, cy);
     
     	RECT rectDlg;
     	CRichEditCtrl *pWnd = NULL;
     	GetClientRect(&rectDlg);
     
     	pWnd = (CRichEditCtrl*) GetDlgItem(IDC_RICHEDIT_FILE1);
 	if (pWnd) pWnd->SetWindowPos(GetWindow(GW_OWNER),14,100,(rectDlg.right)/2-19,(rectDlg.bottom - 110),SWP_SHOWWINDOW);
     	pWnd = (CRichEditCtrl*) GetDlgItem(IDC_RICHEDIT_FILE2);
 	if (pWnd) pWnd->SetWindowPos(GetWindow(GW_OWNER),(rectDlg.right)/2+8,100,(rectDlg.right)/2-19,(rectDlg.bottom - 110),SWP_SHOWWINDOW);
     }
Das bewirkt, das du den Zeiger, bevor du auf seine Methoden zugreifst, auf Gültigkeit prüfts - ist eigentlich immer zu empfehlen.

Ausserdem könntest du auch statt SetWindowPos(...) MoveWindow(...) benutzen, da das ein bischen einfacher ist.
Ich werd mal ein Ausschnitt aus der MSDN posten :

Parameters

nType Specifies the type of resizing requested. This parameter can be one of the following values:



  • SIZE_MAXIMIZED Window has been maximized.
  • SIZE_MINIMIZED Window has been minimized.
  • SIZE_RESTORED Window has been resized, but neither SIZE_MINIMIZED nor SIZE_MAXIMIZED applies.
  • SIZE_MAXHIDE Message is sent to all pop-up windows when some other window is maximized.
  • SIZE_MAXSHOW Message is sent to all pop-up windows when some other window has been restored to its former size.
cx Specifies the new width of the client area. cy Specifies the new height of the client area.
Das bedeutet z.B., das du die Clientgrösse schon als Paramter bekommst und nicht erst über GetClientRect(...) holen musst ^__^ (falls du die MSDN, hast lohnt es sich ab und zu mal rein zu schaun)


M.f.G. Erik
 
Zuletzt bearbeitet:
Oh - Tschuldigung. Das habe ich wohl in einer ungünstigen Reinfolge gepostet.
Die Parameterliste ist von OnSize(..) nicht von MoveWindow(..)

M.f.G. Erik
 
Achsoooo....
Jetzt hab ich auch endlich gecheckt was du damit meintest, dass ich Clientgröße als Parameter übergeben bekomme. Hätt mir können auch selber auffallen ;-)

Jetzt hab ich Hunger und will heim!
 
Zurück