Código
//---------------------------------------------------------------------------
class a
{
private:
WNDPROC lpPrevProc;
LRESULT CALLBACK NewProc(HWND, UINT, WPARAM, LPARAM);
public:
void Hookea (HANDLE);
...
};
//---------------------------------------------------------------------------
void a::Hookea (HANDLE hWnd)
{
lpPrevProc = (WNDPROC)GetWindowLong((HWND__*)hWnd, GWL_WNDPROC);
SetWindowLongA((HWND__*)hWnd, GWL_WNDPROC, (DWORD)NewProc);
// E2235 Member function must be called or its address taken Compiler error
// Probe con "(DWORD)&a::RealWinWndProc" pero me dice
// E2031 Cannot cast from 'type1' to 'type2' Compiler error
}
//---------------------------------------------------------------------------
LRESULT CALLBACK a::NewProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY:
MessageBox(hwnd, "Adios Mundo", "Bye!!!", MB_ICONINFORMATION);
break;
}
return CallWindowProc(lpPrevProc, hwnd, uMsg, wParam, lParam);
}
//---------------------------------------------------------------------------
Alli estan los errores comentados que me tira el compilador, pero no entiendo el por que, pues he visto algun ejemplo en VC++ y justamente se hace esto:
Código
SetWindowLongA(hWnd, GWL_WNDPROC, (DWORD)(&a::NewProc));
Pero cuando lo paso al CBuilder e intento compilar me sale con que:
E2031 Cannot cast from 'long (__stdcall a::*)(HWND__ *,unsigned int,unsigned int,long)' to 'unsigned long'
Ahora, si hago lo mismo, pero programando estructuradamente, o sea, sin clases, no hay problemas y me coge la linea de la siguiente forma sin quejarse:
Código
SetWindowLongA((HWND__*)hWnd, GWL_WNDPROC, (DWORD)NewProc);
Mi pregunta, como puedo obtener el puntero al metodo a::NewProc para poder pasarlo como parametro en SetWindowLong como DWORD???, que estoy haciendo mal o que me falta por hacer???
Agradeceria cualquier ayuda al respecto, de verdad que esto ya me esta dando dolores de cabeza.

Gracias por leer
Saludos


 
  




 Autor
 Autor
		




 En línea
									En línea
								



