PreCreateWindow
-
PreCreateWindow(...) wird vor(!) der Anzeige des Fensters aufgerufen. Die Anzeige selbst läuft über ShowWindow(...).
Funktion der Elternklasse: Implementierung in winfrm.cpp
-
Man kann an allem rumschrauben, was cs hergibt
Ja, an allem eben nicht, zumindest hats bei mir nicht funktioniert. Wenn ich nämlich für cs.style unter anderem WS_MINIMIZE angebe, so hat dies keine Wirkung. (Das selbe gilt für WS_MAXIMIZE)
Genau Das hat mich ja gewundert, da es ja EIGENTLICH gehen sollte.
-
Hm, bei mir gehts ...
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; cs.style |= WS_MAXIMIZE; return TRUE; }
-
@ReneG
Hab den Code mal GENAU so übernommen, wie du ihn da abgetippt hast.. udnes bringt bei mir REIN GAR NIX
-
Zeig mal die Ecke um ShowWindow(...).
-
BOOL CAsdfApp::InitInstance() { AfxEnableControlContainer(); // Standardinitialisierung // Wenn Sie diese Funktionen nicht nutzen und die Größe Ihrer fertigen // ausführbaren Datei reduzieren wollen, sollten Sie die nachfolgenden // spezifischen Initialisierungsroutinen, die Sie nicht benötigen, entfernen. #ifdef _AFXDLL Enable3dControls(); // Diese Funktion bei Verwendung von MFC in gemeinsam genutzten DLLs aufrufen #else Enable3dControlsStatic(); // Diese Funktion bei statischen MFC-Anbindungen aufrufen #endif // Ändern des Registrierungsschlüssels, unter dem unsere Einstellungen gespeichert sind. // ZU ERLEDIGEN: Sie sollten dieser Zeichenfolge einen geeigneten Inhalt geben // wie z.B. den Namen Ihrer Firma oder Organisation. SetRegistryKey(_T("Local AppWizard-Generated Applications")); LoadStdProfileSettings(); // Standard INI-Dateioptionen laden (einschließlich MRU) // Dokumentvorlagen der Anwendung registrieren. Dokumentvorlagen // dienen als Verbindung zwischen Dokumenten, Rahmenfenstern und Ansichten. CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CAsdfDoc), RUNTIME_CLASS(CMainFrame), // Haupt-SDI-Rahmenfenster RUNTIME_CLASS(CAsdfView)); AddDocTemplate(pDocTemplate); // Befehlszeile parsen, um zu prüfen auf Standard-Umgebungsbefehle DDE, Datei offen CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // Verteilung der in der Befehlszeile angegebenen Befehle if (!ProcessShellCommand(cmdInfo)) return FALSE; // Das einzige Fenster ist initialisiert und kann jetzt angezeigt und aktualisiert werden. m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE; }
Ist halt der unveränderte, vom Assistenten erstellte Code.
[ Dieser Beitrag wurde am 10.10.2002 um 18:00 Uhr von DerGhost editiert. ]
-
Hier gibt es die Version mit Darstellung 1/n screensize:
(bei Dir n=1 für Vollbild)BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { // Erstellen eines Fensters ohne min-/max-Schaltflächen oder größenveränderbaren Rahmen cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER ; // Verändern der Fenstergröße auf 1/n der Bildschirmgröße und anschließendes Zentrieren int n = 1; cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / n; cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / n; cs.y = ((cs.cy * n) - cs.cy) / 2; cs.x = ((cs.cx * n) - cs.cx) / 2; // Aufruf der Basisklassenversion return CFrameWnd::PreCreateWindow(cs); }
[ Dieser Beitrag wurde am 10.10.2002 um 22:06 Uhr von Erhard Henkes editiert. ]
-
Diese "Notlösung" war mir schon klar.. trotzdem danke. Was aber bleibt, ist die Frage nach dem WS_MINIMIZE... das kann ich auf diesem Wege ja nicht "simulieren".
[ Dieser Beitrag wurde am 11.10.2002 um 00:18 Uhr von DerGhost editiert. ]
-
'tschuldigung ...
hab noch mal im vom Assistenten erstellten Code nachgeschaut ...Da steht unter InitInstance noch folgendes:
// Das einzige Fenster ist initialisiert und kann jetzt angezeigt und aktualisiert werden. m_pMainWnd->ShowWindow(SW_SHOWMINIMIZED); m_pMainWnd->UpdateWindow();
Hast Du ja auch schon rausgefunden. Der Punkt ist folgender. Das Fenster wird nicht sichtbar erstellt und einige Initialisierungsarbeit geleistet. Das heisst, hier würde zwar WS_MINIMIZE ansprechen, da das Fenster aber nicht sichtbar ist, hat es keinen Effekt.
Dann folgt erst in InitInstance das ShowWindow ... und das überschreibt WS_MINIMIZE !!!Normal erstellt man das Fenster, so dass es gleich sichtbar ist, und dann greift auch PreCreateWindow ordentlich. Da die Erfahrung der Microsoft-Leute allerdings ist, dass es komisch aussieht, wenn sich das Fenster während der Applikations-Initialisierung ganz langsam aufbaut, hat man es gleich versteckt, und ruft ShowWindow später auf!
[ Dieser Beitrag wurde am 11.10.2002 um 08:17 Uhr von RenéG editiert. ]
-
ok, DANKE an euch alle, habs kapiert!