<?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[Edit-Control subclassen, ohne globale Variable (alte WndProc in GWLP_USERDATA verpacken ?)]]></title><description><![CDATA[<p>Schönen guten Abend <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>Also wie der Titel hoffentlich vermuten lässt, habe ich versucht ein EditControl zu subclassen, ohne dabei eine globale Variable zu verwenden.</p>
<p>Das Problem ist allerdings, sobald das Control erstellt wird beendet sich mein gesamten Programm (im Debug-Modus mit der Access-Violation, im Release-Modus sang und klanglos).</p>
<p>Hier der Code (gekürzt):</p>
<pre><code class="language-cpp">LRESULT CALLBACK RenameEditProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
{
	WNDPROC pfnPrevProc = reinterpret_cast&lt;WNDPROC&gt;(GetWindowLongPtr(hWnd, GWLP_WNDPROC));
	if(pfnPrevProc == NULL)
		return (DefWindowProc(hWnd, uiMessage, wParam, lParam));

	switch(uiMessage)
	{
		case WM_CHAR:
			// ToDo: ...
			return (0);
	}
	return (CallWindowProc(pfnPrevProc, hWnd, uiMessage, wParam, lParam));
}

// In der Parent-WndProc:

// Edit-Control für die Eingabe des neuen Dateinamens erstellen:
HWND hebxNewFileName = CreateWindowEx
	(0, TEXT(&quot;EDIT&quot;), pWndData-&gt;strCurName.c_str(),
	 WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL |
	 ES_NOHIDESEL, 16, 98, 269, 18, hWnd,
	 reinterpret_cast&lt;HMENU&gt;(EBX_NEW_FILE_NAME),
	 pWndData-&gt;hInstance, NULL);
// Schrift des Edit-Controls anpassen:
SendMessage(hebxNewFileName, WM_SETFONT, reinterpret_cast&lt;WPARAM&gt;(GetStockObject(DEFAULT_GUI_FONT)), TRUE);
// Edit-Control subclassen, um die Taste [Enter] (VK_RETURN) abzufangen:
WNDPROC pfnPrevProc = reinterpret_cast&lt;WNDPROC&gt;(GetWindowLongPtr(hebxNewFileName, GWLP_WNDPROC));
SetWindowLongPtr(hebxNewFileName, GWLP_USERDATA, reinterpret_cast&lt;LONG_PTR&gt;(pfnPrevProc));
SetWindowLongPtr(hebxNewFileName, GWLP_WNDPROC, reinterpret_cast&lt;LONG_PTR&gt;(RenameEditProc));
</code></pre>
<p>Wenn ich den Aufruf von <em>CallWindowProc</em> weglasse, funktioniert es, allerdings ist das Control (logischerweise) dann etwas 'verkrüppelt' <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>
<p>Danke schonmal für Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> !</p>
<p>PS: IDE ist Visual C++ 8.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/182822/edit-control-subclassen-ohne-globale-variable-alte-wndproc-in-gwlp_userdata-verpacken</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 08:38:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/182822.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 May 2007 15:45:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Edit-Control subclassen, ohne globale Variable (alte WndProc in GWLP_USERDATA verpacken ?) on Tue, 29 May 2007 15:45:45 GMT]]></title><description><![CDATA[<p>Schönen guten Abend <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>Also wie der Titel hoffentlich vermuten lässt, habe ich versucht ein EditControl zu subclassen, ohne dabei eine globale Variable zu verwenden.</p>
<p>Das Problem ist allerdings, sobald das Control erstellt wird beendet sich mein gesamten Programm (im Debug-Modus mit der Access-Violation, im Release-Modus sang und klanglos).</p>
<p>Hier der Code (gekürzt):</p>
<pre><code class="language-cpp">LRESULT CALLBACK RenameEditProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
{
	WNDPROC pfnPrevProc = reinterpret_cast&lt;WNDPROC&gt;(GetWindowLongPtr(hWnd, GWLP_WNDPROC));
	if(pfnPrevProc == NULL)
		return (DefWindowProc(hWnd, uiMessage, wParam, lParam));

	switch(uiMessage)
	{
		case WM_CHAR:
			// ToDo: ...
			return (0);
	}
	return (CallWindowProc(pfnPrevProc, hWnd, uiMessage, wParam, lParam));
}

// In der Parent-WndProc:

// Edit-Control für die Eingabe des neuen Dateinamens erstellen:
HWND hebxNewFileName = CreateWindowEx
	(0, TEXT(&quot;EDIT&quot;), pWndData-&gt;strCurName.c_str(),
	 WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL |
	 ES_NOHIDESEL, 16, 98, 269, 18, hWnd,
	 reinterpret_cast&lt;HMENU&gt;(EBX_NEW_FILE_NAME),
	 pWndData-&gt;hInstance, NULL);
// Schrift des Edit-Controls anpassen:
SendMessage(hebxNewFileName, WM_SETFONT, reinterpret_cast&lt;WPARAM&gt;(GetStockObject(DEFAULT_GUI_FONT)), TRUE);
// Edit-Control subclassen, um die Taste [Enter] (VK_RETURN) abzufangen:
WNDPROC pfnPrevProc = reinterpret_cast&lt;WNDPROC&gt;(GetWindowLongPtr(hebxNewFileName, GWLP_WNDPROC));
SetWindowLongPtr(hebxNewFileName, GWLP_USERDATA, reinterpret_cast&lt;LONG_PTR&gt;(pfnPrevProc));
SetWindowLongPtr(hebxNewFileName, GWLP_WNDPROC, reinterpret_cast&lt;LONG_PTR&gt;(RenameEditProc));
</code></pre>
<p>Wenn ich den Aufruf von <em>CallWindowProc</em> weglasse, funktioniert es, allerdings ist das Control (logischerweise) dann etwas 'verkrüppelt' <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>
<p>Danke schonmal für Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> !</p>
<p>PS: IDE ist Visual C++ 8.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1294608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294608</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 29 May 2007 15:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Edit-Control subclassen, ohne globale Variable (alte WndProc in GWLP_USERDATA verpacken ?) on Tue, 29 May 2007 16:12:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">LRESULT CALLBACK RenameEditProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
{
//  WNDPROC pfnPrevProc = reinterpret_cast&lt;WNDPROC&gt;(GetWindowLongPtr(hWnd, GWLP_WNDPROC));
  WNDPROC pfnPrevProc = reinterpret_cast&lt;WNDPROC&gt;(GetWindowLongPtr(hWnd, GWLP_USERDATA)); // &lt;- GWLP_USERDATA

  if(pfnPrevProc == NULL)
      return (DefWindowProc(hWnd, uiMessage, wParam, lParam));
...   

}

// weil :

WNDPROC pfnPrevProc = reinterpret_cast&lt;WNDPROC&gt;(GetWindowLongPtr(hebxNewFileName, GWLP_WNDPROC));
SetWindowLongPtr(hebxNewFileName, GWLP_USERDATA, reinterpret_cast&lt;LONG_PTR&gt;(pfnPrevProc));      // &lt;- pfnPrevProc ist in GWLP_USERDATA
SetWindowLongPtr(hebxNewFileName, GWLP_WNDPROC, reinterpret_cast&lt;LONG_PTR&gt;(RenameEditProc));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1294626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294626</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 29 May 2007 16:12:20 GMT</pubDate></item><item><title><![CDATA[Reply to Edit-Control subclassen, ohne globale Variable (alte WndProc in GWLP_USERDATA verpacken ?) on Tue, 29 May 2007 16:17:25 GMT]]></title><description><![CDATA[<p>OHA, rofl, joar das war n Copy&amp;Paste Bug *g*. Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> - alles klar^^ *sich-ärger*.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1294634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294634</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 29 May 2007 16:17:25 GMT</pubDate></item></channel></rss>