<?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[Event Callback Funktion]]></title><description><![CDATA[<p>Hallo,<br />
habe ein TreeView Steuerelement auf einem Dialog, diesen habe ich mit dem Ressourcen Editor im Visual Studio erstellt. Jetzt wollte ich die Nachricht WM_MOUSEMOVE abfangen. Aber leider geht das nur für den Dialog aber nicht auf dem plazierten TreeView.<br />
Hat einer eine Idee, wie die Nachrichten des TreeView auch auf die Eltern EventCallback Funktion weitergeleitet werden kann?</p>
<p>Noch was:<br />
Der Dialog hat nicht die MainWndProc sondern eine selbst definierte.<br />
Ist das der Grund dafür, dass es nicht geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196985/event-callback-funktion</link><generator>RSS for Node</generator><lastBuildDate>Sat, 02 May 2026 02:56:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196985.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Nov 2007 12:28:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Event Callback Funktion on Mon, 05 Nov 2007 12:28:16 GMT]]></title><description><![CDATA[<p>Hallo,<br />
habe ein TreeView Steuerelement auf einem Dialog, diesen habe ich mit dem Ressourcen Editor im Visual Studio erstellt. Jetzt wollte ich die Nachricht WM_MOUSEMOVE abfangen. Aber leider geht das nur für den Dialog aber nicht auf dem plazierten TreeView.<br />
Hat einer eine Idee, wie die Nachrichten des TreeView auch auf die Eltern EventCallback Funktion weitergeleitet werden kann?</p>
<p>Noch was:<br />
Der Dialog hat nicht die MainWndProc sondern eine selbst definierte.<br />
Ist das der Grund dafür, dass es nicht geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1397980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1397980</guid><dc:creator><![CDATA[Sisko86]]></dc:creator><pubDate>Mon, 05 Nov 2007 12:28:16 GMT</pubDate></item><item><title><![CDATA[Reply to Event Callback Funktion on Tue, 06 Nov 2007 02:32:13 GMT]]></title><description><![CDATA[<p>nein, das ist nicht der Grund.</p>
<p>Ich denke, die beste Möglichkeit wäre subclassing.<br />
Denn du wirst die WM_MOUSEMOVE bestimmt nicht einfach über ein Flag zum<br />
Parentdialog weiterreichen lassen können.</p>
<p>Ein Beispiel:</p>
<pre><code class="language-cpp">//...
static WNDPROC g_pOldViewProc; // Das hier ist ein Zeiger auf die originale Fensterprozedur des ListViews
//...
LRESULT CALLBACK NewViewProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    // Das ist die neue Prozedur für das ListView
    // also machen wir unser eigenes WM_MOUSEMOVE
    switch (msg)
    {
    case WM_MOUSEMOVE:
        {
            // irgendwie auf die Nachricht reagieren
            // in diesem Beispiel geben wir sie einfach an den Dialog weiter
            // ACHTUNG: die übergebenen Mauskoordinaten werden nun nicht mehr stimmen,
            // da diese relavtiv zum Fenster (in dem Falle zum ListView) sind.
            // Man müsste also die Mauskoordinaten eigentlich erst noch umrechnen, das spare ich mir jetzt aber
            return SendMessage(GetParent(hWnd), msg, wParam, lParam);
        } break;
    }
    // Den Rest lassen wir wie er war, also rufen wir die originale Fensterprozedur auf
    return CallWindowProc(g_pOldViewProc, hWnd, msg, wParam, lParam);
}

//...

// Jetzt muss das ListView nur gesagt bekommen, dass es eine neue Fensterprozedur hat.
// Also am besten gleich nach dem erstellen (im Dialog also bei WM_INITDIALOG)
    case WM_INITDIALOG:
        {
            // ...
            g_pOldViewProc = (WNDPROC)SetWindowLong(hWnd, GWL_WNDPROC, (LONG)NewViewProc);
            // Wenn das ganze auch für 64 Bit System funktionieren soll, so:
            // g_pOldViewProc = (WNDPROC)SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)NewViewProc);
            // ...
        } break;
// das wärs auch schon.
</code></pre>
<p>auf diese Weise würdest du eine WM_MOUSEMOVE automatisch an deinen Dialog weiterleiten.<br />
Um die richtigen Mauskoordinaten musst du dich natürlich noch kümmern.</p>
<p>Natürlich kannst du jetzt auch schon alles innerhalb der gesubclassten WndProc (NewViewProc) erledigen.</p>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398388</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Tue, 06 Nov 2007 02:32:13 GMT</pubDate></item></channel></rss>