<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Neu: SDI-App: zentriert starten (nicht mehr dialogfeldbasiert)]]></title><description><![CDATA[<p>Edit:</p>
<p>Das Problem bei der dialogfeldbasierten Applikation hat sich erledigt; jetzt ist die Frage, wie das bei einem Doc/View-Programm (SDI) funktioniert (siehe weiter unten...)</p>
<p>Hallo,</p>
<p>ich möchte eine dialogbasierte MFC-App beim Start in der Mitte des Bildschirms anzeigen.<br />
Ich dachte, ich lese aus den Systemmetrics die Auflösung heraus und schiebe das Dialogfenster mit MoveWindow an die passende Stelle.</p>
<p>Nur: an welcher Stelle soll ich dieses Verschieben einbauen??</p>
<p>Probiere ich es in der OnInitDialog:</p>
<pre><code class="language-cpp">BOOL CZentriertTestDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Hinzufügen des Menübefehls &quot;Info...&quot; zum Systemmenü.

	// IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
	ASSERT((IDM_ABOUTBOX &amp; 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX &lt; 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{	
			pSysMenu-&gt;AppendMenu(MF_SEPARATOR);
			pSysMenu-&gt;AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden

	// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen

	// BIS HIERHER: Assistenten-Gruschd, ab hier soll verschoben werden
	LPRECT lpRect;
	this-&gt;GetWindowRect(lpRect);
	int Breite = lpRect-&gt;right-lpRect-&gt;left;
	int Hoehe = lpRect-&gt;top-lpRect-&gt;bottom;
	this-&gt;MoveWindow(0,0,Breite,Hoehe);

	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}
</code></pre>
<p>dann steigt das schon bei <strong>this-&gt;GetWindowRect(lpRect);</strong> aus.<br />
this hat aber schon einen Wert und ein m_hWnd, somit solte das Fenster an dieser Stelle doch schon existieren, oder?</p>
<p>Wo liegt hier mein großer Denkfehler???</p>
<p>Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/142143/neu-sdi-app-zentriert-starten-nicht-mehr-dialogfeldbasiert</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 04:35:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/142143.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Mar 2006 08:38:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Neu: SDI-App: zentriert starten (nicht mehr dialogfeldbasiert) on Thu, 30 Mar 2006 07:26:42 GMT]]></title><description><![CDATA[<p>Edit:</p>
<p>Das Problem bei der dialogfeldbasierten Applikation hat sich erledigt; jetzt ist die Frage, wie das bei einem Doc/View-Programm (SDI) funktioniert (siehe weiter unten...)</p>
<p>Hallo,</p>
<p>ich möchte eine dialogbasierte MFC-App beim Start in der Mitte des Bildschirms anzeigen.<br />
Ich dachte, ich lese aus den Systemmetrics die Auflösung heraus und schiebe das Dialogfenster mit MoveWindow an die passende Stelle.</p>
<p>Nur: an welcher Stelle soll ich dieses Verschieben einbauen??</p>
<p>Probiere ich es in der OnInitDialog:</p>
<pre><code class="language-cpp">BOOL CZentriertTestDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Hinzufügen des Menübefehls &quot;Info...&quot; zum Systemmenü.

	// IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
	ASSERT((IDM_ABOUTBOX &amp; 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX &lt; 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{	
			pSysMenu-&gt;AppendMenu(MF_SEPARATOR);
			pSysMenu-&gt;AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden

	// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen

	// BIS HIERHER: Assistenten-Gruschd, ab hier soll verschoben werden
	LPRECT lpRect;
	this-&gt;GetWindowRect(lpRect);
	int Breite = lpRect-&gt;right-lpRect-&gt;left;
	int Hoehe = lpRect-&gt;top-lpRect-&gt;bottom;
	this-&gt;MoveWindow(0,0,Breite,Hoehe);

	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}
</code></pre>
<p>dann steigt das schon bei <strong>this-&gt;GetWindowRect(lpRect);</strong> aus.<br />
this hat aber schon einen Wert und ein m_hWnd, somit solte das Fenster an dieser Stelle doch schon existieren, oder?</p>
<p>Wo liegt hier mein großer Denkfehler???</p>
<p>Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1025299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1025299</guid><dc:creator><![CDATA[AndRo67]]></dc:creator><pubDate>Thu, 30 Mar 2006 07:26:42 GMT</pubDate></item><item><title><![CDATA[Reply to Neu: SDI-App: zentriert starten (nicht mehr dialogfeldbasiert) on Tue, 28 Mar 2006 08:43:52 GMT]]></title><description><![CDATA[<p>Sachen, die das Dialogfenster betreffen, funktionieren komischerweise in der OnInitDialog nicht.<br />
Ich kenne das von ShowWindow und habe da einen einfachen Workaround: Mach einen Timer mit Zeit 1, wo du dann die Position setzt und dann den Timer killst. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1025304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1025304</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Tue, 28 Mar 2006 08:43:52 GMT</pubDate></item><item><title><![CDATA[Reply to Neu: SDI-App: zentriert starten (nicht mehr dialogfeldbasiert) on Tue, 28 Mar 2006 08:57:03 GMT]]></title><description><![CDATA[<p>Danke, so klappts... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
(Warum auch immer...)</p>
<p>Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1025317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1025317</guid><dc:creator><![CDATA[AndRo67]]></dc:creator><pubDate>Tue, 28 Mar 2006 08:57:03 GMT</pubDate></item><item><title><![CDATA[Reply to Neu: SDI-App: zentriert starten (nicht mehr dialogfeldbasiert) on Tue, 28 Mar 2006 13:16:55 GMT]]></title><description><![CDATA[<p>Nur mal ganz hypothetisch (ich hab's bisher noch nicht gebraucht, aber wer weiß...):<br />
Wo sollte man das in einer Doc/View-Anwendung unterbringen? In der CMainFrame-Klasse? Und in welchem Handler dort? So etwas wie InitDialog oder OnInitialUpdate scheint es ja nicht zu geben. Oder auch am Besten wie hier ber einen Timer? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke,<br />
Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1025512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1025512</guid><dc:creator><![CDATA[AndRo67]]></dc:creator><pubDate>Tue, 28 Mar 2006 13:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to Neu: SDI-App: zentriert starten (nicht mehr dialogfeldbasiert) on Tue, 28 Mar 2006 13:45:38 GMT]]></title><description><![CDATA[<p>PreCreateWindow ist der Platz. Über den Parameter kannst du so einiges einstellen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1025555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1025555</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Tue, 28 Mar 2006 13:45:38 GMT</pubDate></item><item><title><![CDATA[Reply to Neu: SDI-App: zentriert starten (nicht mehr dialogfeldbasiert) on Tue, 28 Mar 2006 15:19:27 GMT]]></title><description><![CDATA[<p>PreCreateWindow also... nie gehört und bisher auch noch nie gebraucht, soweit ich weiß.<br />
Aber wenn ich das mal brauche, weiß ich jetzt jedenfalls Bescheid <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
(falls nicht, wird mir hier ja jederzeit geholfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> )</p>
<p>Danke,<br />
Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1025654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1025654</guid><dc:creator><![CDATA[AndRo67]]></dc:creator><pubDate>Tue, 28 Mar 2006 15:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to Neu: SDI-App: zentriert starten (nicht mehr dialogfeldbasiert) on Tue, 28 Mar 2006 16:52:19 GMT]]></title><description><![CDATA[<p>Das wird automatisch miterstellt und der Kommentar sagt dir schon einiges. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1025715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1025715</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Tue, 28 Mar 2006 16:52:19 GMT</pubDate></item><item><title><![CDATA[Reply to Neu: SDI-App: zentriert starten (nicht mehr dialogfeldbasiert) on Wed, 29 Mar 2006 14:17:32 GMT]]></title><description><![CDATA[<p>So, jetzt hab ich das doch mal probiert mit der PreCreateWindow:</p>
<pre><code class="language-cpp">BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&amp; cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER | WS_MINIMIZEBOX ;
	cs.style &amp;= ~(LONG) FWS_ADDTOTITLE;

	// Zentrieren 
	int BSBreite = GetSystemMetrics(SM_CXMAXTRACK);
	int BSHoehe = GetSystemMetrics(SM_CYMAXTRACK);

	// Fenster-Abmessungen ermitteln
	int Breite = cs.cx;
	int Hoehe = cs.cy;

	int x1,y1;
	x1=(BSBreite-Breite)/2;
	y1=(BSHoehe-Hoehe)/2;

    cs.x = x1; 
    cs.y = y1;

	return CFrameWnd::PreCreateWindow(cs);
}
</code></pre>
<p>Aber: Es klappt so nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Ich kann zwar einen Wert für die Position setzen (cs.x, cs.y), der dann auch übernommen wird.</p>
<p>Aber zum Zentrieren brauche ich auch die Fensterbreite (<a href="http://cs.cx" rel="nofollow">cs.cx</a>, <a href="http://cs.cy" rel="nofollow">cs.cy</a>). Und die sind in der Funktion mit 0 initialisiert. Wird die Breite erst irgendwo später errechnet? Und kann ich die an dieser Stelle bereits ermitteln?</p>
<p>Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1026547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1026547</guid><dc:creator><![CDATA[AndRo67]]></dc:creator><pubDate>Wed, 29 Mar 2006 14:17:32 GMT</pubDate></item><item><title><![CDATA[Reply to Neu: SDI-App: zentriert starten (nicht mehr dialogfeldbasiert) on Thu, 30 Mar 2006 05:42:27 GMT]]></title><description><![CDATA[<p>Schade, das weiß ich auch nicht.<br />
Bei mir ist die Breite fest vorgegeben, daher kann ich damit auch rechnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1026883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1026883</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Thu, 30 Mar 2006 05:42:27 GMT</pubDate></item></channel></rss>