Seite 2 von 2

Re: Mauszeiger rotieren

Verfasst: 02.05.2013 15:17
von STARGÅTE
Ich vermute mal die machen den echte Cursor "Invisible" und zeichen dann ihren eigenen Cursor/Bild.
Das kannst du mit PB ja auch machen:

Code: Alles auswählen

Enumeration
	#Window
	#Gadget
	#Image
EndEnumeration

Global Dim Image.l(31, 31)

UsePNGImageDecoder()

If CatchImage(#Image, ?Image)
	If StartDrawing(ImageOutput(#Image))
		DrawingMode(#PB_2DDrawing_AllChannels)
		For Y = 0 To 31
			For X = 0 To 31
				Image(X, Y) = Point(X, Y)
			Next
		Next
		StopDrawing()
	EndIf
EndIf

Procedure DrawRotatedImage(Array Image.l(2), X.i, Y.i, Angle.f)
	Protected Size.i = ArraySize(Image(),1)+1
	Protected U.f, V.f, IX.i, IY.i
	Protected Sin.f = Sin(Angle), Cos.f = Cos(Angle)
	For IY = -Size To Size
		For IX = -Size To Size
			U = Cos*IX - Sin*IY + 15.5
			V = Sin*IX + Cos*IY + 15.5
			If U >= 0 And U < Size And V >= 0 And V < Size And X+IX >= 0 And X+IX < OutputWidth() And Y+IY >= 0 And Y+IY < OutputHeight()
				Plot(X+IX, Y+IY, Image(Int(U), Int(V)))
			EndIf
		Next
	Next
EndProcedure


OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
SetGadgetAttribute(#Gadget, #PB_Canvas_Cursor, #PB_Cursor_Invisible)

Procedure Update()
	Protected MouseX.i = GetGadgetAttribute(#Gadget, #PB_Canvas_MouseX)
	Protected MouseY.i = GetGadgetAttribute(#Gadget, #PB_Canvas_MouseY)
	Protected Angle.f
	If StartDrawing(CanvasOutput(#Gadget))
		Angle.f = ATan2(MouseX-OutputWidth()/2, MouseY-OutputHeight()/2)
		Box(0, 0, OutputWidth(), OutputHeight(), $FFFFFF)
		DrawingMode(#PB_2DDrawing_AlphaBlend)
		DrawRotatedImage(Image(), MouseX, MouseY, -Angle)
		StopDrawing()
	EndIf
EndProcedure

Repeat
	
	Select WaitWindowEvent()
			
		Case #PB_Event_CloseWindow
			End
			
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #Gadget
					Update()
			EndSelect
			
	EndSelect
	
ForEver

DataSection
	Image:
	Data.q $0A1A0A0D474E5089,$524448490D000000,$2000000020000000,$7A7A730000000608,$47527301000000F4
	Data.q $0000E91CCEAE0042,$FF0044474B620600,$93A7BDA0FF00FF00,$7359487009000000,$60EA000060EA0000
	Data.q $00000076DEC98401,$05DD07454D497407,$42E8EB2428010D02,$544144494F030000,$55546C5B96EDC358
	Data.q $E873339CFFFF8614,$AC040B6D19952C6D,$B10AD02AC550EDAD,$1899BCA5A4691A8D,$A89183E351A2F8A2
	Data.q $2621360D6A9464A9,$F0C5F06925E318C6,$481789898A282C60,$2DA68495A960DA18,$A74C20614B4EA4B4
	Data.q $E9A1F2F7B399CCE1,$5F32FA090CE03A83,$D65F7F97DAF65EB2,$FFCF2793C9E40D9F,$F3E5A8F5DC97AF0C
	Data.q $D6FAED281A1D8CFB,$6DF66FAFC4CB9BDD,$E45EFD41AB632DB2,$256B8CFD5AF67A50,$79D0286569446B9E
	Data.q $A5DBB735A7E54D77,$F7CD7B4F162CEEB9,$6F8FD97CB2BD3C54,$47EF6780939C22B7,$1F9B1B47E0BABAD5
	Data.q $E5271C02FEDF5AE9,$7D60E91E7E202AE6,$6BC384CFE3CB726B,$AD32DB0C79EE8F6A,$69688DE5E1BDFD67
	Data.q $7596C6BEF7B1586A,$CF483A36245B0D15,$C167CDA10F23EB75,$E7610278BD5EF2CE,$770F01B75DB178C2
	Data.q $FEFFDBE81A5A5F6C,$620FEB5F3DDDC192,$F19BDD81BE33E61E,$AEF735EEAADAE364,$A63DAD16AA1C595F
	Data.q $189E390F8CCC7192,$594A7809F5922957,$4DABCA06165795B7,$FAA7138E77117E9A,$CC4E077DE1A1C9D5
	Data.q $E808BFD982337E77,$B2BF97EA9A45F0E9,$110024B7C4BAAABA,$791BC5140002000D,$0A410004340202E1
	Data.q $786064E7334BC7B4,$C7C7C76E747468EC,$D9772D1A61ED9670,$2C143DB2DDD4B79F,$AA84DE61716B0C03
	Data.q $D3F1C49ABE984013,$B7760EDD26276217,$FA17356B5B6F3FDB,$A2350611FFC505CD,$118E655A6CD73C67
	Data.q $AD01A111412A1ADC,$008426E344534445,$4E0D44E76735A21A,$455CEAE323CCCFA9,$85622B2A6C050780
	Data.q $1D5C2E490A4922DF,$210F1C580386F240,$A7E572CBC9C1A549,$0988A9438DEBB551,$B0E36C5E3A93FD00
	Data.q $9F91708D9179726D,$4256910880908884,$0C06943ECE9E0157,$CA64921111483003,$EA13FD33EACE8C13
	Data.q $E1947FDEDCEFAEC5,$57FE0D89F4B9AB83,$4A8341556BE683AB,$37FA4B89C253E643,$3E8C8DF06657E157
	Data.q $7372BAA123A4E840,$7E7985C84B215953,$EF4BF4A787C7569F,$B391D11A3346E0FE,$B4EF9BD48FE07972
	Data.q $6158693E470923D9,$CFC3915F4C055CFA,$364166B5AD2277EF,$E356EAB7B5262E02,$E4B065AD46823B81
	Data.q $3872FA94E4F09CFC,$BAF26F17F0FCEDE6,$DA957E7770B8E84E,$5F494F991EC3A7B7,$7000E0F81508C84D
	Data.q $433BE4B6B2AD3FBF,$0C2A2EC7A8F8144C,$37A7BAD353EEE94D,$B5EB178AD5FF25EA,$C6FE6D5BD8EA60F3
	Data.q $96B9DA4DF9F48499,$4A9E13039A62B2D9,$8DE8BFA13A6A7838,$3C9E4F23E7FCBDA6,$B5E7B3E2AB13F899
	Data.q $490000000064DE34,$00826042AE444E45
EndDataSection

Re: Mauszeiger rotieren

Verfasst: 02.05.2013 15:24
von Lambda
Es wäre eben nur provisorisch, wird außerhalb des Fensters gezogen, ist z.B kein Cursor mehr sichtbar.

Re: Mauszeiger rotieren

Verfasst: 02.05.2013 17:32
von Derren
Unter Windows könntest du beim Starten des Programms eine Anzahl an Cursorn erstellen. 180 im Extremfall. Oder halt irgendwas zwischen 4 and 180.
Diese Cursor solltest du dann auswählen können (mit API, wenn's mit den PB-eigenen Funktionen nicht klappt)

http://msdn.microsoft.com/de-de/library ... 85%29.aspx