<?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[[gelöst!]Subclassing Editfelder]]></title><description><![CDATA[<p>Ich möchte Editfelder subclassen, um von Windows standardsmässig festgelegte Tasten oder die Maus abzufangen. Dies gelingt mir nur, wenn die Editfelder im Hauptfenster mit CreateWindow erzeugt und die Subclass-Funktion in WM_CREATE von WndProc eingefügt sind. Ich will das aber auch aus einem in einer Ressource definierten Dialog machen. Hier bekomme ich in der Dialogprozedur DlgProc kein WM_CREATE zu sehen. Also versuche ich es unter WM_INITDIALOG oder WM_ACTIVATE. Doch dort will nichts laufen.</p>
<p>--&gt; Compiler und Linker (BCB1) wollen nicht mit #define STRICT arbeiten. Zum Subclassen ist daher FARPROC statt WNDPROC einzusetzen. Ferner hatte ich ein en Fehler in der Indizierung der als Array verwalteten FARPROCs für die einzelnen Editfelder, der zum Absturz führen musste.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/217264/gelöst-subclassing-editfelder</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 11:10:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/217264.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Jul 2008 14:18:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst!]Subclassing Editfelder on Mon, 07 Jul 2008 07:42:58 GMT]]></title><description><![CDATA[<p>Ich möchte Editfelder subclassen, um von Windows standardsmässig festgelegte Tasten oder die Maus abzufangen. Dies gelingt mir nur, wenn die Editfelder im Hauptfenster mit CreateWindow erzeugt und die Subclass-Funktion in WM_CREATE von WndProc eingefügt sind. Ich will das aber auch aus einem in einer Ressource definierten Dialog machen. Hier bekomme ich in der Dialogprozedur DlgProc kein WM_CREATE zu sehen. Also versuche ich es unter WM_INITDIALOG oder WM_ACTIVATE. Doch dort will nichts laufen.</p>
<p>--&gt; Compiler und Linker (BCB1) wollen nicht mit #define STRICT arbeiten. Zum Subclassen ist daher FARPROC statt WNDPROC einzusetzen. Ferner hatte ich ein en Fehler in der Indizierung der als Array verwalteten FARPROCs für die einzelnen Editfelder, der zum Absturz führen musste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1541463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541463</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Mon, 07 Jul 2008 07:42:58 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst!]Subclassing Editfelder on Sat, 05 Jul 2008 15:03:00 GMT]]></title><description><![CDATA[<p>Lege diese globale Variable an:</p>
<pre><code class="language-cpp">WNDPROC g_wndpEdit;
</code></pre>
<p>Dann das Editfeld währen der Verarbeitung von WM_INITDIALOG deines Dialoges subclassen:</p>
<pre><code class="language-cpp">case WM_INITDIALOG:
    hWndEdit = GetDlgItem(hWnd, ID_DER_EDITBOX); //hWnd ist der Handle zu deinem Dialog
    g_wndpEdit = (WNDPROC)SetWindowLongPtr(hWndEdit, GWLP_WNDPROC,(LONG_PTR)EditSubclassProc);
    return TRUE;
</code></pre>
<p>hWndEdit ist der Handle auf die zu subclassende Editbox.</p>
<p>Dann die neue Prozedur(Funktion) für deine Editbox:</p>
<pre><code class="language-cpp">LRESULT CALLBACK EditSubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        case WM_: //Hier kannst du jetzt beliebige Nachrichten bearbeiten
            return TRUE;

        default:
            break;
    }
return(CallWindowProc(g_wndpEdit, hWnd, uMsg, wParam, lParam)); //ruft nochmal die Standardprozedur deiner Editbox auf,
                                                                //um nicht bearbeitete Nachrichten zu bearbeiten.
}
</code></pre>
<p>Ich hoffe ich konnte dir helfen.</p>
<p>[EDIT]<br />
Natürlich musst du in der Resourcedatei eine Editbox mit der entsprechenden ID definiert haben,die dann<br />
im Fenster deines Dialoges angezeigt wird.<br />
[/EDIT]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1541466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1541466</guid><dc:creator><![CDATA[jzd]]></dc:creator><pubDate>Sat, 05 Jul 2008 15:03:00 GMT</pubDate></item></channel></rss>