nco2k hat geschrieben:bug nummer 8.)
wenn man im folgenden code (welcher InitMouse() : ExamineMouse() beinhaltet), auf ein darüber liegendes fenster wie z.b. dem debbuger klickt und anschliessend wieder auf diese anwendung, dann wird der mousecursor auf die letzte gespeicherte position zurückversetzt. das sollte fred irgendwie beheben/ändern. bei einem ego shooter wäre sowas tödlich.

Wieso sollte das tödlich sein? Es macht dort weiter wo es
aufgehört hat, und ist IMO OK so.
Für viele Spiele-Arten (inkl. EGO-Shooter) nimmt man auch
nicht die Mausposition X und Y, sondern die Bewegung seit
dem letzten Check. Siehe MouseDeltaX/Y.
nco2k hat geschrieben:ausserdem wird beim alt+tab taskswitch oder beim rechtsklick (kontextmenü) auf die anwendung in der taskleiste, die einschränkung des mousecursors nicht aufgehoben, es sei den man öffnet das startmenü mittels der win-tasten und geht ohne umwege direkt dorthin (zur taskleiste) und rechtsklickt die anwendung.
Kein Wunder bei Deinem Code. Schau Dir mal den Befehl
ReleaseMouse() an:
Code: Alles auswählen
Procedure IsWindowActive()
If GetForegroundWindow_() = WindowID()
Result = #True
Else
Result = #False
EndIf
ProcedureReturn Result.l
EndProcedure
If InitSprite() = 0 Or InitMouse() = 0
End
EndIf
hWnd.l = OpenWindow(0, 0, 0, 800, 600, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Test")
If OpenWindowedScreen(hWnd, 0, 0, WindowWidth(), WindowHeight(), 0, 0, 0) = 0
End
EndIf
Repeat
Delay(10)
FlipBuffers()
ClearScreen(0, 0, 0)
StartDrawing(ScreenOutput())
Circle(MouseX(),MouseY(), 16, RGB(255, 0, 0))
StopDrawing()
If IsWindowActive() = #True And ScreenSwitched = #False
ExamineMouse()
ElseIf IsWindowActive() = #True And ScreenSwitched = #True
ScreenSwitched = #False
ReleaseMouse(0)
Else
ScreenSwitched = #True
ReleaseMouse(1)
EndIf
Select WindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
End
nco2k hat geschrieben:aber wie sieht es mit 5.), 6.) und nun der 8.) aus?? über
feedback würde ich mich freuen,
Entschuldige bitte wenn ich das so direkt sagen muß, aber
es sieht irgendwie so aus als wenn Du nicht richtig weißt
was Du da machst. Bist Du gerade auf einem Bug-Suche-Trip?
Das mit der ALT-Taste habe ich Dir schon gesagt. Das ein
ALT+Return mit SystemMenu nicht funktioniert, ist somit
auch sehr wahrscheinlich.
Bei Deinen letzten Codes verwendest Du überall das ALT
und hast Probleme damit.
Aber schau doch nur mal Deinen letzten Code an: Du öffnest
einen windowed Screen, zeichnest aber dann mit WindowOutput()
auf das Fenster, und nicht auf den Screen.
Weiterhin nimmst Du WindowMouseX() und WindowMouseY().
Diese beiden Befehle haben aber absolut nichts mit DX und
ExamineMouse() zu tun. ExamineMouse() fragt die aktuellen
Koordinaten für MouseX/Y und MouseDeltaX/Y ab.
In Deinen ganzen "Bug-Reports" mixt Du API und PB-Befehle
auf eine komische Art.
Was sollen denn dauernd die vielen GetAsyncKeyState_()
ohne den Rückgabewert zu verwenden?
Bei Beispiel 5 ist es ganz schlimm:
Code: Alles auswählen
GetAsyncKeyState_(#VK_TAB)
GetAsyncKeyState_(#VK_F4)
GetAsyncKeyState_(#VK_MENU)
GetAsyncKeyState_(#VK_LWIN)
GetAsyncKeyState_(#VK_RWIN)
Zu dem minimieren des Screens: Ein Screen hat kein SystemMenu.
Deshalb hat der Screen auch kein Fenster-Menu bei Rechtsklick
in der Taskbar.
Probier es mit einem Fenster ohne SystemMenu aus:
Da funktioniert es genauso. Da kein SystemMenu vorhanden
ist, wird nur das Fenster aktiviert.
Wenn Du im obigen Code zu einer anderen Anwendung wechselst
und danach in der Taskbar das Rechtsklick-Menu von "Test"
aufrufst, dann verschwindet der MouseCursor.
Warum? Ganz einfach: Bei diesem Rechtsklick wird das Fenster
schon aktiviert und nach vorne geholt, so daß sofort ExamineMouse()
aufgerufen wird, und den Cursor verschwinden lässt.
Mach nach dem ExamineMouse() ein Beep_(800,100) rein
und probier es aus.
Wenn Du die Windows-Tasten drückst und danach ESC, dann
geht das StartMenu wieder zu. Der Focus geht nicht zu Deinem
Fenster zurück, weil er noch immer auf dem StartMenu-Button
liegt. Wenn Du dann Return drückst, öffnet sich das StartMenu
wieder.
Zu Deinem:
Code: Alles auswählen
PostMessage_(GetWindow_(FindWindow_("Shell_TrayWnd", 0), #GW_CHILD), #WM_LBUTTONDOWN, 0, 0)
Nicht gerade die feine Art. Vor allem sendest Du nur das der
Button gedrückt wurde, nicht aber das loslassen danach.
Wenn man auf die Taskbar klickt und danach die Maus bewegt,
dann kann man die Taskbar in eine andere Ecke ziehen, solange
der MouseButton gedrückt ist.
Alles in allem sehe ich hier eigentlich keine Bugs. Du codest
einfach irgendwas zusammen wie es Dir gefällt, beachtest
aber dabei nicht wie Windows funktioniert (z.B. ALT-Taste,
StartMenu-Fokus usw.).
Es funktioniert dann nicht so wie Du es Dir wünschst, und Du
meinst jedesmal es ist ein PB-Bug.
Ich hab auch echt keine Lust alle paar Tage diese Codes
auszuprobieren, um Dir dann zu erklären wie Windows
funktioniert.
IMHO ist hier alles logisch erklärbar, und ich kann keine
Bugs sehen.