<?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[OnInitDialog() nur später?]]></title><description><![CDATA[<p>hi @all</p>
<p>Ich hab ein kleines Problem. Und zwar folgendes:<br />
Bei einem Programm wird es einen Ladebildschrim geben. Da ich keine Alternative zu DoModal() gefunden habe, die es erlaubt einen modalen Dialog zu erzeugen, jedoch ohne erst zurckzukehren, wenn der Dialog geschlossen wird, habe ich die Berechnungen gezwungener massen auf den Ladebildschirm geschoben.</p>
<p>Das Problem ist jetzt, dass ich die Berechnungen nicht starten kann. Schreibe ich es in OnInitDialog() kann ich den Ladebildschirm gerade so gut vergessen, da er zu diesem Zeitpunkt noch gar nicht existiert.</p>
<p>Lange Rede, kurzer Sinn: Wie heisst die Nachricht/Funktion, die aufgerufen wird, sobald der Dialog erschienen ist? Oder wie mache ich das anders?</p>
<p>mfg<br />
Lord_Senna</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153069/oninitdialog-nur-später</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 02:32:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153069.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Jul 2006 14:00:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to OnInitDialog() nur später? on Wed, 12 Jul 2006 14:00:47 GMT]]></title><description><![CDATA[<p>hi @all</p>
<p>Ich hab ein kleines Problem. Und zwar folgendes:<br />
Bei einem Programm wird es einen Ladebildschrim geben. Da ich keine Alternative zu DoModal() gefunden habe, die es erlaubt einen modalen Dialog zu erzeugen, jedoch ohne erst zurckzukehren, wenn der Dialog geschlossen wird, habe ich die Berechnungen gezwungener massen auf den Ladebildschirm geschoben.</p>
<p>Das Problem ist jetzt, dass ich die Berechnungen nicht starten kann. Schreibe ich es in OnInitDialog() kann ich den Ladebildschirm gerade so gut vergessen, da er zu diesem Zeitpunkt noch gar nicht existiert.</p>
<p>Lange Rede, kurzer Sinn: Wie heisst die Nachricht/Funktion, die aufgerufen wird, sobald der Dialog erschienen ist? Oder wie mache ich das anders?</p>
<p>mfg<br />
Lord_Senna</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096494</guid><dc:creator><![CDATA[Lord_Senna]]></dc:creator><pubDate>Wed, 12 Jul 2006 14:00:47 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Wed, 12 Jul 2006 14:27:13 GMT]]></title><description><![CDATA[<p>Keine Ahnung ob dies dir helfen könnte, aber ich nenne mal zwei Stichworte:<br />
CDialog::CreateEx<br />
WS_EX_TOPMOST</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096509</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 12 Jul 2006 14:27:13 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Wed, 12 Jul 2006 15:26:25 GMT]]></title><description><![CDATA[<p>Danke für die Antwort.<br />
Zum 1.: CreateEx() habe ich nirgends gefunden. Meinst du Create()?</p>
<p>Zum 2.: WS_EX_TOPMOST macht, dass der Dialog auch von anderen Anwendungen nicht verdeckt werden kann. Dies sollte jedoch möglich sein. Man sollte nur nicht mehr auf das Hauptfenster zugreifen können...</p>
<p>Kannst du mir auch für die andere Frage ein Stichwort geben?</p>
<p>thnx<br />
Lord_Senna</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096554</guid><dc:creator><![CDATA[Lord_Senna]]></dc:creator><pubDate>Wed, 12 Jul 2006 15:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Wed, 12 Jul 2006 15:39:49 GMT]]></title><description><![CDATA[<p>Ne ich meine CDialog::CreateEx(...)<br />
Schau mal in der MSDN nach und suche nach CDialog. Dort schaust du dir die Members an und entdeckst mit Sicherheit ein CreateEx. Ansonsten bist du blind oder du schaust am falschen Ort nach ^^</p>
<p>Ich begreife nicht so ganz was du gegen das WS_EX_TOPMOST hast. Die Berechnung startet, weil der User es so verlangt hat. Mit CreateEx erstellst du dir einen Topmost Dialog, der aber nicht Modal ist. In der selben Funktion kannst du nun deine Berechnungen durchführen und gleichzeitig kannst du immer den TopMost Dialog per Funktionen aktualisieren (also z.b. den Ladebalken weiterschieben). Der User kann solange die Berechnungen laufen sowieso nicht auf das Fenster zugreifen, da du ja am berechnen bist und die Nachrichten derzeit nicht abgefangen, bzw. weiterverarbeitet werden. Du kannst zudem am Anfang mit SetCursor einen Ladecursor laden, um dem User ganz klar zu sagen, er habe nun zu warten. Und ansonsten könntest du noch mit CWnd::EnableWindow das Fenster, auf welches der User nicht zugreifen darf ganz abschalten.</p>
<p>Oder versteh ich irgendwas falsch?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096557</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 12 Jul 2006 15:39:49 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Wed, 12 Jul 2006 15:55:50 GMT]]></title><description><![CDATA[<p>Erzeuge den Dialog nicht Modal.<br />
Führe Deine Berechnung durch und rufe ab und Zu UpdateWindow für den Dialog auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096568</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 12 Jul 2006 15:55:50 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Wed, 12 Jul 2006 16:04:52 GMT]]></title><description><![CDATA[<p>Ok, ich bin blind...<br />
CreateEx() gibts für etwa alles, nur nicht bei CDialog.<br />
Auch bei google hab ich nix gefunden...<br />
Was ist überhaupt der Unterschied?</p>
<p>Was ich gegen WS_EX_TOPMOST habe? Damit lässt sich der Dialog auch von irgendwelchen anderen Anwendungen nicht mehr überdecken. Das ist etwas übers Ziel herausgeschossen.</p>
<p>Ich machs mit EnableWindow(). Das ist eine gute Idee...</p>
<p>Auch wenn ich's jetzt nicht mehr brauche, es interessiert mich immernoch, wie die Nachricht heisst, die _nach_ OnInitDialog() versendet wird...</p>
<p>nochmals vielen Danke<br />
Lord_Senna</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096576</guid><dc:creator><![CDATA[Lord_Senna]]></dc:creator><pubDate>Wed, 12 Jul 2006 16:04:52 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Wed, 12 Jul 2006 17:51:29 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>meines wissens nach, gibt es keine gesonderte Nachricht, die nach OnInitDialog<br />
kommt. Du kannst Dir aber selber eine in OnInitDialog Posten (nicht Senden!).</p>
<p>In Deiner Nachrichtenfunktion prüfst Du dann, ob Dein Dialog schon sichtbar ist.<br />
Wenn nicht, postest Du Dir die Nachricht noch einmal zu.</p>
<p>Meiner Meinung nach, ist es aber besser, wenn Du in OnInitDialog einen<br />
Workerthread startest, der die Berechnungen durchführt, und eine Nachricht<br />
an den Dialog sendet, um die Progressbar zu aktualisieren.<br />
Dadurch bleibt der modale Dialog bedienbar.</p>
<p>Gruß<br />
Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096651</guid><dc:creator><![CDATA[EB]]></dc:creator><pubDate>Wed, 12 Jul 2006 17:51:29 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Thu, 13 Jul 2006 17:43:22 GMT]]></title><description><![CDATA[<p>WM_SHOWINDOW</p>
<p>Kommt wenn ein Fenster angezeigt oder ausgeblendet wird.</p>
<p>Edit:<br />
Stimmt habe mich verschrieben. Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096815</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Thu, 13 Jul 2006 17:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Thu, 13 Jul 2006 06:26:27 GMT]]></title><description><![CDATA[<p>Es heißt korrekt: WM_SHOWWINDOW</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1096847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1096847</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 13 Jul 2006 06:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Thu, 13 Jul 2006 11:11:23 GMT]]></title><description><![CDATA[<p>Erstmal bedanke ich mich für alle Antworten.</p>
<p>Ich habe so einen Mix aus allem gemacht...<br />
Ich starte den LadeDialog mit Create() (da CreateEx() immernoch nicht aufgetaucht ist) und disable dann den Hauptdialog.<br />
Darauf starte ich einen Thread der die Berechnungen ausführt.</p>
<p>So viel zur Theorie...</p>
<p>Jedoch bei jedem Aufruf von UpdateData(...) (im Workerthread) stürzt mir das ganze Ding ab.</p>
<p>Ist es nicht möglich UpdateData(...) aus einem Workerthread aus aufzurufen?<br />
Oder muss man etwas spezielles &quot;machen&quot;?</p>
<p>nochmal danke,<br />
Lord_Senna</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097042</guid><dc:creator><![CDATA[Lord_Senna]]></dc:creator><pubDate>Thu, 13 Jul 2006 11:11:23 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Thu, 13 Jul 2006 16:22:00 GMT]]></title><description><![CDATA[<p>Nein! UpdateData sollte aus einem Workerthread nicht aufgerufen werden.<br />
Sende eine eigene Windows Nachricht per PostMessage um den Dialog über das Ergebnis zu informieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097270</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 13 Jul 2006 16:22:00 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Thu, 13 Jul 2006 17:52:46 GMT]]></title><description><![CDATA[<p>Es sollte nicht nur nicht aufgerufen werden.<br />
Es funktioniert nicht.<br />
Jochen hat dies in einem Thread mal erklärt wieso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097320</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Thu, 13 Jul 2006 17:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Thu, 13 Jul 2006 21:33:18 GMT]]></title><description><![CDATA[<p>Ok, dann halt über den Umweg mit der Nachricht...</p>
<p>Wo wir wieder bei ein paar Fragen angelangt sind:</p>
<ol>
<li>
<p>Warum darf man UpdateData(...) nicht aus einem Workerthread aus aufrufen? (ja, ich habe gesucht, es aber nicht gefunden.</p>
</li>
<li>
<p>Wie fange ich eine Benutzerdefinierte Nachricht (bei MFC) ab? Wie heisst das Dingens, das man bei MessageMap eintragen muss, damit man auf die eigene Nachricht reagieren kann (das Teil heisst Makro, oder?)?</p>
</li>
</ol>
<p>tausend Dank<br />
Lord_Senna</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097426</guid><dc:creator><![CDATA[Lord_Senna]]></dc:creator><pubDate>Thu, 13 Jul 2006 21:33:18 GMT</pubDate></item><item><title><![CDATA[Reply to OnInitDialog() nur später? on Fri, 14 Jul 2006 06:15:12 GMT]]></title><description><![CDATA[<p>Lord_Senna schrieb:</p>
<blockquote>
<ol>
<li>Warum darf man UpdateData(...) nicht aus einem Workerthread aus aufrufen? (ja, ich habe gesucht, es aber nicht gefunden.</li>
</ol>
</blockquote>
<p>Ganz so hart das es <strong>nicht</strong> geht wüsste ich nicht. Manches geht... leider. Deshlab denkt ja jeder man könnte es immer machen.<br />
1. Weil CWnd Objekte Thread afine sind und diese Objekte nicht über Threadgrenzen hinweg verwendet werden sollten! Manche Funktionen gehen, die nur auf einen simplen Zugriff auf m_hWnd machen, oder einfache Membervariablen verwenden. Allerdings eben nicht alles.<br />
2. UpdateWindowe löst im Normalfall eine gaze Welle von Windows Nachrichten aus, die nun alle mit dem Mainthread ausgetauscht werden müssen... das ist extrem uneffektiv und lahm.</p>
<p>Lord_Senna schrieb:</p>
<blockquote>
<ol start="2">
<li>Wie fange ich eine Benutzerdefinierte Nachricht (bei MFC) ab? Wie heisst das Dingens, das man bei MessageMap eintragen muss, damit man auf die eigene Nachricht reagieren kann (das Teil heisst Makro, oder?)?</li>
</ol>
</blockquote>
<p>#define WM_MYMESSAGE (WM_APP+1)</p>
<p>ON_MESSAGE(...)</p>
<p>LRESULT CMyDialog::OnMyMessage(WPARAm wParam, LPARAM lParam)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097470</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 14 Jul 2006 06:15:12 GMT</pubDate></item></channel></rss>