<?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[WM_KEYDOWN in Editfenster nutzen]]></title><description><![CDATA[<p>Ich will in einem Editfenster, also in einem, wo man Text eingeben kann, die Message WM_KEYDOWN nutzen. Das Problem ist, dass diese deaktiviert wird im Editfenster. Eigentlich brauche ich auch nur die Entertaste, um mit ihr dann die Speicherung des Textes in einen Buffer auszulösen. Für diesen Zweck gibt es auch bei CreateWindow den Style ES_WANTRETURN, mit dem man in mehrzeiligen Editfenstern Enter für andere Zwecke als Zeilenumbruch nutzen kann. Nur funktioniert es nicht.. Ich will auf Enter eine MessageBox ausl;sen, welche aber nicht kommt. Sobald ich jedoch den Fokus auf das Parentwindow lenke funktioniert es. Also liegt es irgendwie am Editfenster. Hier mein Code. Ich hoffe jemand weiß meinen Fehler. Man beachte nur WM_CREATE und WM_KEYDOWN. Bei WM_SETFOCUS kann man den Fokus auf hwnd, also das parent setzen, und die messagebox unter WM_KEYDOWN wird ausgeführt. Aber wie kann man nun auch Enter mit dem Fokus auf das Editfenster nutzen?</p>
<pre><code>#include &lt;windows.h&gt;

#define ID_EDIT     1

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

TCHAR szAppName[] = TEXT (&quot;X&quot;) ;

char * lpString;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     HWND     hwnd ;
     MSG      msg ;
     WNDCLASS wndclass ;

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;

     if (!RegisterClass (&amp;wndclass))
     {    // UNICODE-Compilierung ist die einzige realistische Fehlermöglichkeit 
          MessageBox (NULL, TEXT (&quot;Programm arbeitet mit Unicode und setzt Windows NT voraus!&quot;), 
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }

     hwnd = CreateWindow (szAppName, szAppName,
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ; 

     while (GetMessage (&amp;msg, NULL, 0, 0))
     {
          TranslateMessage (&amp;msg) ;
          DispatchMessage (&amp;msg) ;
     }
     return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static HWND hwndEdit ;

     switch (message)
     {
     case WM_CREATE :
          hwndEdit = CreateWindow (TEXT (&quot;edit&quot;), NULL,
                         WS_CHILD | WS_VISIBLE | WS_BORDER |  
                         ES_LEFT | ES_AUTOHSCROLL | ES_MULTILINE | ES_WANTRETURN,
                         0, 0, 0, 0, hwnd, (HMENU) ID_EDIT,
                         ((LPCREATESTRUCT) lParam) -&gt; hInstance, NULL) ;
          return 0 ;

     case WM_SETFOCUS :
          SetFocus (hwndEdit) ;
          return 0 ;

     case WM_SIZE : 
          MoveWindow (hwndEdit, 10, 19, 400,20, TRUE) ;
		  return 0 ;

     case WM_DESTROY :
          PostQuitMessage (0) ;
          return 0 ;

	 case WM_KEYDOWN:
		 switch(wParam)
		 {
			  case VK_RETURN:
MessageBox(NULL,TEXT(&quot;X&quot;),TEXT(&quot;HDHF&quot;),0);
			  break;
		 }
		 return 0;

     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/220008/wm_keydown-in-editfenster-nutzen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Apr 2026 02:08:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220008.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Aug 2008 19:13:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to WM_KEYDOWN in Editfenster nutzen on Sun, 10 Aug 2008 19:13:53 GMT]]></title><description><![CDATA[<p>Ich will in einem Editfenster, also in einem, wo man Text eingeben kann, die Message WM_KEYDOWN nutzen. Das Problem ist, dass diese deaktiviert wird im Editfenster. Eigentlich brauche ich auch nur die Entertaste, um mit ihr dann die Speicherung des Textes in einen Buffer auszulösen. Für diesen Zweck gibt es auch bei CreateWindow den Style ES_WANTRETURN, mit dem man in mehrzeiligen Editfenstern Enter für andere Zwecke als Zeilenumbruch nutzen kann. Nur funktioniert es nicht.. Ich will auf Enter eine MessageBox ausl;sen, welche aber nicht kommt. Sobald ich jedoch den Fokus auf das Parentwindow lenke funktioniert es. Also liegt es irgendwie am Editfenster. Hier mein Code. Ich hoffe jemand weiß meinen Fehler. Man beachte nur WM_CREATE und WM_KEYDOWN. Bei WM_SETFOCUS kann man den Fokus auf hwnd, also das parent setzen, und die messagebox unter WM_KEYDOWN wird ausgeführt. Aber wie kann man nun auch Enter mit dem Fokus auf das Editfenster nutzen?</p>
<pre><code>#include &lt;windows.h&gt;

#define ID_EDIT     1

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

TCHAR szAppName[] = TEXT (&quot;X&quot;) ;

char * lpString;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     HWND     hwnd ;
     MSG      msg ;
     WNDCLASS wndclass ;

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;

     if (!RegisterClass (&amp;wndclass))
     {    // UNICODE-Compilierung ist die einzige realistische Fehlermöglichkeit 
          MessageBox (NULL, TEXT (&quot;Programm arbeitet mit Unicode und setzt Windows NT voraus!&quot;), 
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }

     hwnd = CreateWindow (szAppName, szAppName,
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ; 

     while (GetMessage (&amp;msg, NULL, 0, 0))
     {
          TranslateMessage (&amp;msg) ;
          DispatchMessage (&amp;msg) ;
     }
     return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static HWND hwndEdit ;

     switch (message)
     {
     case WM_CREATE :
          hwndEdit = CreateWindow (TEXT (&quot;edit&quot;), NULL,
                         WS_CHILD | WS_VISIBLE | WS_BORDER |  
                         ES_LEFT | ES_AUTOHSCROLL | ES_MULTILINE | ES_WANTRETURN,
                         0, 0, 0, 0, hwnd, (HMENU) ID_EDIT,
                         ((LPCREATESTRUCT) lParam) -&gt; hInstance, NULL) ;
          return 0 ;

     case WM_SETFOCUS :
          SetFocus (hwndEdit) ;
          return 0 ;

     case WM_SIZE : 
          MoveWindow (hwndEdit, 10, 19, 400,20, TRUE) ;
		  return 0 ;

     case WM_DESTROY :
          PostQuitMessage (0) ;
          return 0 ;

	 case WM_KEYDOWN:
		 switch(wParam)
		 {
			  case VK_RETURN:
MessageBox(NULL,TEXT(&quot;X&quot;),TEXT(&quot;HDHF&quot;),0);
			  break;
		 }
		 return 0;

     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1562374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562374</guid><dc:creator><![CDATA[Cyber Samurai]]></dc:creator><pubDate>Sun, 10 Aug 2008 19:13:53 GMT</pubDate></item><item><title><![CDATA[Reply to WM_KEYDOWN in Editfenster nutzen on Mon, 11 Aug 2008 08:56:01 GMT]]></title><description><![CDATA[<p>Cyber Samurai schrieb:</p>
<blockquote>
<p>Für diesen Zweck gibt es auch bei CreateWindow den Style ES_WANTRETURN, mit dem man in mehrzeiligen Editfenstern Enter für andere Zwecke als Zeilenumbruch nutzen kann.</p>
</blockquote>
<p>Korrekt. Und - ist Dein Edit auch mehrzeilig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562516</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Mon, 11 Aug 2008 08:56:01 GMT</pubDate></item><item><title><![CDATA[Reply to WM_KEYDOWN in Editfenster nutzen on Mon, 11 Aug 2008 10:13:01 GMT]]></title><description><![CDATA[<p>Ja, mit dem Style ES_MULTILINE gibt man es unter CreateWindow an. Funktioniert dennoch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562567</guid><dc:creator><![CDATA[Cyber Samurai]]></dc:creator><pubDate>Mon, 11 Aug 2008 10:13:01 GMT</pubDate></item><item><title><![CDATA[Reply to WM_KEYDOWN in Editfenster nutzen on Mon, 11 Aug 2008 11:14:52 GMT]]></title><description><![CDATA[<p>Oh, ich hab auch Schwachsinn gepostet, hätte mir Deinen Code mal richtig anschauen sollen <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="🤡"
    /> . Du musst natürlich subclassen, da das Edit keine WM_KEYDOWN-Nachrichten an sein Parent sendet <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/1562621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562621</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Mon, 11 Aug 2008 11:14:52 GMT</pubDate></item><item><title><![CDATA[Reply to WM_KEYDOWN in Editfenster nutzen on Mon, 11 Aug 2008 16:02:51 GMT]]></title><description><![CDATA[<p>Das geht nur über 'Subclassen' der beteiligten Editfelder! Hier fügst Du vor der üblichen Windows-Bearbeitung eine eigene CALLBACK-Funktion ein, in der jede Benutzereingabe abgefangen werden kann. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Nicht ganz einfach <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562779</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Mon, 11 Aug 2008 16:02:51 GMT</pubDate></item></channel></rss>