hook setzen
-
long PrevWndProc; void CSubClassDlg::Init(HWND hWnd) { PrevWndProc = SetWindowLong(m_hWnd, GWL_WNDPROC, (long) SubWndProc); } void CSubClassDlg::UnHook(HWND hWnd) { SetWindowLong(hWnd, GWL_WNDPROC, PrevWndProc); } LRESULT CALLBACK CSubClassDlg::SubWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { return CallWindowProc((WNDPROC) PrevWndProc, hWnd, nMsg, wParam, lParam); }
Habe es gemacht wie auf http://www.winapi.net/index.php?inhalt=s27 aber es functioniert nicht! Er bringt mir immer einen Compilerfehler! error C2440: 'type cast' : 'long (__stdcall CSubClassDlg::*)(struct HWND__ *,unsigned int,unsigned int,long)' kann nicht in 'long' konvertiert werden
kann mir bitte jemmand weiterhelfen ?
-
Casten:
PrevWndProc = (WNDPROC) SetWindowLong(...
Achso und SubWndProc muss static sein, wenn du es in einer Klasse packst.
-
Achso, das mit dem Casten war falsch. Du hast PrevWndProc ja als long deklariert.
Dann liegt es wahrscheinlich am fehlenden static.
-
static long PrevWndProc;
void CSubClassDlg::Init(HWND hWnd) { PrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, (long) SubWndProc); } void CSubClassDlg::UnHook(HWND hWnd) { SetWindowLong(hWnd, GWL_WNDPROC, PrevWndProc); } LRESULT CALLBACK CSubClassDlg::SubWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { return CallWindowProc((WNDPROC) PrevWndProc, hWnd, nMsg, wParam, lParam); }
Fehler bleibt leider trotzdem!
-
Lies meinen Beitrag nochmal.
Die Methode SubWndProc sollte static sein
-
long PrevWndProc; void CSubClassDlg::Init(HWND hWnd) { PrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, (long) SubWndProc); } void CSubClassDlg::UnHook(HWND hWnd) { SetWindowLong(hWnd, GWL_WNDPROC, PrevWndProc); } static LRESULT CALLBACK CSubClassDlg::SubWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { return CallWindowProc((WNDPROC) PrevWndProc, hWnd, nMsg, wParam, lParam); }
Meinst du so ?
Geht leider auch nicht!error C2724: 'SubWndProc' : 'static' sollte nicht fuer Member-Funktionen verwendet werden, die ausserhalb der Klasse definiert werden
error C2440: 'type cast' : '' kann nicht in 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' konvertiert werden
Gruß Ronny
-
mach das nur in den Header.
-
error C2440: 'type cast' : '' kann nicht in 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' konvertiert werden
jetzt ist es nur noch einer!
Gruß Ronny
-
der ist in der SubWndProc beim aufruf von CallWindowProc...
-
Helft mir doch bitte!
Vielen Dank!
Gruß Captain Hook
-
Kannst du das Ding irgendwo hochladen?
-
-
thx
aber die adresse funktioniert nicht.
-
-
ah, jetzt weiß ich woran es liegt. du kannst in einer statischen Methode nicht auf die Membervariablen zugreifen. Mach PrevWndProc global bzw. static.
-
Danke! Es geht perfekt!
Was bedeutet denn eigentlich static ?Gruß Ronny
-
Also im Bezug auf Klassen: Wenn du in einer Member-Funktion nur auf statische Member-Variablen (nur eine Instanz für alle Objekte einer Klasse) bzw. eben nicht auf "normale" Member-Variablen zugreifst kannst du sie als static deklarieren. Die Member-Funktion bekommt dann keinen this-Pointer, weswegen du auch nicht mehr auf "normale" Member-Variablen zugreifen kannst. In diesem Fall ist dies erforderlich, da die Funktion sonst durch den automatisch zusätzlich übergebenen this-Pointer nicht mehr die inentische Signatur besitzt.
Hoffe, das stimmt jetzt auch so