MessageBox nach MausKlick!

03/29/2013 18:02 nawiat#1
Hey Leute ;)

Ich bin grade dabei, ein wenig in c++ zu üben. Ich benutzte dazu noch SDL,

wenn ich jetzt die linke Maustaste Drücke soll eine MessageBox kommen.
Das habe ich auch, nur er öffnet die sofort nachdem das Fenster offen ist !

Code:

Code:
while(gameRunning)
	{
		if(SDL_PollEvent(&event));
		{
			if(event.type == SDL_QUIT)
			{
				gameRunning = false;
			}
			if(event.type == SDL_KEYDOWN)
			{
				keys[event.key.keysym.sym] = true;
			}
			if(event.type == SDL_KEYUP)
			{
				keys[event.key.keysym.sym] = false;
		    }
			if(event.button.button == SDL_BUTTON_LEFT)
			{
				MessageBox(NULL, TEXT("test"), NULL, MB_OK);
				return 0;
			}
		}
muss da nochwas mit rann damit er weiß, erst nachdem gedrückt wurde ?

(MIT SDL_BUTTON_RIGHT GEHT ES!)
04/01/2013 10:27 jacky919#2
Du musst den Typ des Events abfragen, in deinem Falle mit SDL_MOUSEBUTTONDOWN vergleichen. Sollte es sich um einen Mousebutton-Event handeln, kannt du dann über event.button.button prüfen, ob der linke Mausknopf gedrückt ist.
Außerdem bietet es sich bei der Eventbehandlung in SDL immer an sowas wie switch(evnt.type) {...} zu schreiben. Das sieht meistens schöner aus als so ein riesiges if-Konstrukt. :)
Warum das mit dem rechten Mousbutton funktioniert hat, liegt daran, dass es sich bei SDL_Event um eine Unit, nicht um eine Struktur handelt, und du so auf Werte des eigentlich zu type gehörenden Eventfeldes zu gegriffen hast und dieser Wert in dem Falle genau dem des linken Mousebutton entsprach.

Edit: So hier noch der Code, um das etwas zu illustrieren
Code:
while (gameRunning)
{
	while (SDL_PollEvent(&event))
	{
		switch (event.type)
		{
		case SDL_QUIT:
			gameRunning = false;
			break;

		case SDL_KEYDOWN:
			keys[event.key.keysym.sym] = true;
			break;

		case SDL_KEYUP:
			keys[event.key.keysym.sym] = false;
			break;

		case SDL_MOUSEBUTTONDOWN:
			if(event.button.button == SDL_BUTTON_LEFT)
			{
				MessageBox(NULL, TEXT("test"), NULL, MB_OK);
				return 0; //wirklich return? nicht gameRunning = false;?
			}
			break;
		}
	}
}