<?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[Problem mit verdecktem Fenster]]></title><description><![CDATA[<p>Hoi...</p>
<p>Ich würde gern eine Art Menüsystem in einem Fenster verwirklichen (bitte keine Kommentare zu Sinn und Unsinn eines solchen Vorhabens... ich brauchs halt).<br />
Klappt ja auch soweit ganz gut... bis auf eine Kleinigkeit: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Sobald das Fenster verdeckt wurde, bekomme ich den &quot;falschen&quot; Text ausgegeben.<br />
Hier mal der Code zum verständlich machen:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char szClassName[ ] = &quot;WindowsApp&quot;;

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
                    LPSTR lpszArgument, int nFunsterStil)
{
  HWND hwnd;               
  MSG messages;            
  WNDCLASSEX wincl;        

  wincl.hInstance     = hThisInstance;
  wincl.lpszClassName = szClassName;
  wincl.lpfnWndProc   = WindowProcedure;      
  wincl.style         = CS_DBLCLKS;                
  wincl.cbSize        = sizeof (WNDCLASSEX);
  wincl.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
  wincl.hIconSm       = LoadIcon (NULL, IDI_APPLICATION);
  wincl.hCursor       = LoadCursor (NULL, IDC_ARROW);
  wincl.lpszMenuName  = NULL;                 
  wincl.cbClsExtra    = 0;                      
  wincl.cbWndExtra    = 0;                     
  wincl.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);

  if (!RegisterClassEx (&amp;wincl))
    return 0;

  hwnd = CreateWindowEx (
         0,              
         szClassName,  
         &quot;Invalidate&quot;,
         WS_OVERLAPPEDWINDOW, 
         CW_USEDEFAULT,       
         CW_USEDEFAULT,       
         300,                
         100,                 
         HWND_DESKTOP,       
         NULL,                
         hThisInstance,       
         NULL                 
         );

  ShowWindow (hwnd, nFunsterStil);

  while (GetMessage (&amp;messages, NULL, 0, 0))
  {
    TranslateMessage(&amp;messages);
    DispatchMessage(&amp;messages);
  }

  return messages.wParam;
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, 
                                  WPARAM wParam, LPARAM lParam)
{
 static LONG i=0, j=0;   /* i = Tastaturpuffer, j = Status der Ebene; */

 switch (message)               
 {   
  case WM_KEYDOWN:
  {
   switch (wParam)
   {
    case VK_NUMPAD0:
         i=0;
         break;     
    case VK_NUMPAD1:
         i=1; 
         break;
    case VK_NUMPAD2:
         i=2;
         break;
   }
   InvalidateRect(hwnd, NULL, TRUE);
   return 0;
  }

  case WM_PAINT:
  {
   PAINTSTRUCT  ps;
   HDC         hdc;

   char mainwin[] = &quot;Hauptfenster&quot;; 
   char win1[]    = &quot;Fenster 1&quot;;
   char win2[]    = &quot;Fenster 2&quot;;
   char subwin1[] = &quot;Sub-Fenster 1&quot;;
   char subwin2[] = &quot;Sub-Fenster 2&quot;; 

   hdc = BeginPaint(hwnd, &amp;ps);
   SetBkMode(hdc, TRANSPARENT);
   SetTextColor(hdc, RGB(0,255,0));

   if(i == 0){
     TextOut(hdc, 110, 25, mainwin, sizeof(mainwin)-1);
     j=0;
   }

   else if(i == 1 &amp;&amp; j == 0){
     TextOut(hdc, 110, 25, win1, sizeof(win1)-1);
     j=1;
   }

   else if(i == 2 &amp;&amp; j == 0){
     TextOut(hdc, 110, 25, win2, sizeof(win2)-1);
     j=2;
   }

   else if((i == 1 &amp;&amp; j == 1) || (i == 1 &amp;&amp; j == 2)){
     TextOut(hdc, 110, 25, subwin1, sizeof(subwin1)-1);
   }

   else if((i == 2 &amp;&amp; j == 1) || (i == 2 &amp;&amp; j == 2)){
     TextOut(hdc, 110, 25, subwin2, sizeof(subwin2)-1);
   }

   EndPaint(hwnd, &amp;ps);
   return 0;
  }

  case WM_DESTROY:
    PostQuitMessage (0); 
    break;

  default:                     
    return DefWindowProc (hwnd, message, wParam, lParam);
 }

 return 0;
}
</code></pre>
<p>Wurde das &quot;Fenster1&quot; angezeigt und dann verdeckt, erscheint danach &quot;Sub-Fenster1&quot;.</p>
<p>Ich kann mir schon denken, woran es liegt: <strong>wParam</strong> hält noch die Taste 1 bzw. 2, und die werden halt dann mit &quot;Sub-Fenster1 bzw. 2&quot; verknüpft und entsprechend neu gezeichnet.</p>
<p>Die Frage ist, wie kann ich das ändern? Hat mal jemand ne Idee?</p>
<p>Grüße<br />
CC</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/70130/problem-mit-verdecktem-fenster</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 08:28:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/70130.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Apr 2004 13:43:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit verdecktem Fenster on Sun, 04 Apr 2004 17:28:15 GMT]]></title><description><![CDATA[<p>Hoi...</p>
<p>Ich würde gern eine Art Menüsystem in einem Fenster verwirklichen (bitte keine Kommentare zu Sinn und Unsinn eines solchen Vorhabens... ich brauchs halt).<br />
Klappt ja auch soweit ganz gut... bis auf eine Kleinigkeit: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Sobald das Fenster verdeckt wurde, bekomme ich den &quot;falschen&quot; Text ausgegeben.<br />
Hier mal der Code zum verständlich machen:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char szClassName[ ] = &quot;WindowsApp&quot;;

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
                    LPSTR lpszArgument, int nFunsterStil)
{
  HWND hwnd;               
  MSG messages;            
  WNDCLASSEX wincl;        

  wincl.hInstance     = hThisInstance;
  wincl.lpszClassName = szClassName;
  wincl.lpfnWndProc   = WindowProcedure;      
  wincl.style         = CS_DBLCLKS;                
  wincl.cbSize        = sizeof (WNDCLASSEX);
  wincl.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
  wincl.hIconSm       = LoadIcon (NULL, IDI_APPLICATION);
  wincl.hCursor       = LoadCursor (NULL, IDC_ARROW);
  wincl.lpszMenuName  = NULL;                 
  wincl.cbClsExtra    = 0;                      
  wincl.cbWndExtra    = 0;                     
  wincl.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);

  if (!RegisterClassEx (&amp;wincl))
    return 0;

  hwnd = CreateWindowEx (
         0,              
         szClassName,  
         &quot;Invalidate&quot;,
         WS_OVERLAPPEDWINDOW, 
         CW_USEDEFAULT,       
         CW_USEDEFAULT,       
         300,                
         100,                 
         HWND_DESKTOP,       
         NULL,                
         hThisInstance,       
         NULL                 
         );

  ShowWindow (hwnd, nFunsterStil);

  while (GetMessage (&amp;messages, NULL, 0, 0))
  {
    TranslateMessage(&amp;messages);
    DispatchMessage(&amp;messages);
  }

  return messages.wParam;
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, 
                                  WPARAM wParam, LPARAM lParam)
{
 static LONG i=0, j=0;   /* i = Tastaturpuffer, j = Status der Ebene; */

 switch (message)               
 {   
  case WM_KEYDOWN:
  {
   switch (wParam)
   {
    case VK_NUMPAD0:
         i=0;
         break;     
    case VK_NUMPAD1:
         i=1; 
         break;
    case VK_NUMPAD2:
         i=2;
         break;
   }
   InvalidateRect(hwnd, NULL, TRUE);
   return 0;
  }

  case WM_PAINT:
  {
   PAINTSTRUCT  ps;
   HDC         hdc;

   char mainwin[] = &quot;Hauptfenster&quot;; 
   char win1[]    = &quot;Fenster 1&quot;;
   char win2[]    = &quot;Fenster 2&quot;;
   char subwin1[] = &quot;Sub-Fenster 1&quot;;
   char subwin2[] = &quot;Sub-Fenster 2&quot;; 

   hdc = BeginPaint(hwnd, &amp;ps);
   SetBkMode(hdc, TRANSPARENT);
   SetTextColor(hdc, RGB(0,255,0));

   if(i == 0){
     TextOut(hdc, 110, 25, mainwin, sizeof(mainwin)-1);
     j=0;
   }

   else if(i == 1 &amp;&amp; j == 0){
     TextOut(hdc, 110, 25, win1, sizeof(win1)-1);
     j=1;
   }

   else if(i == 2 &amp;&amp; j == 0){
     TextOut(hdc, 110, 25, win2, sizeof(win2)-1);
     j=2;
   }

   else if((i == 1 &amp;&amp; j == 1) || (i == 1 &amp;&amp; j == 2)){
     TextOut(hdc, 110, 25, subwin1, sizeof(subwin1)-1);
   }

   else if((i == 2 &amp;&amp; j == 1) || (i == 2 &amp;&amp; j == 2)){
     TextOut(hdc, 110, 25, subwin2, sizeof(subwin2)-1);
   }

   EndPaint(hwnd, &amp;ps);
   return 0;
  }

  case WM_DESTROY:
    PostQuitMessage (0); 
    break;

  default:                     
    return DefWindowProc (hwnd, message, wParam, lParam);
 }

 return 0;
}
</code></pre>
<p>Wurde das &quot;Fenster1&quot; angezeigt und dann verdeckt, erscheint danach &quot;Sub-Fenster1&quot;.</p>
<p>Ich kann mir schon denken, woran es liegt: <strong>wParam</strong> hält noch die Taste 1 bzw. 2, und die werden halt dann mit &quot;Sub-Fenster1 bzw. 2&quot; verknüpft und entsprechend neu gezeichnet.</p>
<p>Die Frage ist, wie kann ich das ändern? Hat mal jemand ne Idee?</p>
<p>Grüße<br />
CC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/494792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/494792</guid><dc:creator><![CDATA[Cloudcreature]]></dc:creator><pubDate>Sun, 04 Apr 2004 17:28:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit verdecktem Fenster on Sun, 04 Apr 2004 14:09:58 GMT]]></title><description><![CDATA[<p>Cloudcreature schrieb:</p>
<blockquote>
<p>Wurde das &quot;Fenster1&quot; angezeigt und dann verdeckt, erscheint danach &quot;Sub-Fenster1&quot;.</p>
</blockquote>
<p>Ich stell mir vor, dass zu allererst der String &quot;Hauptfenster&quot; gezeichnet wird. Denn die statischen Variablen 'i' und 'j' werden ja mit 0 initialisiert.</p>
<p>Cloudcreature schrieb:</p>
<blockquote>
<p>Ich kann mir schon denken, woran es liegt: <strong>wParam</strong> hält noch die Taste 1 bzw. 2, und die werden halt dann mit &quot;Sub-Fenster1 bzw. 2&quot; verknüpft und entsprechend neu gezeichnet.</p>
<p>Die Frage ist, wie kann ich das ändern? Hat mal jemand ne Idee?</p>
</blockquote>
<p>Das ist völlig unmöglich. Jedesmal wenn Windows deine WindowProcedure aufruft wird auch jedesmal ein neuer Stack angelegt, d.h. der Parameter wParam kann nicht mit dem wParam einer anderen Message interferieren.</p>
<p>Ich kann dir bei deinem Problem leider nicht weiterhelfen. Du musst das Verhalten deines Programms schon ein bisschen besser erklären; vorallem das Problem.</p>
<p>Und übrigens: Wenn du nach einem Tastendruck InvalidateRect aufrufst wird erst dann gezeichnet, wenn keine Messages in der Nachrichtenschleife mehr vorhanden sind. Denn erst dann generiert Windows eine WM_PAINT Nachricht. Um diese Nachricht zu erzwingen kannst du UpdateWindow(hwnd) aufrufen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/494801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/494801</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Sun, 04 Apr 2004 14:09:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit verdecktem Fenster on Sun, 04 Apr 2004 14:31:18 GMT]]></title><description><![CDATA[<p>Aziz schrieb:</p>
<blockquote>
<p>Du musst das Verhalten deines Programms schon ein bisschen besser erklären; vorallem das Problem.</p>
</blockquote>
<p>Nach Aufruf des Programmes erscheint im Fenster &quot;Hauptmenü&quot;.<br />
Nach drücken der Taste 1 (Numblock) erscheint &quot;Fenster 1&quot;. Nach erneutem drücken der Taste 1 erscheint &quot;Sub-Fenster 1&quot;, nach drücken der Taste 2 &quot;Sub-Fenster 2&quot;, mit der 0 gehts zurück ins Hauptmenü, nach Eingabe der 2 kommt man dann zum &quot;Fenster 2&quot;, mit der 1 wiederum &quot;Sub-Fenster 1&quot; usw...</p>
<p><strong>Problem:</strong> Bin ich gerade im &quot;Fenster 1&quot; oder &quot;Fenster 2&quot; und minimiere oder lege ein anderes Fenster drüber, erscheint danach eben nicht mehr &quot;Fenster 1&quot; oder &quot;Fenster 2&quot; sondern &quot;Sub-Fenster 1&quot; bzw. &quot;Sub-Fenster 2&quot;, was ja so nicht gewünscht ist, denn natürlich möchte ich, dass nach dem minimieren oder ähnlichem noch genau das im Fenster steht, was vorher auch dort stand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/494812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/494812</guid><dc:creator><![CDATA[Cloudcreature]]></dc:creator><pubDate>Sun, 04 Apr 2004 14:31:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit verdecktem Fenster on Sun, 04 Apr 2004 15:01:52 GMT]]></title><description><![CDATA[<p>Cloudcreature schrieb:</p>
<blockquote>
<p><strong>Problem:</strong> Bin ich gerade im &quot;Fenster 1&quot; oder &quot;Fenster 2&quot; und minimiere oder lege ein anderes Fenster drüber, erscheint danach eben nicht mehr &quot;Fenster 1&quot; oder &quot;Fenster 2&quot; sondern &quot;Sub-Fenster 1&quot; bzw. &quot;Sub-Fenster 2&quot;, was ja so nicht gewünscht ist, denn natürlich möchte ich, dass nach dem minimieren oder ähnlichem noch genau das im Fenster steht, was vorher auch dort stand.</p>
</blockquote>
<p>Ich würd mal sagen, das ist auch kein Wunder <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Nachdem nämlich der Text &quot;Fenster1&quot; oder &quot;Fenster2&quot; gezeichnet wurde, wird die Variable 'j' auf 1 bzw. 2 gesetzt. Bei der nächsten WM_PAINT Nachricht wird der if-Block ausgeführt, auf den die Bedingung i = 1 und j = 1 (bzw. ...) zutrifft.<br />
Das bedeutet du musst dein Konzept überarbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/494828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/494828</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Sun, 04 Apr 2004 15:01:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit verdecktem Fenster on Sun, 04 Apr 2004 15:26:25 GMT]]></title><description><![CDATA[<p>Blöder Mist.... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
Hast ganz recht.. danke!</p>
<p>Grüße<br />
CC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/494843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/494843</guid><dc:creator><![CDATA[Cloudcreature]]></dc:creator><pubDate>Sun, 04 Apr 2004 15:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit verdecktem Fenster on Sun, 04 Apr 2004 17:14:59 GMT]]></title><description><![CDATA[<p>also bin ich zu doof oder:</p>
<pre><code class="language-cpp">static BOOL i=0, j=0;
</code></pre>
<p>und dann weite unten setzt du i auf 2 wenn NUM2 gedrückt wird aber bool und 0,1,2 !?<br />
bool -&gt; true / false | 0 / undgleich 0<br />
also gibt es doch keine unterscheidung ob 1 oder 2<br />
nur 0 oder halt nicht null<br />
oder bin ich etwa doch zu doof???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/494903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/494903</guid><dc:creator><![CDATA[tuti]]></dc:creator><pubDate>Sun, 04 Apr 2004 17:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit verdecktem Fenster on Sun, 04 Apr 2004 17:26:47 GMT]]></title><description><![CDATA[<p><em>lol</em></p>
<p>Es muss natürlich LONG heißen, nicht BOOL. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Hat zwar in dem Fall keine Auswirkung... dennoch,<br />
danke für den Hinweis!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/494910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/494910</guid><dc:creator><![CDATA[Cloudcreature]]></dc:creator><pubDate>Sun, 04 Apr 2004 17:26:47 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit verdecktem Fenster on Sun, 04 Apr 2004 20:04:40 GMT]]></title><description><![CDATA[<p>Cloudcreature schrieb:</p>
<blockquote>
<p>danke für den Hinweis!</p>
</blockquote>
<p>Bitte <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>
<p>MfG tuti</p>
]]></description><link>https://www.c-plusplus.net/forum/post/494982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/494982</guid><dc:creator><![CDATA[tuti]]></dc:creator><pubDate>Sun, 04 Apr 2004 20:04:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit verdecktem Fenster on Mon, 05 Apr 2004 12:21:19 GMT]]></title><description><![CDATA[<p>Ist das Problem jetzt eigentlich gelöst <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>
]]></description><link>https://www.c-plusplus.net/forum/post/495375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/495375</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Mon, 05 Apr 2004 12:21:19 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit verdecktem Fenster on Mon, 05 Apr 2004 19:40:27 GMT]]></title><description><![CDATA[<p>ja, ist es.</p>
<pre><code class="language-cpp">case WM_KEYDOWN:
  {
   switch (wParam)
   {
    case VK_NUMPAD0:
         i=0;
         j=0;
         break;     
    case VK_NUMPAD1:
         i=1;
         j++;
         if(j&gt;=3){
           j=2;
         }
         break;
    case VK_NUMPAD2:
         i=2;
         j++;
         if(j&gt;=3){
           j=2;
         }
         break;
   }
   InvalidateRect(hwnd, NULL, TRUE);
   return 0;
  }
</code></pre>
<p>damit gehts (WM_PAINT natürlich angepaßt). Aziz hat mich auf die richtige Spur gebracht.</p>
<p>Danke nochmal...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/495808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/495808</guid><dc:creator><![CDATA[Cloudcreature]]></dc:creator><pubDate>Mon, 05 Apr 2004 19:40:27 GMT</pubDate></item></channel></rss>