Maus Position Ermitteln

Erstmal einen guten Abend.

Weis jemand von euch wie ich in MSVC++ die Mausposition abfragen kann?

Code:
#include <windows.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

int main()
{
  SetConsoleTitle("MeinProgramm");
  HWND hMeinFenster = FindWindow(NULL, "MeinProgramm");
  POINT mPos;

  while(1)
  {
    GetCursorPos(&mPos);
    cout << "X:" << mPos.x << "  Y:" << mPos.y << endl;
    system("cls");
  }
  return 0;
}

so geht es jedenfalls in der Konsole, aber nicht in Visual.
welche Header muss ich einbinden usw.

Wäre nett wenn ihr mir ein paar snippets oder so geben könntet.

(Google und MSDN spuckn nur unbrauchbare Sachen aus)

thx im voraus
 
ich seh keinen grund, wieso das in visual c nicht funktionieren sollte. was genau funktioniert denn nicht? die API die du nutzt (GetCursorPos) ist ne ganz normale winapi und sollte in jedem programm funktionieren, solange du windows.h eingebunden hast. dass cout etc. in nem gui programm nicht geht (zumindest nicht ohne AllocConsole()) ist n anderes problem..

mfg
 
Fehler 1 error C2065: 'POINT': nichtdeklarierter Bezeichner d:\verschieben\Form1.h 79
Fehler 2 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'mPos' d:\verschieben\Form1.h 79
Fehler 3 error C2065: 'mPos': nichtdeklarierter Bezeichner d:\verschieben\Form1.h 79
Fehler 4 error C3861: "GetCursorPos": Bezeichner wurde nicht gefunden. d:\verschieben\Form1.h 80


Code:
private: System::Void Form1_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) 
			 {
				 
					POINT mPos;
					GetCursorPos(&mPos);
                 
			 }


In der MSDN hab ich mir das auch schon angesehn.
Ich versteh aber nicht was ich dieser Funktion übergeben soll und ich weis auch nichteinmal warum einen Pointer.
Kann mir das bitte jemand erklären!
thx fia di mühe!

mfg sym
 
also die fehler die dir angezeigt werden sehen eigentlich so aus als ob du eine header-datei nicht eingebunden hättest. bist du sicher dass du windows.h in deinem projekt hast?
du musst deswegen einen pointer uebergeben, weil die Funktion deine zuvor initialisierte POINT-struktur mit den daten der Mauskoordinaten "füllt". hat mit der speicheralloziierung zu tun, da ansonsten die API den speicher alloziieren muesste und die das nur a) auf ihrem stack kann(wodurch er fuer deine funktion nicht benutzbar ist) oder b)global initiieren kann, wodurch du den speicher danach wieder freigeben muesstest, deswegen ist die pointer-lösung wohl die praktikabelste. [korrigiert mich wenn ich mist erzähle ;) ]
ist aber nicht der ausschlaggebende punkt, deinem compiler fehlt nur die definition der POINTER-struktur und der GetCursorPos-Funktion, was eigentlich nur der fall sein sollte, wenn windows.h nicht eingebunden ist.
edit: an der stelle in deinem programm wuerde ich jedoch eher wie MouseEventArgs-Klasse auswerten, die bei deiner MouseDown-Funktion vom system uebergeben wird. die hat nämlich zwei member, nämlich e.X und e.Y..


mfg
 
Der gepostete Code ist übrigens .net(also managed C++) und der von der Konsolenversion ist "normales" C++. Normale API-Aufrufe in .net sind zwar möglich(dabei müssen die APIs iirc auch noch speziell importiert werden), aber man sollte lieber die dafür bestehenden .net-Implementationen nehmen, wenn es welche gibt(bei GetCursorPos wahrscheinlich schon), sonst geht die Platformunabhängigkeit(sofern man bei .net überhaupt davon sprechen kann) verloren.
Also solltest du entweder das entsprechende .net-Äquivalent für GetCursorPos suchen oder unmanaged C++ verwenden.
 
@ heinzelJacKy: thx, jetz is mir das auch einigermaßen klar.

@Lesco Genau das wollte ich ja eigentlich wissen wie das in .net geht. In der MSDN ist leider auch nicht wirklich was brauchbares drinnen :-( (oder ich verstehs nur nicht)
 
Jungs, besten Dank für die Hilfe. Wenn man die MSDN nur oftgenug liest und es dann versteht, dann hilft es einem doch weiter.......
Hier der Code falls es wenn interessiert:

Code:
Point get_MousePosition();				
int x,y;
y = Control::MousePosition.Y;
x = Control::MousePosition.X;
MessageBox::Show(x.ToString()+","+y.ToString());

thx!!
 
Zurück
Oben