Seite 1 von 1

Vernünftige Mausabfrage im Windowed-Screen

Verfasst: 28.08.2010 20:22
von NathanielBlack
Hallo,

Wie kriegt man eine gute Mausabfrage im Windowed-Screen hin. Die Frage bezieht sich vor allem auf die Maus-Klicks.

Wenn man im WindowedScreeen "ExamineMouse()" aufruft, steht die Maus ja nicht mal mehr außerhalb des Spiels zu Verfügung. Also man kann die Maus nicht mehr aus dem WindowedScreen bewegen.

Die Maus-Koordinaten sind ja leicht abzufragen mit "WindowMouseX()" und "WindowMouseY()" - aber Maus-Klicks gehen ja nur über Gadgets abzufragen. Ich will sie aber "im freien Bildschirm" abfragen die Maus-Klicks.

Wie geht das? Wie macht ihr das?

Danke im Vorraus,
NathanielBlack

Re: Vernünftige Mausabfrage im Windowed-Screen

Verfasst: 28.08.2010 23:03
von darius676
#WM_LBUTTONDOWN; #WM_RBUTTONDOWN...als Event abfragen.

hab da auf die schnelle ein Beispiel gefunden, ist jedoch sehr überladen.- der rote bereich beinhaltet die schlüsselwörter.
aus
http://purearea.net/pb/german/index.htm


; German forum: http://www.purebasic.fr/german/archive/ ... highlight=
; Author: zenturio (updated for PB4.00 by blbltheworm)
; Date: 07. January 2004
; OS: Windows
; Demo: No

#WM_CAPTURECHANGED=533

Procedure WndProc(hhWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_CAPTURECHANGED
Debug lParam
Debug "Mouse Capturechanged"
ProcedureReturn 0
EndSelect
ProcedureReturn DefWindowProc_(hhWnd,uMsg,wParam,lParam)
EndProcedure

hwnd = OpenWindow(1,10,10,300,300,"",#PB_Window_SystemMenu)
SetCapture_(hwnd)
SetWindowCallback(@WndProc())

Repeat
Select WaitWindowEvent()
Case #WM_LBUTTONDOWN : A$ = "Left Mouse Button pressed"
Case #WM_LBUTTONUP : A$ = "Left Mouse Button released"
Case #WM_MOUSEMOVE : A$ = "Mouse has moved"
Case #PB_Event_CloseWindow: End
EndSelect
SetWindowText_(hwnd, A$):
ForEver

Re: Vernünftige Mausabfrage im Windowed-Screen

Verfasst: 28.08.2010 23:56
von NathanielBlack
Sehr nett,
danke!

Warum ist sowas eigentlich nicht in der Hilfe? :angry:

Re: Vernünftige Mausabfrage im Windowed-Screen

Verfasst: 29.08.2010 22:05
von Falko
Das sind Windows-API-Funktionen, welche von PB unterstützt werden.
Zur Beschreibung gibt es da andere Hilfen wie win32.hlp, ApiViewer etc.

Ein Beispiel zu diesen Messages findest du z.B. hier und auch in der PB-Hilfe:

http://www.purearea.net/pb/german/manua ... lback.html

Gute Hilfen leisten die WinApi Library: http://www.rsbasic.de/ von rsbasic
der APIViewer2004 : http://www.activevb.de/rubriken/apiview ... iewer.html
als auch die winhelp32: http://www.codingcrew.de/programmierung ... hp?kat=sdk
Besonders interessant sollte es sein sich die SDK herunterzuladen und zu installieren.


Gruß Falko

Re: Vernünftige Mausabfrage im Windowed-Screen

Verfasst: 29.08.2010 22:14
von edel
Deine Links sind leider nicht mehr aktuell. Das neue SDK gibt es hier
http://www.microsoft.com/downloads/deta ... laylang=en

Re: Vernünftige Mausabfrage im Windowed-Screen

Verfasst: 29.08.2010 22:21
von Falko
Danke für den aktuelleren SDK-Link :allright:

Gruß Falko

Re: Vernünftige Mausabfrage im Windowed-Screen

Verfasst: 29.08.2010 22:24
von ts-soft
Das wichtigste zum SDK und PB fehlt natürlich: http://www.realsource.de/index.php/down ... s-?start=5

Gruß
Thomas

Re: Vernünftige Mausabfrage im Windowed-Screen

Verfasst: 01.09.2010 13:03
von Schlumpf
In deinem anderen Thread habe ich einen Link gepostet.

Re: Vernünftige Mausabfrage im Windowed-Screen

Verfasst: 02.09.2010 16:33
von Josef Sniatecki
Man kann Mausklicks auch unabhängig von Fensterereignissen behandeln:

Code: Alles auswählen

;Buffer zurücksetzen:
GetAsyncKeyState_(#VK_LBUTTON)
GetAsyncKeyState_(#VK_ESCAPE)

;Los gehts:
Repeat
  If GetAsyncKeyState_(#VK_LBUTTON) = -$7FFF
    Debug "Klick!"
  EndIf
  Delay(1)
Until GetAsyncKeyState_(#VK_ESCAPE)
Sobald man jedoch schon mit Fensterereignissen arbeitet, ist dieser (Um)weg völlig überflüssig.

Quelle:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState.
D.h. falls eine Taste runter gedrückt wird und vorher durch GetAsyncKeyState kein Tastendruck realisiert wurde, erhält man den Wert "-$7FFF".

Gruß Josef