<?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[Zeichnen nach Tastatureingabe]]></title><description><![CDATA[<p>Hallo...</p>
<p>Bin WinAPI-Neuling und kämpfe mit einem Verständnisproblem:</p>
<p>Das hab ich bereits: 3 farbige Linien auf schwarzem Hintergrund mit Text in der<br />
entsprechenden Farbe.</p>
<p>Das möchte ich: Eine Linie mit Text nach Aufruf des Programms, nach Eingabe der<br />
VK_NUMPAD1-Taste wird die nächste farbige Linie mit Text ausgegeben, usw...</p>
<p>Habe nun schon alles mögliche (unmögliche, sonst würds ja gehen <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="😉"
    /> ) mit WM_KEYDOWN probiert... ich kriegs nich hin. (Programm schließt sich nach betätigung irgendeiner Taste.)</p>
<p>Wie müssten WM_PAINT + WM_KEYDOWN aufgebaut sein, damit das funzt?<br />
(habe ich mir schon mehrere Tuts angesehen und nichts vergleichbares gefunden)</p>
<p>Wäre toll könnte mir jemand auf die Sprünge helfen.</p>
<p>Danke + Grüße<br />
Cloudcreature</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/69968/zeichnen-nach-tastatureingabe</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 08:13:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/69968.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Apr 2004 12:09:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeichnen nach Tastatureingabe on Fri, 02 Apr 2004 12:09:12 GMT]]></title><description><![CDATA[<p>Hallo...</p>
<p>Bin WinAPI-Neuling und kämpfe mit einem Verständnisproblem:</p>
<p>Das hab ich bereits: 3 farbige Linien auf schwarzem Hintergrund mit Text in der<br />
entsprechenden Farbe.</p>
<p>Das möchte ich: Eine Linie mit Text nach Aufruf des Programms, nach Eingabe der<br />
VK_NUMPAD1-Taste wird die nächste farbige Linie mit Text ausgegeben, usw...</p>
<p>Habe nun schon alles mögliche (unmögliche, sonst würds ja gehen <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="😉"
    /> ) mit WM_KEYDOWN probiert... ich kriegs nich hin. (Programm schließt sich nach betätigung irgendeiner Taste.)</p>
<p>Wie müssten WM_PAINT + WM_KEYDOWN aufgebaut sein, damit das funzt?<br />
(habe ich mir schon mehrere Tuts angesehen und nichts vergleichbares gefunden)</p>
<p>Wäre toll könnte mir jemand auf die Sprünge helfen.</p>
<p>Danke + Grüße<br />
Cloudcreature</p>
]]></description><link>https://www.c-plusplus.net/forum/post/493767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/493767</guid><dc:creator><![CDATA[Cloudcreature]]></dc:creator><pubDate>Fri, 02 Apr 2004 12:09:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichnen nach Tastatureingabe on Fri, 02 Apr 2004 12:31:33 GMT]]></title><description><![CDATA[<p>zeig doch mal dein code <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>vorschlag:</p>
<pre><code class="language-cpp">// winproc
static int nLine = 0;
// ..
case WM_KEYDOWN:
 // taste die du willst
 // nLine hochzählen
 ++nLine;

case WM_PAINT:
 // nLine hält die anzahl der linien die gezeichnet werden sollen
 // nLine * zeichnen
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/493791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/493791</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Fri, 02 Apr 2004 12:31:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichnen nach Tastatureingabe on Fri, 02 Apr 2004 19:18:20 GMT]]></title><description><![CDATA[<p>Hätt ich gleich machen sollen!</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;Lines&quot;,
         WS_OVERLAPPEDWINDOW, 
         CW_USEDEFAULT,       
         CW_USEDEFAULT,       
         320,                
         220,                 
         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)
{
  PAINTSTRUCT            ps;
  HDC                   hdc;
  HPEN                 hpen;
  char rl[] = &quot; Rote Linie&quot;;
  char gl[] = &quot;Grüne Linie&quot;;
  char bl[] = &quot;Blaue Linie&quot;;

  switch (message)               
  {         
    case WM_PAINT:
         hdc = BeginPaint(hwnd, &amp;ps);
         SetBkMode(hdc, TRANSPARENT);

         SetTextColor(hdc, RGB(255,0,0));                 
         TextOut(hdc, 110, 20, rl, sizeof(rl)-1);
         hpen = CreatePen(PS_SOLID, 0, RGB(255,0,0));
         SelectObject(hdc, hpen);
         MoveToEx(hdc, 10, 40, NULL);
         LineTo(hdc, 300, 40);
         DeleteObject(hpen);         

         SetTextColor(hdc, RGB(0,255,0));                    
         TextOut(hdc, 110, 70, gl, sizeof(gl)-1);
         hpen = CreatePen(PS_SOLID, 0, RGB(0,255,0));
         SelectObject(hdc, hpen);                           
         MoveToEx(hdc, 10, 90, NULL);
         LineTo(hdc, 300, 90);
         DeleteObject(hpen);

         SetTextColor(hdc, RGB(0,0,255));                 
         TextOut(hdc, 110, 120, bl, sizeof(bl)-1);
         hpen = CreatePen(PS_SOLID, 0, RGB(0,0,255));
         SelectObject(hdc, hpen);
         MoveToEx(hdc, 10, 140, NULL);
         LineTo(hdc, 300, 140);
         DeleteObject(hpen);

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

    case WM_DESTROY:
         PostQuitMessage (0); 
         break;

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

  return 0;
}
</code></pre>
<p>So siehts im Moment aus. Ich möchte, dass nach Aufruf des Progs die rote Linie angezeigt wird, nach Betätigung der Taste 1 die grüne, nach 2 die blaue, bei 0 wieder die rote (natürlich immer mit entsprechendem Text und der richtigen Farbe).</p>
<p>Hatte zuerst probiert, die meisten WM_PAINT-Sachen nach WM_KEYDOWN zu verschieben, weil mir eben nicht klar ist, wie sonst WM_PAINT auf einen Tastendruck reagiert.</p>
<p>Ach hey... diese ganze API-Geschichte ist halt echt Neuland. <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>edit: Syntaxcoloring</p>
]]></description><link>https://www.c-plusplus.net/forum/post/493943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/493943</guid><dc:creator><![CDATA[Cloudcreature]]></dc:creator><pubDate>Fri, 02 Apr 2004 19:18:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichnen nach Tastatureingabe on Fri, 02 Apr 2004 16:24:10 GMT]]></title><description><![CDATA[<p>Wenn dein Programm beim Tastendruck beendet wird nehme ich an, dass du einfach das break; vergessen hast <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>
]]></description><link>https://www.c-plusplus.net/forum/post/493955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/493955</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Fri, 02 Apr 2004 16:24:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichnen nach Tastatureingabe on Fri, 02 Apr 2004 17:14:58 GMT]]></title><description><![CDATA[<p><strong><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1644">@flenders</a></strong>: Nein, die breaks waren schon da... denke, ich hatte ein return 0 vergessen. Nun schließt es sich nicht mehr. <em>jippi</em></p>
<p>Aber das löst mein ursprüngliches Problem nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Denn eine Reaktion auf einen Tastendruck gibt es nicht.<br />
Eigentlich wollte ich das ja vermeiden, aber was solls... als Neuling wird man ja wohl ein paar Fehler machen dürfen? Also poste ich mal einen Auszug aus meinem Pseudocode:</p>
<pre><code class="language-cpp">switch (message)               
  {         
    case WM_PAINT:
         hdc = BeginPaint(hwnd, &amp;ps);
         SetBkMode(hdc, TRANSPARENT);

         SetTextColor(hdc, RGB(255,0,0));                 
         TextOut(hdc, 110, 20, rl, sizeof(rl)-1);
         hpen = CreatePen(PS_SOLID, 0, RGB(255,0,0));
         SelectObject(hdc, hpen);
         MoveToEx(hdc, 10, 40, NULL);
         LineTo(hdc, 300, 40);
         DeleteObject(hpen);  
         EndPaint(hwnd, &amp;ps);

    case WM_KEYDOWN:
    {
      switch (wParam)
      {
        case VK_NUMPAD1:
             SetTextColor(hdc, RGB(0,255,0));                    
             TextOut(hdc, 110, 70, gl, sizeof(gl)-1);
             hpen = CreatePen(PS_SOLID, 0, RGB(0,255,0));
             SelectObject(hdc, hpen);                           
             MoveToEx(hdc, 10, 90, NULL);
             LineTo(hdc, 300, 90);
             DeleteObject(hpen);
             InvalidateRect(hwnd, NULL, TRUE); 
             break;

        case VK_NUMPAD2:
             SetTextColor(hdc, RGB(0,0,255));                 
             TextOut(hdc, 110, 120, bl, sizeof(bl)-1);
             hpen = CreatePen(PS_SOLID, 0, RGB(0,0,255));
             SelectObject(hdc, hpen);
             MoveToEx(hdc, 10, 140, NULL);
             LineTo(hdc, 300, 140);
             DeleteObject(hpen);
             InvalidateRect(hwnd, NULL, TRUE);
             break;

        case VK_NUMPAD0:
             SetTextColor(hdc, RGB(255,0,0));                 
             TextOut(hdc, 110, 20, rl, sizeof(rl)-1);
             hpen = CreatePen(PS_SOLID, 0, RGB(255,0,0));
             SelectObject(hdc, hpen);
             MoveToEx(hdc, 10, 40, NULL);
             LineTo(hdc, 300, 40);
             DeleteObject(hpen);  
             InvalidateRect(hwnd, NULL, TRUE);
             break;
        }
      }                        
      return 0;
</code></pre>
<p>Kann das so bzw. so ähnlich funktionieren? (Blöde Frage... tut es ja nicht *gg*)<br />
Wie muss ich das umgestalten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/493980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/493980</guid><dc:creator><![CDATA[Cloudcreature]]></dc:creator><pubDate>Fri, 02 Apr 2004 17:14:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichnen nach Tastatureingabe on Fri, 02 Apr 2004 18:46:12 GMT]]></title><description><![CDATA[<p>Im Normallfall muss am Ende jedes case-Zweiges ein break oder return stehen - das ist z.B. bei WM_PAINT bei dir nicht der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/494026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/494026</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Fri, 02 Apr 2004 18:46:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichnen nach Tastatureingabe on Fri, 02 Apr 2004 18:50:01 GMT]]></title><description><![CDATA[<p>Hinter EndPaint(hwnd, &amp;ps); fehlt ein break;</p>
<p>Du zeichnest nach &quot;case VK_NUMPAD1:&quot; in den DeviceContext &quot;hdc&quot;, aber du hast hdc nirgendswo vorher initialisiert. Die Zeichenoperationen schlagen deshalb alle fehl...<br />
Durch &quot;InvalidateRect(hwnd, NULL, TRUE);&quot; wird eine WM_PAINT-Nachricht an dein Fenster gesendet und alles was du also vorher gezeichnet hast wird gelöscht.</p>
<p>Du solltest alle Zeichenoperationen in WM_PAINT machen, WM_PAINT wird an dein Fenster immer gesendet wenn Windows meint dein Fenster müsste neu-gezeichnet werden (z.B. wenn ein anderes Fenster dein Fenster verdeckt hatte oder wenn dein Fenster vergrößert oder verkleinert wird...) - Alles was du vorher woanders gezeichnet hättest würde dann immer verloren gehen da Windows im Normalfall bevor es die WM_PAINT-Nachricht sendet dein gesamtes Fenster einfach mit der Hintergrundfarbe übermalt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/494029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/494029</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Fri, 02 Apr 2004 18:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichnen nach Tastatureingabe on Fri, 02 Apr 2004 23:51:01 GMT]]></title><description><![CDATA[<p>Habs nun doch noch hinbekommen! <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="😃"
    /></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;Lines&quot;,
         WS_OVERLAPPEDWINDOW, 
         CW_USEDEFAULT,       
         CW_USEDEFAULT,       
         320,                
         220,                 
         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 int i=0;

 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;
    case VK_NUMPAD3:
         i=3;
         break;
   }
   InvalidateRect(hwnd, NULL, TRUE);
   return 0;
  }

  case WM_PAINT:
  {  
   PAINTSTRUCT            ps;
   HDC                   hdc;
   HPEN                 hpen;
   char rl[] = &quot; Rote Linie&quot;;
   char gl[] = &quot;Grüne Linie&quot;;
   char bl[] = &quot;Blaue Linie&quot;;

   hdc = BeginPaint(hwnd, &amp;ps);
   SetBkMode(hdc, TRANSPARENT);

   if(i == 1){                                     // Taste 1 = Rot
     SetTextColor(hdc, RGB(255,0,0));                 
     TextOut(hdc, 110, 20, rl, sizeof(rl)-1);
     hpen = CreatePen(PS_SOLID, 0, RGB(255,0,0));
     SelectObject(hdc, hpen);
     MoveToEx(hdc, 10, 40, NULL);
     LineTo(hdc, 300, 40);
     DeleteObject(hpen);
   }

   else if(i == 2){                                // Taste 2 = Grün
     SetTextColor(hdc, RGB(0,255,0));                 
     TextOut(hdc, 110, 70, gl, sizeof(bl)-1);
     hpen = CreatePen(PS_SOLID, 0, RGB(0,255,0));
     SelectObject(hdc, hpen);
     MoveToEx(hdc, 10, 90, NULL);
     LineTo(hdc, 300, 90);
     DeleteObject(hpen);
   }

   else if(i == 3){                                // Taste 3 = Blau
     SetTextColor(hdc, RGB(0,0,255));                 
     TextOut(hdc, 110, 120, bl, sizeof(rl)-1);
     hpen = CreatePen(PS_SOLID, 0, RGB(0,0,255));
     SelectObject(hdc, hpen);
     MoveToEx(hdc, 10, 140, NULL);
     LineTo(hdc, 300, 140);
     DeleteObject(hpen);
   }

   else if(i == 0){                                // Taste 0 = Alle Farben 
     SetTextColor(hdc, RGB(255,0,0));              // Default =      &quot;
     TextOut(hdc, 110, 20, rl, sizeof(rl)-1);
     hpen = CreatePen(PS_SOLID, 0, RGB(255,0,0));
     SelectObject(hdc, hpen);
     MoveToEx(hdc, 10, 40, NULL);
     LineTo(hdc, 300, 40);
     DeleteObject(hpen);
     SetTextColor(hdc, RGB(0,255,0));                    
     TextOut(hdc, 110, 70, gl, sizeof(gl)-1);
     hpen = CreatePen(PS_SOLID, 0, RGB(0,255,0));
     SelectObject(hdc, hpen);                           
     MoveToEx(hdc, 10, 90, NULL);
     LineTo(hdc, 300, 90);
     DeleteObject(hpen);
     SetTextColor(hdc, RGB(0,0,255));                 
     TextOut(hdc, 110, 120, bl, sizeof(bl)-1);
     hpen = CreatePen(PS_SOLID, 0, RGB(0,0,255));
     SelectObject(hdc, hpen);
     MoveToEx(hdc, 10, 140, NULL);
     LineTo(hdc, 300, 140);
     DeleteObject(hpen);
   }

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

  case WM_DESTROY:
       PostQuitMessage (0); 
       return 0;

  default:                     
       return DefWindowProc (hwnd, message, wParam, lParam);
 }
 return 0;
}
</code></pre>
<p>Danke euch allen für eure Hilfe!</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/494117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/494117</guid><dc:creator><![CDATA[Cloudcreature]]></dc:creator><pubDate>Fri, 02 Apr 2004 23:51:01 GMT</pubDate></item></channel></rss>