dialog maximieren
-
Hallo zusammen,
ich habe eine SDI-Anwendung, in der eine CPropertySheet erzeugt wird. Ich möchte nun dass das CPropertySheet zu Anfang des Programms genau in das Darstellungsfenster passt.
Ich dachte mir nun, dass dies einfach möglich ist, indem man die Bildschirmauflösung bestimmt und davon die Höhe der Symbolleiste und der Statusleiste abziehen muss. Kennt jemand vielleicht die Befehle, um die Höhe der Sysmbolleisten und der Statusleisten zu bestimmen?
Danke
-
Nimm doch GetClientRect.
-
hi..das habe ich auch gemacht..der code sieht zur bearbeitung der propertysheet sieht folgendermaßen aus:
void CRegSheet::ChangeSizeAndPos(CWnd* pParentWnd = NULL) { CRect Reg1Rect; CRect ParentRect,StatusBarRect,MenuRect; GetClientRect(Reg1Rect); CStatusBar* pStatusBar = (CStatusBar*) pParentWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR); //AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR); pParentWnd->GetClientRect(ParentRect); pStatusBar->GetClientRect(StatusBarRect); MoveWindow(Reg1Rect.left , Reg1Rect.top+50, ParentRect.Width(), ParentRect.Height()-StatusBarRect.Height(), TRUE); }bin noch am testen also ist der code noch nicht perfekt.
Diese Funktion wird foldermaßen aufgerufen:
m_pPropertySheet->ChangeSizeAndPos(m_pMainWnd);wie man oben sieht habe ich vertikale verschiebung des CRegsheet manuell gemacht:
MoveWindow(Reg1Rect.left , Reg1Rect.top**+50**, ParentRect.Width(),
ParentRect.Height()-StatusBarRect.Height(), TRUE);Dort würde ich aber gerne die Höhe der Menüleiste + Infoleiste hinbekommen. Jemand eine Idee?
Danke nochmals..
-
Bestimme einfach den aktuellen Overhead indem Du die Weiten von GetClientRect und GetWindowRect des Parents subtrahierst. Dann nimmst Du die gewünschte Größe und schlägst die Differenz daruf...
-
Martin Richter schrieb:
Bestimme einfach den aktuellen Overhead indem Du die Weiten von GetClientRect und GetWindowRect des Parents subtrahierst. Dann nimmst Du die gewünschte Größe und schlägst die Differenz daruf...
Hi Martin,
habe das mal versucht was du vorgeschlagen hast. Der Code hatte außerdem einen Fehler so dass er nun folgendemaßen aussieht:
void CRegSheet::ChangeSizeAndPos(CWnd* pParentWnd = NULL)
{
CRect ParentCRect,StatusBarRect,MenuRect,ParentWRect;
CStatusBar* pStatusBar = (CStatusBar*)
pParentWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);
pParentWnd->GetClientRect(ParentCRect);
pParentWnd->GetWindowRect(ParentWRect);
long menuHeight = ParentWRect.Height() - ParentCRect.Height();
FILE* test;
test = fopen("test.dat","w");fprintf(test, "länge ist %l\n", menuHeight);fclose(test);
pStatusBar->GetClientRect(StatusBarRect);
this->MoveWindow(ParentCRect.left , ParentWRect.top + menuHeight, ParentCRect.Width(),
ParentCRect.Height()-StatusBarRect.Height(), TRUE);
}jedoch wird in die Datei "test" nur "Länge ist " geschrieben, also kein Wert. Ausserdem ist immer noch zwischen der Menüleiste und dem CPropertySheet eine kleine Lücke. Rein programmiertechnisch sollte es doch möglich sein, direkt unter der Menüleiste ein CPropertySheet anzubringen. Also was mach ich falsch???
-
kayserili80 schrieb:
fprintf(test, "länge ist %l\n", menuHeight);
%l kannst du nicht alleine verwenden. Du musst für deinen Fall %ld nehmen.
Zum Nachschlagen für die ganzen Format Anweisungen ist
http://www.cplusplus.com/reference/clibrary/cstdio/fprintf.html
sehr gut.
-
Du hast gar niht versucht es so zu machen...
Wo sehe ich dass Du die Differenz zwischen Window und Client ermittelst?
-
Martin Richter schrieb:
Du hast gar niht versucht es so zu machen...
Wo sehe ich dass Du die Differenz zwischen Window und Client ermittelst?
Hi Martin,
hier ermittel ich doch den Unterschied:
long menuHeight = ParentWRect.Height() - ParentCRect.Height();Oder habe ich dich falsch verstanden?