OnSize gibt für cx bzw cy jeweils 0 zurück??
-
Hallo Leute,
bin grad bischen am rumspielen mit meine SDI anwendung (ohne Doc/view) prinzip..
Nun hab ich eine CListBox in der CChildview eingefügt, und es wird auch angezeigt. nun will ich die größe der Listbox entsprechende der CChildview fenstergröße anpassen aber:
void CChildView::OnSize(UINT nType,int cx ,int cy){ //CRect rc; //GetWindorectRect(&rc); m_lbReport.SetWindowPos(this,0,0,200,200,SWP_SHOWWINDOW); }gibt mir bey cx, cy immer 0 zurück, wenn ich GetWindowRect mache bekomm ich auch bei height und width 0 zurück.. ? warum..
in der Paint Methode
void CChildView::OnPaint() { CPaintDC dc(this); // Gerätekontext zum Zeichnen CRect rc; GetWindowRect(&rc); dc.Rectangle(0,0,rc.Width(),rc.Height()); CSize o= dc.GetTextExtent("HALLO WELT"); dc.TextOut((rc.Width()/2)-(o.cx/2),(rc.Height()/2) - (o.cy/2),"HALLO WELT"); // TODO: Fügen Sie hier Ihren Nachrichtenbehandlungscode ein. // Rufen Sie nicht CWnd::OnPaint() für Nachrichten zum Zeichnen auf }funktioniert das mit dem GetWindowRect ja auch..

-
Weil das Fenster bene keine Ausdehnug hat! OnSize wird recht haben!
1. Es macht keinen Sinn GetWindowRect in WM_PAINT zu verwenden! Denn Koordinaten die schließen FRame und Caption mit ein.
2. Verwende in einem View niemals OnPaint, sondern immer OnDraw!
-
servus Martin,
ja aber das lustige ist ja, das die OnPaint methode autoamtisch über en wizard eingefügt wurde das war ich net:) ! Aber wie kann ich es dennnoch erreicht, das ich meine konstrol im CChildView dynamisch der Größe anpassen kann? gar nicht?
OHH... das ja von CWnd abgeleitet nich von CView sorry... aber trozdem muss das doch mit dem reszie gehen...! wenn ich in OnPaint einen Rechtecke über die GRöße der fesnter GetWindowRect zeichne passt es sich automatisch an wenn ich bspw. das toolbar rauszieh und wieder andock (so wie ich es eigentlich möchte)-..
-
Dein Frame ist dafür verantwortlich. Bei SDI Anwendungegn geschieht dies automatisch. Entweder macht esdas Parent Frame oder eben das Splitter Windows. Wer erzeugt Deinen View?
Wenn ein View erzeugt wird, wird garantiert nicht OnPaint erzeugt. Kannst Du mir nicht erzählen
!
-
ja martin , das CCliendView ist kein Cview , sonder ein Cwnd fenster das in den clientbereich gezeichnet wird sorry;) Meine CMainFrame klasse erzeugt das das CClientviewm und auch das toobar und status bar...! Wie kann ich das denn dann tun? damit OnSize funktioniert?
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // Ansicht erstellen, um den Clientbereich des Rahmens zu belegen if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) { TRACE0("Ansichtsfenster konnte nicht erstellt werden\n"); return -1; } if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Symbolleiste konnte nicht erstellt werden\n"); return -1; // Fehler bei Erstellung } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Statusleiste konnte nicht erstellt werden\n"); return -1; // Fehler bei Erstellung } // TODO: Löschen Sie diese drei Zeilen, wenn Sie nicht möchten, dass die Systemleiste andockbar ist m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); return 0; }
-
Durch die ID AFX_IDW_PANE_FIRST weiß das Frame was es mit diesen Child WIndow zu tun hat.
Kann es sein dass Du OnSize im CMainFrame manipuliert hast?
-
nein.. da hab ich nichts gemacht, die OnSize Methode ist da auch nicht implementiert.. er springt mir, wenn ich die fenster größe veränder auch in die OnSize methode des CChildVies, wobei halt cx,cy Null sind??? probierst mal aus.. wirds dann sehen..
-
BorisDieKlinge schrieb:
probierst mal aus.. wirds dann sehen..
... jetzt habe ich es ausprobiert und ich weiß eigentlich nicht warum.
- SDI Applikation erzeugt.
- Nur OnPaint überschieben:void CChildView::OnPaint() { CPaintDC dc(this); // device context for painting CRect rect; GetClientRect(rect); dc.DrawText(_T("TEST"),rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE); }- Autosize alles OK!
-
... und um ganz sicher zu gehen:
void CChildView::OnSize(UINT nType, int cx, int cy) { TRACE(__FUNCTION__ "nType=%d, cx=%d, cy=%d\n", nType, cy, cy); CWnd::OnSize(nType, cx, cy); }Ausgabe:
CChildView::OnSizenType=0, cx=419, cy=419 CChildView::OnSizenType=0, cx=423, cy=423 CChildView::OnSizenType=0, cx=427, cy=427 CChildView::OnSizenType=0, cx=429, cy=429 CChildView::OnSizenType=0, cx=429, cy=429
-
hää
nur die zeile
CWnd::OnSize(nType, cx, cy);soll da helfen? ich bekommen 0,0,0,0,0,0,0,0........
:schland:in OnPaint simmt die größe mit GetWindowRect , in OnSize nich mehr

-
Dann zeige einfach mal mehr Code.
Ichbin genau nach Deiner Anleitung vorgegangen ud es geht.
Ansonsten hast Du eben <zensiert>...</zensiert> gebaut...