D
nein, das ist nicht der Grund.
Ich denke, die beste Möglichkeit wäre subclassing.
Denn du wirst die WM_MOUSEMOVE bestimmt nicht einfach über ein Flag zum
Parentdialog weiterreichen lassen können.
Ein Beispiel:
//...
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.
auf diese Weise würdest du eine WM_MOUSEMOVE automatisch an deinen Dialog weiterleiten.
Um die richtigen Mauskoordinaten musst du dich natürlich noch kümmern.
Natürlich kannst du jetzt auch schon alles innerhalb der gesubclassten WndProc (NewViewProc) erledigen.
MfG DrakoXP