# [C++] mauszeiger position



## rook (8. April 2003)

```
#include <stdio.h>
#include <windows.h>
#include "resource.h"

LRESULT CALLBACK MainProc(HWND, UINT, WPARAM, LPARAM);
POINT pt;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow)
{	
   	DialogBox (NULL, MAKEINTRESOURCE(IDD_MAIN), 0, (DLGPROC) MainProc);

	return 0;
}

LRESULT CALLBACK MainProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	char temp[25];
	GetCursorPos(&pt);
	sprintf(temp, "Maus: x: %i, y: %i", pt.x, pt.y);
	SetDlgItemText(hwnd, IDC_MPOS, temp);
    switch (message) 
	{			
		case WM_INITDIALOG:		
			break;

		case WM_COMMAND:
			switch (LOWORD(wParam)) 
			{	
				case IDC_WMTITEL:
					//...
					break;
			}
			break;		

		case WM_CLOSE:	
			EndDialog(hwnd, 0);
			break;

	}
    return false;
}
```

ich will mir die mauszeiger position anzeigen lassen, aber nicht nur in dem programm, sondern auch auf dem desktop... 
das problem ist jez, an welcher stelle ich die mauszeiger position caputren soll, sodass sie mir immer in meinem "MainProc" angezeigt wird....
die funktion MainProc wird nur aufgerufen, wenn ich z.b. den mit dem mauszeiger drüber fahre...


```
char temp[25];
	GetCursorPos(&pt);
	sprintf(temp, "Maus: x: %i, y: %i", pt.x, pt.y);
	SetDlgItemText(hwnd, IDC_MPOS, temp);
```

wo bau ich nun diesen teil des programmes ein?
in der WinMain funktion ist das ziemlich unpassend...


```
DialogBox (NULL, MAKEINTRESOURCE(IDD_MAIN), 0, (DLGPROC) MainProc);
```
wenn ich ihn davor capture, ist es zu früh... und nach diesem code abschnitt ist die dialogbox auch schon wieder geschlossen...
die funktion MainProc wird ja wiederum nur aufgerufen wenn ich etwas mit dem programm mache... also auch unpassend...

ich hoffe ihr versteht was von meinem gelaber, bin nähmlich schon ziemlich müde 

danke...

EDIT:
lol, die uhrzeit geht ja auch falsch in dem forum 
es ist jetzt 5:01 uhr^^


----------



## goela (8. April 2003)

Die Mausebewegungen werden logischerweise nur dann "erkannt", wenn Du über das Fenster Deiner Anwendung bewegst.

Willst Du die Mauskoordinaten global lesen, musst Du die Maus "capturen". Gibt einen Befehl "SetCapture".
Oder Du löst das Ganze mit einem Hook.

Schau mal hier im Forum. Vor einiger Zeit, wurde sowas hier schon diskutiert!


----------



## rook (8. April 2003)

nee... 
GetCursorPos() <- die funktion captured den cursor "global"...
hat nichts mit meiner anwendug zu tun... 
ich muss diese funktion aber irgendwo anders aufrufen, als in der "MainProc" funktion, da die nur dann aufgerufen wird, wenn ich in meinem programm arbeite...


----------



## goela (8. April 2003)

Du hast mich nicht richtig verstanden!
Mit dem Wort "Global" meinte ich, dass Du die Mauskoordinaten nur dann lesen kannst, wenn Du die Maus an Deine Applikation "bindest". Also wie beispielsweise mit "SetCapture". Lies Dir mal die Beschreibung über SetCapture (MFC) durch, dann weisst Du was ich meine!

Andere Variante ist, wenn Du einen Thread oder Timer programmierst, wo Du dann immer die Mauskoordinaten lesen kannst!
Die Idee mit dem Hook ist etwas hoch gegriffen!


----------



## rook (8. April 2003)

na, hab dich nit verstanden... ich war zu müde =)
also mit dem timer, das hört sich gut an...
ich mag kein MFC, ich verwende reine WINAPI...


----------

