Seite 1 von 1

Mausklick ohne ExamineMouse()

Verfasst: 16.11.2013 16:28
von Little Progger
Hey liebe Community!
Ich programmiere gerade ein Programm für die Schule und hab da folgendes Problem:
Ich habe ein Programm das im Fenstermodus läuft, schreibe aber die GUI selbst (weil mir die Windows-GUI nicht so gut gefällt...). Jedenfalls hab ich das Problem, dass ich die Maus nicht im Fenster einschließen will und ich wegen ReleaseMouse() kein MouseButton() mehr benutzen kann. Die Koordinaten kann ich ganz einfach mit WindowMouse() abfagen. Ich weiß aber nicht, wie ich jetzt einen Mausklick abfragen soll (ich hoffe ihr könnt mir bis hier her folgen).
Meine Lösung sieht bisher etwas improvisiert aus: Im Hintergrund habe ich einen Fenstergroßen Button (unsichtbar), mit dem ich immer überprüfen kann, ob gerade ein Mausklick stattgefunden hat. Ich kann damit allerdings nicht überprüfen, ob die Maustaste gerade immer noch gedrückt wird.
Wahrscheinlich hab ich einen komplett blöden Ansatz, aber ich frage mich, wie das funktionieren kann, wenn ich nicht die Windows-GUI benutze?
Danke schonmal für die Antworten ;)

Re: Mausklick ohne ExamineMouse()

Verfasst: 16.11.2013 16:48
von RSBasic
Eine nicht auf Windows basierte Benutzeroberfläche (Controls) zu erstellen, finde ich nicht so gut.
1. Ist es mit den anderen Fenstern nicht einheitlich
2. und es ist für Blinden usw. nicht vorteilhaft, weil du möglicherweise alles selbst zeichnest.

Wenn dir die Windows-Oberfläche (GUI) nicht gefällt, dann kannst du auch global Themes nutzen. Dann wirkt es auch auf allen Fenstern.

Wie zeichnest du deine eigenen Controls? Direkt aufs Fenster?
Wenn du CanvasGadget nutzt, dann hast du auch mehr Kontrolle über Ereignisse wie Tastatur und Maus. Siehe PB-Hilfe unter "CanvasGadget".
Da gibt es viele Events, die du abfragen kannst:
CanvasGadget() hat geschrieben:#PB_EventType_MouseEnter : Der Maus-Cursor "betrat" das Gadget
#PB_EventType_MouseLeave : Der Maus-Cursor verließ das Gadget
#PB_EventType_MouseMove : Der Maus-Cursor bewegte sich
#PB_EventType_MouseWheel : Das Maus-Rad wurde bewegt
#PB_EventType_LeftButtonDown : Der linke Maus-Knopf wurde gedrückt
#PB_EventType_LeftButtonUp : Der linke Maus-Knopf wurde los gelassen
#PB_EventType_LeftClick : Ein Klick mit der linken Maus-Taste
#PB_EventType_LeftDoubleClick : Ein Doppelklick mit der linken Maus-Taste
#PB_EventType_RightButtonDown : Der rechte Maus-Knopf wurde gedrückt
#PB_EventType_RightButtonUp : Der rechte Maus-Knopf wurde los gelassen
#PB_EventType_RightClick : Ein Klick mit der rechten Maus-Taste
#PB_EventType_RightDoubleClick: Ein Doppelklick mit der rechten Maus-Taste
#PB_EventType_MiddleButtonDown: Der mittlere Maus-Knopf wurde gedrückt
#PB_EventType_MiddleButtonUp : Der mittlere Maus-Knopf wurde los gelassen
#PB_EventType_Focus : Das Gadget erhielt den Tastatur-Fokus
#PB_EventType_LostFocus : Das Gadget verlor den Tastatur-Fokus
#PB_EventType_KeyDown : Eine Taste wurde gedrückt
#PB_EventType_KeyUp : Eine Taste wurde los gelassen
#PB_EventType_Input : Text-Eingabe wurde generiert
Oder nutzt du OpenWindowedScreen()? Willst du ein Spiel entwickeln oder eine Anwendung? Wenn zweiteres, dann lieber OpenWindow() nutzen.

Re: Mausklick ohne ExamineMouse()

Verfasst: 16.11.2013 17:40
von Little Progger
Danke, das mit dem CanvasGadget funktioniert super! :allright:
Wir haben zum Programm auch noch eine Präsentation, deshalb sollte das Programm im Stil der Präsentation sein (dafür zeichnen wir auch alles).
Zum Zeichnen benutz ich Sprite3D und die Drawingbefehle (Text, direkt auf den Screen).
Also eigentlich ist es eine Anwendung, benutze aber trotzdem OpenWindowedScreen() (wo liegt der Nachteil gegenüber OpenWindow()?).
Der für mich ziemlich entscheidende Vorteil ist einfach, dass ich mich mit meiner eigenen GUI wesentlich besser auskenne als mit der Windows-GUI und ich daher auch schneller damit arbeiten kann (habe leider nicht mehr allzu viel Zeit für das Projekt :S).
Ansonsten sehe ich keine direkten Nachteile an dieser Art, das Programm aufzubauen (Grafik schaut gut aus und die Verlangsamung durch die Drawingbefehle ist eigentlich nicht zu sehen).
Oder muss ich davon ausgehen, dass das Programm auf anderen Systemen dann nicht mehr planmäßig funktioniert?

Re: Mausklick ohne ExamineMouse()

Verfasst: 16.11.2013 18:07
von RSBasic
Es hat eher was mit dem Verwendungszweck zu tun.
Wenn du ein Spiel oder eine grafische Anwendung (z.B. Techdemo) erstellen möchtest, dann ist OpenWindowedScreen() sinnvoller.
Kommt immer darauf an, was das primäre Ziel deines Programms ist. Soll es aufwändige 2D-/3D-Grafiken/-Animationen zeigen oder soll es eine ganz normale Anwendung mit hübschen Controls sein?
Ich weiß nicht, wie deine Präsentation aussehen soll, aber wenn es grafisch aufwändig ist, dann würde ich OpenWindowedScreen() bevorzugen, weil es außerdem auf DirectX oder OpenGL basiert und weil es performancetechnisch besser ist.