Vernünftige Mausabfrage im Windowed-Screen

Anfängerfragen zum Programmieren mit PureBasic.
NathanielBlack
Beiträge: 63
Registriert: 25.12.2009 18:48

Vernünftige Mausabfrage im Windowed-Screen

Beitrag 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
Benutzeravatar
darius676
Beiträge: 512
Registriert: 08.03.2010 22:12
Computerausstattung: Intel i5 16GB RAM nVidia 1050, Win11
Atari Jaguar, Surface Pro 5,Surface Laptop i5 7200, XBOX ONE X, XBOX Series X
Wohnort: AT
Kontaktdaten:

Re: Vernünftige Mausabfrage im Windowed-Screen

Beitrag 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
NathanielBlack
Beiträge: 63
Registriert: 25.12.2009 18:48

Re: Vernünftige Mausabfrage im Windowed-Screen

Beitrag von NathanielBlack »

Sehr nett,
danke!

Warum ist sowas eigentlich nicht in der Hilfe? :angry:
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Vernünftige Mausabfrage im Windowed-Screen

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Vernünftige Mausabfrage im Windowed-Screen

Beitrag von edel »

Deine Links sind leider nicht mehr aktuell. Das neue SDK gibt es hier
http://www.microsoft.com/downloads/deta ... laylang=en
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Vernünftige Mausabfrage im Windowed-Screen

Beitrag von Falko »

Danke für den aktuelleren SDK-Link :allright:

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Vernünftige Mausabfrage im Windowed-Screen

Beitrag von ts-soft »

Das wichtigste zum SDK und PB fehlt natürlich: http://www.realsource.de/index.php/down ... s-?start=5

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Schlumpf
Beiträge: 19
Registriert: 21.03.2010 00:52
Wohnort: Der Puff von Schlumpfhausen

Re: Vernünftige Mausabfrage im Windowed-Screen

Beitrag von Schlumpf »

In deinem anderen Thread habe ich einen Link gepostet.
PB 4.41 - Win XP pro
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Re: Vernünftige Mausabfrage im Windowed-Screen

Beitrag 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
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Antworten