In OnInitDlg ist der Dlg nicht da
-
Hab ein untergeordneten Dialog mit einem CTabCtrl. Nun will ich in OnInitDialog das TabCtrl richtig ausrichten. Aber irgenwie ist der Dlg nie da?
////////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// BOOL CUntergeordneterTabDlg::OnInitDialog() { ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// BOOL bReturn = CDialog::OnInitDialog(); ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// ShowWindow(SW_SHOW); if(!IsWindowVisible()) return(false); // hier geht immer alles zuende CRect recClientFrame; GetClientRect(recClientFrame); ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// if(m_CtrlHaubtTab.IsWindowVisible()) m_CtrlHaubtTab.MoveWindow(recClientFrame); ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// }
-
OnInitDialog wird vor dem Anzeigen des Dialogfelds aufgerufen.
-
Und welche Funktion wird nach dem Zeichnen aufgerufen?
-
Ich dachte immer das genau bei "CDialog::OnInitDialog();" der Dialog gezeichnet wird.
Und alles was davor ist, ist noch nicht da. Und ab daan ist er sichtbar?
Wie heißt dann bitte die Message beim aller ersten Zeichnen.
Oder Muß ich da in OnPaint arbeiten und mir dann einfach ein static bool für das erstemal erstellen?
-
Lass doch einfach das IsWindowVisble weg.
-
@Nemesyzz
Das hab ich dahin gesetzt, da ansonsten alles abstürtzt. Ohne geht nicht

////////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// BOOL CUntergeordneterTabDlg::OnInitDialog() { ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// BOOL bReturn = CDialog::OnInitDialog(); ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// ShowWindow(SW_SHOW); CRect recClientFrame; GetClientRect(recClientFrame); ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// m_CtrlHaubtTab.MoveWindow(recClientFrame); // Ausnahmefehler tritt nun hier auf, da es ja diesen Steuerelement noch nicht gibt ////////////////////////////////////////////////////////\\/////////////////////////////////////////////////////////////// }
-
Hi!
Überschreibe die OnSize()-Funktion des Dialogs.
... if(m_TabCtrl.GetSafeHwnd()) { // GetClientRect() / MoveWindow() etc. } ...GetSafeHwnd() ist wichtig, da schon vor OnInitDialog() etliche
Size-Messages verschickt werden (je nach Windows unterschiedlich viele).Ansonsten schau dir mal die GUILayoutLib unter www.akinstaller.de
an (Freeware), möglicherweise nimmt die dir schon viel Arbeit ab.
-
Nein. In OnInitDialog nach sind alle Childs schon erstellt. Du benutzt m_TabCtrl doch hoffentlich erst
nach CDialog::OnInitDialog.