Problem mit einer Klasse

  • Themenstarter Themenstarter BLapBluPe
  • Beginndatum Beginndatum
B

BLapBluPe

Hey,
ich habe eine klasse in der es eine funktion gibt die ,die mausklicks eines fensters abfangen soll

diese funktionen gehen außerhalb der klasse ohne probleme jedoch spuckt vc++ mir einen error aus wenn ich sie in einer klasse verwenden will

und zwar kommt es bei nur einem parameter, hier mal der code:

Code:
class Pong
{
private:
	bool MausMove;
	bool eckemove;
	bool first;
	int PongX;
	int PongY;
	int PongW;
	int PongH;
	int DifX,DifY,DifX2,DifY2;
	
	bool eins;

public:

Pong(){
MausMove=false;
eckemove=false;
first=true;
eins=false;
 PongX=100;
 PongY=200;
PongW=240;
 PongH=80;
	}
LONG OldWndProc;
LRESULT CALLBACK NewWndProc(HWND Hwnd, UINT Message, WPARAM wParam, LPARAM lParam);
DWORD WINAPI Creation(LPVOID);
void start();







};









LRESULT CALLBACK Pong::NewWndProc(HWND Hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
	if (MouseIsOver(this->PongX, this->PongY,this->PongW, this->PongH)||this->eckemove||this->MausMove)
	{

		switch(Message)
		{
		case WM_LBUTTONDOWN:


			return 0;
			break;

		case WM_LBUTTONUP:
			return 0;
			break;

		case WM_LBUTTONDBLCLK:
			return 0;
			break;


		}

	}


	return CallWindowProc((WNDPROC)OldWndProc, Hwnd, Message, wParam, lParam);
}

DWORD WINAPI Pong::Creation(LPVOID)
{

	Sleep(2000);

	HWND hWnd = FindWindow(NULL,"Guild Wars");

	HMENU hCurrent = GetMenu(hWnd); //Get the CURRENT menu of the window
	HMENU hNew = CreateMenu(); //Create a new one

	AppendMenu(hCurrent, MF_STRING | MF_POPUP, (unsigned int)hNew, "Tutorial");
	AppendMenu(hNew, MF_STRING, 2000, "Button"); //2000 is the ID of the button
	DrawMenuBar(hWnd); //redraw the Menu!


	OldWndProc = SetWindowLong(hWnd, GWL_WNDPROC,(long)Pong::NewWndProc); //subclass the original window procedure
	//With our new one
	//So now all messages sent to the notepad window, are sent to OUR window proc..See above!

	return TRUE;
}


void EnemieWindow::start()
{



//



}




das problem liegt hier:


Code:
OldWndProc = SetWindowLong(hWnd, GWL_WNDPROC,(long)Pong::NewWndProc);

und zwar beim 3.parameter sagt mir vc++ jetzt

Code:
Fehler	4	error C2440: 'Typumwandlung': 'LRESULT (__stdcall Pong::* )(HWND,UINT,WPARAM,LPARAM)' kann nicht in 'long' konvertiert werden



was meint ihr woran das liegt?
ich grübele heute schon lange daran aber ich weiß nicht wie ich es anders schreiben kann so das es geht....


danke schonmal für eure vorschläge,ideen,lösungen etc.

=)
 
Hi.

Erstmal muß die Methode statisch sein.

Dann solltest du lieber die SetWindowLongPtr Funktion verwenden:
C++:
::SetWindowLongPtr(hWnd, GWL_WNDPROC, 
   reinterpret_cast<LONG_PTR>(&Pong::NewWndProc));
Gruß
 
danke für deine antwort aber fehler kommt immernoch ~.~

und ich hab noch ne frage: warum ist SetWindowLongPtr besser?
 
Hey,
also der Fehlercode ist jetzt folgender:

Code:
Fehler	4	error C2440: 'reinterpret_cast': 'LRESULT (__stdcall Pong::* )(HWND,UINT,WPARAM,LPARAM)' kann nicht in 'LONG_PTR' konvertiert werden

Danke schonmal für deine Hilfe =)
 
Zurück