|
You last visited: Today at 01:40
Advertisement
C++ Mouse Position Problem
Discussion on C++ Mouse Position Problem within the C/C++ forum part of the Coders Den category.
01/26/2013, 22:03
|
#1
|
elite*gold: 0
Join Date: Aug 2010
Posts: 199
Received Thanks: 29
|
C++ Mouse Position Problem
Hey Leute, ich bräuchte mal wieder eure Hilfe...
ich hab nen Code, der erkennt wo die maus ist, und den x&y wert ausgibt.
klappt auch ganz gut.
wollte jetzt so umschreiben, dass er wenn er an einer bestimmten Position steht und linksklick macht, eine Funktion ausführt. Leider (egal wo ich klicke) führt er nur die Erste Funktion aus... =(
Code:
int Neustart()
{
system("cls");
cout << "|*************************|" << endl; //cout bedeuted Ausgeben, also es gibt einen Text oder Variablen aus
cout << "| Zahlenraten |" << endl;
cout << "| By ME |" << endl;
cout << "| |" << endl;
cout << "|*************************|" << endl;
int versuche = 0;//Versuche werden auf 0 gesetzt
cout << "Bitte Nur!! Kleinbuchstaben!! und kein Buchstabe anstatt Zahl eingeben!" << endl;
cout << "Unendlich Versuche? (A) \n10 Versuche? (B)\n15 Versuche? (C)\n20 Versuche? (D)\nEigene Versuchsanzahl? (E)\nBeenden? (F)" << endl;
mouseInit();
showCursor();
bool running = true;
do
{
DWORD count;
INPUT_RECORD ir;
ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE),&ir,1,&count);
switch(ir.EventType)
{
case KEY_EVENT:
cin >> Auswahl_Anfang;//cin erfordet eine Eingabe von euch
switch(Auswahl_Anfang)//switch ist ein schalte, jenachdem was ihr eingegeben habt führt er aus.
{
case('a')://wenn ihr "a" eingegeben habt
system("cls");
cout << " Ihr Habt Unendlich Versuche gewaehlt" << endl;
max_versuche = 1000000000;//versuchsanzahl wird an ZahlenRaten() weitergegeben
ZahlenRaten();
case('b')://wenn ihr "b" eingegeben habt
system("cls");
cout << " Ihr Habt 10 Versuche gewaehlt" << endl;
max_versuche = 10;
ZahlenRaten();//führt ZahlenRaten() aus
case('c')://wenn ihr "c" eingegeben habt
system("cls");
cout << " Ihr Habt 15 Versuche gewaehlt" << endl;
max_versuche = 15;
ZahlenRaten();
case('d'):
system("cls");
cout << " Ihr Habt 20 Versuche gewaehlt" << endl;
max_versuche = 20;
ZahlenRaten();
case('e'):
system("cls");
cout << " Ihr gebt eure Eigene Versuchsanzahl an " << endl;
Versuche_Eigene();//führt Versuche_Eigene() aus
case('f'):
exit(0);// Gibt dem Programm den Befehl, zu Beenden
default://Falls keines der oben stehenden Möglichkeiten zutrifft
cout << "Falsche Eingabe!\n(A), (B) oder (C) oder (D) oder (E) in Kleinbuchstaben bitte" << endl;//führt er cout aus, also gibt den TExt wieder
Falsche_Eingabe_Anfang();//und führt danach Falsche_Eingabe_Anfang aus.
}
case MOUSE_EVENT:
if((ir.Event.MouseEvent.dwMousePosition.X = 32) & (ir.Event.MouseEvent.dwMousePosition.Y = 280) & ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)
{
system("cls");
cout << "Unendlich versuche wurden gewaehlt" << endl;
max_versuche = 1000;
ZahlenRaten();
} if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 281) && ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)
{
system("cls");
cout << " Ihr Habt 10 Versuche gewaehlt" << endl;
max_versuche = 10;
ZahlenRaten();
} if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 283) && ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)
{
system("cls");
cout << " Ihr Habt 15 Versuche gewaehlt" << endl;
max_versuche = 15;
ZahlenRaten();
} if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 284) && ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)
{
system("cls");
cout << " Ihr Habt 10 Versuche gewaehlt" << endl;
max_versuche = 20;
ZahlenRaten();
} if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 285) && ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)
{
system("cls");
cout << " Ihr gebt eure Eigene Versuchsanzahl an" << endl;
Versuche_Eigene();
} if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 286) && ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)
{
exit(0);
}
break;
}
}
while(running);
}
Das Programm funktioniert ansonsten einwandfrei, alles nach plan, bis auf wenn ich mit der Maus agiere, immer nur die erste fkt ausgeführt wird.
Hab sogar probiert, ir.Event.MouseEvent.dwMousePosition.X == 32 zu schreiben, anstatt einem =
PS: ist ne konsolenanwendung und mit microsoft c++ 2010 express erstellt
Danke schonmal
Edit: Achja, ich hab natürlich alles includiert
es ist nix rot unterstrichen
steht im code oben aber nicht dran
|
|
|
01/26/2013, 22:38
|
#2
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
|
Welche erste Funktion meinst du?
Ansonsten:
if((ir.Event.MouseEvent.dwMousePosition.X = 32) & (ir.Event.MouseEvent.dwMousePosition.Y = 280) usw)
-> Vergleiche müssen mit == gemacht werden, das und, das du meinst, macht man mit &&, so ist das ein logischer AND-Operator & den brauchst du da nicht.
|
|
|
01/26/2013, 22:47
|
#3
|
elite*gold: 0
Join Date: Aug 2010
Posts: 199
Received Thanks: 29
|
Code:
if((ir.Event.MouseEvent.dwMousePosition.X = 32) & (ir.Event.MouseEvent.dwMousePosition.Y = 280) & ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)
{
system("cls");
cout << "Unendlich versuche wurden gewaehlt" << endl;
max_versuche = 1000;
ZahlenRaten();
die funktion meine ich, habs grade so gemacht wie du gesagt hast, jz ewrkennt er die maus aber nichtmehr und führt garnichts aus -.-
also so stehts jetz bei mir da :
Code:
if((ir.Event.MouseEvent.dwMousePosition.X = 32) & (ir.Event.MouseEvent.dwMousePosition.Y = 280) & (ir.Event.MouseEvent.dwButtonState) & (FROM_LEFT_1ST_BUTTON_PRESSED))
|
|
|
01/26/2013, 22:56
|
#4
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Versuch && und nicht &. && ist ein logisches und, & ist ein binäres und.
|
|
|
01/26/2013, 22:58
|
#5
|
elite*gold: 0
Join Date: Aug 2010
Posts: 199
Received Thanks: 29
|
ich hab schon alles probiert, sogar == und ||(ist falsch, ich weiß) auch hab ich mal kleine klammern mal mehr etc.
Daran liegts sicher nicht
Aber trzdm danke
immo siehts so aus:
Code:
case MOUSE_EVENT:
if((ir.Event.MouseEvent.dwMousePosition.X = 32) & (ir.Event.MouseEvent.dwMousePosition.Y = 280) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED))
{
system("cls");
cout << "Unendlich versuche wurden gewaehlt" << endl;
max_versuche = 1000;
ZahlenRaten();
} if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 281) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED))
{
system("cls");
cout << " Ihr Habt 10 Versuche gewaehlt" << endl;
max_versuche = 10;
ZahlenRaten();
} if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 283) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED))
{
system("cls");
cout << " Ihr Habt 15 Versuche gewaehlt" << endl;
max_versuche = 15;
ZahlenRaten();
} if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 284) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED))
{
system("cls");
cout << " Ihr Habt 10 Versuche gewaehlt" << endl;
max_versuche = 20;
ZahlenRaten();
} if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 285) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED))
{
system("cls");
cout << " Ihr gebt eure Eigene Versuchsanzahl an" << endl;
Versuche_Eigene();
} if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 286) && ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)
{
exit(0);
}
|
|
|
01/26/2013, 23:03
|
#6
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
|
if((ir.Event.MouseEvent.dwMousePosition.X == 32) && (ir.Event.MouseEvent.dwMousePosition.Y == 280) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED))
^so probiert?
Das Problem: Wenn die Bedingung der if-Schleife erfüllt ist, springt das Programm da rein und führt die Funktion aus. Bisher wurde die Bedingung wohl immer erfüllt. Mit dem Code am Anfang meines Posts sollte es nur gehen, falls x ==32, y == 280 && die Maustaste gedrückt ist / wird.
|
|
|
01/26/2013, 23:10
|
#7
|
elite*gold: 0
Join Date: Aug 2010
Posts: 199
Received Thanks: 29
|
erkennt jetzt die maus nicht bzw. reagiert nicht drauf
|
|
|
01/26/2013, 23:59
|
#8
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Selbstverständlich liegt das (auch) am &&! & macht etwas ganz anderes...
|
|
|
01/27/2013, 02:20
|
#9
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Quote:
Originally Posted by snow911
Das Problem: Wenn die Bedingung der if-Schleife erfüllt ist
|
Quote:
Selbstverständlich liegt das (auch) am &&! & macht etwas ganz anderes...
|
Ist zwar theoretisch richtig, praktisch ergibt es aber (fast) dasselbe.
Wenn ich die Ergebnisse von boolschen Ausdrücken binär &-verknüpfe, kommt halt ne binäre Zahl raus, die dieselbe Wahrheitstabelle wie das logische && hat und wird dann als Abfragewert für das if verwendet ;O
Der Unterschied liegt allerdings natürlich darin, dass & kein short-circuit-Operator ist.
Problematischer ist da wohl das einfache =. Für Vergleiche wird == verwendet!
|
|
|
01/27/2013, 02:24
|
#10
|
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
|
Quote:
Originally Posted by Dromerace
erkennt jetzt die maus nicht bzw. reagiert nicht drauf
|
evtl liegt es einfach daran das du mti der maus einfach nicht die koordinaten (32,280) triffst?
du könntest am ende ein
Code:
else
{
std::cout << "Position: X=" << ir.Event.MouseEvent.dwMousePosition.X<< " Y=" << ir.Event.MouseEvent.dwMousePosition.Y << std::endl;
}
einfügen um zu überprüfen ob die mausposition richtig war.
Quote:
Originally Posted by Nightblizard
Selbstverständlich liegt das (auch) am &&! & macht etwas ganz anderes...
|
in dem beispiel von snow911 sehe ich keine fehler.
|
|
|
01/27/2013, 02:57
|
#11
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
|
Quote:
Originally Posted by MrSm!th
|
Werde ich Mittwoch meinem Dozenten um die Ohren hauen.
Aber okay, der erklärt auch, dass nach dem Call die Parameter gepusht werden..
@nkkk: Ich glaube, Nightblizard meinte auch Dromeraces Code.
Aber das mit dem std::cout der Koordinaten ist eine gute Idee, das ist sicher nen Versuch wert.
|
|
|
01/27/2013, 03:12
|
#12
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Quote:
Werde ich Mittwoch meinem Dozenten um die Ohren hauen.
|
Exmatrikulieren!
|
|
|
01/27/2013, 13:09
|
#13
|
elite*gold: 0
Join Date: Aug 2010
Posts: 199
Received Thanks: 29
|
Ich hab jetzt den Fehler gefunden, weis aber irgendiwe nur nicht, durch was er hervorgerufen wird oder wie ich ihn beheben kann.
Hab ich jetzt eingefügt:
Code:
else if((ir.Event.MouseEvent.dwMousePosition.X = 3) && (ir.Event.MouseEvent.dwMousePosition.Y = 280))
{
cout << "Position: X=" << ir.Event.MouseEvent.dwMousePosition.X << " Y=" << ir.Event.MouseEvent.dwMousePosition.Y<< endl;
}
und EGAL! wo die maus ist, es wird ausgegeben: x=3 und y=280, da es wahrscheinlich kein änderbarer wert ist, kann ich das iwie ändern?
|
|
|
01/27/2013, 13:13
|
#14
|
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
|
Also ich bin mir ziemlich sicher das du nicht nur auf einen einzigen Pixel am
Bildschirm klicken willst...
Du wirst erst einen "Bereich" aussuchen müssen wohin
du klicken willst.
Dafür würde sich eine kleine Struktur eignen:
Code:
struct _rectangle
{
int x;
int y;
int rx;
int ry;
};
(oder RECT aus windows.h)
Die position der Maus würde ich mit GetCursorPos() bestimmen.
Zu verwenden ist das so:
Code:
#include <windows.h>
//.....
POINT pCursorPos;
GetCursorPos(&pCursorPos);
Danach solltest du dir eine Funktion schreiben, so in
etwa würde ich den Prototyp wählen:
Code:
bool isPointInRect (_rectangle Area, POINT Point);
Letztendlich kannst du mit dem ganzen Zeug dann
bestimmen ob dein geklickter Punkt in einem
bestimmten Bereich liegt, und je nach dem eine
Funktion ausführen.
Code:
if (GetAsyncKeyState(VK_LBUTTON) && isPointInRect(Area, Point))
{
//DoStuff
}
|
|
|
01/27/2013, 14:07
|
#15
|
elite*gold: 420
Join Date: Jan 2012
Posts: 1,030
Received Thanks: 981
|
Quote:
Originally Posted by Dromerace
Code:
else if((ir.Event.MouseEvent.dwMousePosition.X = 3) && (ir.Event.MouseEvent.dwMousePosition.Y = 280))
{
cout << "Position: X=" << ir.Event.MouseEvent.dwMousePosition.X << " Y=" << ir.Event.MouseEvent.dwMousePosition.Y<< endl;
}
und EGAL! wo die maus ist, es wird ausgegeben: x=3 und y=280, da es wahrscheinlich kein änderbarer wert ist, kann ich das iwie ändern?
|
Dazu ist nicht viel mehr zu sagen als
Quote:
Originally Posted by MrSm!th
Problematischer ist da wohl das einfache =. Für Vergleiche wird == verwendet!
|
|
|
|
|
|
Similar Threads
|
USB Mouse Problem
01/05/2012 - Technical Support - 6 Replies
Hi Leute.
Ich habe mir heute dir Cyborg R.A.T. 7 gekauft als ich sie in den USB Port angeschlossen habe ging ja noch alles ich konnte sie bewegen usw.
Aber beim treiber instalieren wurde sie nicht erkannt sie wird nierentswo erkannt ich kann mit ihr klicken sie bewegen nimmt der PC alles an aber treiber instalieren geht nicht.. Hilfe währe sehr nett ;)
MFG
|
mouse problem :S
12/10/2011 - Main - 5 Replies
hallo epvpers com,
ich habe ein problem,undzwar folgendes:Meine linke Maustaste macht ab und an einen Doppelklick obwohl ich nur 1mal drücke,das behindert mich manchmal beim spielen und ich habe nachteile dadurch.Muss ich irgendetwas bei den Einstellungen ändern(wenn ja:wo?) oder ist etwas kaputt an meiner Maus.Meine Maus ist per Kabel an meinem Pc angebracht.
Danke an alle antworten.
grüße leagueoflolz
|
Neue Waffen Problem (Position)
04/22/2010 - Metin2 Private Server - 0 Replies
Hallöle @all
Heut' habe ich mir etwas Zeit für neue Waffen genommen. Wenn die vollständig geworden sind, exportierte ich die in .gr2 Format... nachdem ich mich inGame eingeloggt habe, sah ich das die Waffe nicht in der Hand sitzt sondern im Luft schwebt
Ich habe dann ein Schwert +0 genommen und meine Waffe auf gleiche Position gesetzt. Trotzdem hat es nicht's gebracht :(... auch nur die Klinge habe ich ersetzt... gescheitert!
Kann jemand mir etwas helfen? :confused:
|
[C#]Simple Program For Getting Mouse Position
06/06/2009 - CO2 Programming - 1 Replies
I just thought i'd release this simple program i put together it's useful for making bots in autoit and autohotkey etc. Just makes finding the X and Y co-ords simple.
Download Cursor Position
|
[Request]AutoIt3 Capture mouse position in a variable?
01/17/2008 - Tutorials - 1 Replies
I'm trying to make a small simple to use botting program and I noticed the mouse click command needs coordinates. I looked thru the list of functions etc. Couldent find a way to store your current mouse position into a variable of X and Y **Or something like that** so I figured I would come to the forum and ask if anyone knows a way how?
|
All times are GMT +2. The time now is 01:40.
|
|