<?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[EditField im Vordergrund&#x2F;Neuanzeigen des EditFields]]></title><description><![CDATA[<p>In dieser Schleife wird ein Spiel neu angezeigt:</p>
<pre><code class="language-cpp">//Code 1
while(msg.message != WM_QUIT)
	{    
        if(PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE))
        {  
            TranslateMessage(&amp;msg);
            DispatchMessage(&amp;msg);
        }
        else
        {
			Direct3D.BeginScene();

			DrawSprite(lpD3DDevice, 1024, 768, 0, 0, 0, &quot;BackGround.bmp&quot;);

            Direct3D.EndScene();
        }
    }
</code></pre>
<p>void DrawSprite(LPDIRECT3DDEVICE9 lpD3DDevice, int Width, int Height, float X, float Y, int DegreesRotated, char FileName[80]) ist eine Funktion, die eine Bilddatei ausliest und anzeigt (selbst geschrieben).</p>
<p>Hier wird beim Starten ein Eingabefeld erstellt (Edit1 ist eine globale Variable):</p>
<pre><code class="language-cpp">//Code 2
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    // testen, um welche Nachricht es sich handelt
    switch(msg)
    {
	case WM_CREATE:
			Edit1 = CreateEditField(hWnd);
			return 0;
    }
}
</code></pre>
<p>Das ist die Funktion zum Erstellen des Eingabefelds:</p>
<pre><code class="language-cpp">//Code 3
HWND CreateEditField(HWND hWnd)
{	
	HWND hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, &quot;Edit&quot;, &quot;leer&quot;,
		WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE |
		ES_AUTOVSCROLL, 200, 200,100,25, hWnd, NULL, NULL, NULL);

	if(hEdit != NULL)
		return hEdit;
	else
		return false;
}
</code></pre>
<p>Das Problem:<br />
Im Code 1 wird der Hintergrund jedesmal neu gezeichnet (daran soll sich auch nichts ändern) und das Eingabefeld verschwindet dahinter. Ich kann es zwar anklicken und schreiben aber es flackert dann nur manchmal.</p>
<p>Meine Frage:<br />
Gibt es eine Möglichkeit, Edit1 über den Messagehandler in der 1. Schleife nach dem Hintergrund neu zu zeichnen (nur anzeigen, nicht neu erstellen, sonst geht der Text verloren)?<br />
Oder ist es möglich, Edit1 automatisch schon von vorn herein im Vordergrund zu haben (also in der CreateEditField-Funktion etwas ändern)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/161482/editfield-im-vordergrund-neuanzeigen-des-editfields</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 09:34:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/161482.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Oct 2006 09:18:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to EditField im Vordergrund&#x2F;Neuanzeigen des EditFields on Sat, 07 Oct 2006 09:18:36 GMT]]></title><description><![CDATA[<p>In dieser Schleife wird ein Spiel neu angezeigt:</p>
<pre><code class="language-cpp">//Code 1
while(msg.message != WM_QUIT)
	{    
        if(PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE))
        {  
            TranslateMessage(&amp;msg);
            DispatchMessage(&amp;msg);
        }
        else
        {
			Direct3D.BeginScene();

			DrawSprite(lpD3DDevice, 1024, 768, 0, 0, 0, &quot;BackGround.bmp&quot;);

            Direct3D.EndScene();
        }
    }
</code></pre>
<p>void DrawSprite(LPDIRECT3DDEVICE9 lpD3DDevice, int Width, int Height, float X, float Y, int DegreesRotated, char FileName[80]) ist eine Funktion, die eine Bilddatei ausliest und anzeigt (selbst geschrieben).</p>
<p>Hier wird beim Starten ein Eingabefeld erstellt (Edit1 ist eine globale Variable):</p>
<pre><code class="language-cpp">//Code 2
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    // testen, um welche Nachricht es sich handelt
    switch(msg)
    {
	case WM_CREATE:
			Edit1 = CreateEditField(hWnd);
			return 0;
    }
}
</code></pre>
<p>Das ist die Funktion zum Erstellen des Eingabefelds:</p>
<pre><code class="language-cpp">//Code 3
HWND CreateEditField(HWND hWnd)
{	
	HWND hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, &quot;Edit&quot;, &quot;leer&quot;,
		WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE |
		ES_AUTOVSCROLL, 200, 200,100,25, hWnd, NULL, NULL, NULL);

	if(hEdit != NULL)
		return hEdit;
	else
		return false;
}
</code></pre>
<p>Das Problem:<br />
Im Code 1 wird der Hintergrund jedesmal neu gezeichnet (daran soll sich auch nichts ändern) und das Eingabefeld verschwindet dahinter. Ich kann es zwar anklicken und schreiben aber es flackert dann nur manchmal.</p>
<p>Meine Frage:<br />
Gibt es eine Möglichkeit, Edit1 über den Messagehandler in der 1. Schleife nach dem Hintergrund neu zu zeichnen (nur anzeigen, nicht neu erstellen, sonst geht der Text verloren)?<br />
Oder ist es möglich, Edit1 automatisch schon von vorn herein im Vordergrund zu haben (also in der CreateEditField-Funktion etwas ändern)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150913</guid><dc:creator><![CDATA[Gast91]]></dc:creator><pubDate>Sat, 07 Oct 2006 09:18:36 GMT</pubDate></item><item><title><![CDATA[Reply to EditField im Vordergrund&#x2F;Neuanzeigen des EditFields on Sat, 07 Oct 2006 10:56:58 GMT]]></title><description><![CDATA[<p>Vielleicht würde das Ganze besser ins Forum „Graphik- und Spieleprogrammierung“ passen.<br />
Also wenn ein Mod so freundlich wäre...</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150957</guid><dc:creator><![CDATA[Gast91]]></dc:creator><pubDate>Sat, 07 Oct 2006 10:56:58 GMT</pubDate></item></channel></rss>