Cursor in DirectX

fredlllll

Erfahrenes Mitglied
Wieder mal Hallo

Mein Problem ist, dass ich einen Cursor in meiner Anwendung möchte. Und zwar einen der gerendert wird und keinen öden Cursor der zur Form gehört.
Im SDK steht, man kann das mit
Visual Basic:
device.SetCursorProperties(XHotSpot, YHotSpot, Surface)
lösen. Die Hotspotkoordinaten zeigen an wo der Klickpunkt dann später sitzt.

jetz aber zum Problem: Dieses Surface Dingens:
pCursorBitmap
[in] Pointer to an IDirect3DSurface9 interface. This parameter must point to an 8888 ARGB surface (format D3DFMT_A8R8G8B8). The contents of this surface will be copied and potentially format-converted into an internal buffer from which the cursor is displayed. The dimensions of this surface must be less than the dimensions of the display mode, and must be a power of two in each direction, although not necessarily the same power of two. The alpha channel must be either 0.0 or 1.0.
Soweit ichs verstanden hab muss das eine Surface mit format A8R8G8B8 sein die x und y in 2hoch x hat. ich will dafür eine Grafik 32x32 nehmen. Alpha is mir in erster Linie mal egal, da ichs ja noch nichtmalschaffe den Cursor überhaupt zu laden.

Laut SDK ist es am einfachsten den Formcursor zu deaktivieren und dann einfach device.showcursor(true) zu machen.
schaut im sdk so aus:

C++:
case WM_SETCURSOR:
// Turn off window cursor. 
SetCursor( NULL );
m_pd3dDevice->ShowCursor( TRUE );
return TRUE; // Prevent Windows from setting cursor to window class cursor.
break;

in vb schaut das dann bei mir so aus
Visual Basic:
renderform.Cursor = Nothing 'renderform ist die parentform
graka.ShowCursor(True) 'graka ist das device

Das ergebnis davon ist nichts. Der Cursor der Form bleibt weiterhin er selbst. er wird nicht gerendert, da Er über die Grenzen des Fensters hinausgeht.
Die 2te Methode wäre dann also die oben angesprochene mit SetCursorProperties

Und diese Scheitert an dieser Surface.
Ich kann sie scheinbar nicht erstellen. oder nicht Rendern oder sonstwas is falsch.
Mit DirectInput fange ich die maus und die position des dxcursors habe ich auch schon in variablen und lasse sie derzeit per text anzeigen. und mit setcursorposition müsste ich dann von diesem nichtvorhandenen Cursor auch die Position beeinflussen können.
mit surfaceloader komme ich zu keinem Ergebnis:
Visual Basic:
            Dim surf As Surface
            SurfaceLoader.FromFile(surf, New Rectangle(0, 0, 32, 32), "cursor.bmp", New Rectangle(0, 0, 32, 32), Filter.Linear, 0)
            graka.SetCursorProperties(0, 0, surf)
            graka.ShowCursor(True)
wo soll da denn das 8888 herkommen das verlangt wird? nochdazu verursacht der surfaceloader hier auch noch einen "Fehler in der Anwendung".
surf ist die destsurface, das erste rect ist das destrectangle, dann kommt Filename, dann SourceRectangle, dann Filter und dann Colorkey

Erstellen soll man die surface aber mit einem von denen 3en:
CreateRenderTarget
CreateOffscreenPlainSurface
CreateDepthStencilSurface

das hat aber alles nichts mit einem Cursor zu tun. zwar ist dann dort das 8888 drin, aber wie krieg ich die Grafik des Cursors darein? Das ganze ist vorn und Hinten ein Dilemma.

Kann mir da vielleicht jemand Helfen? werde seit 2 tagen wahnsinnig mit dem zeug und in google habe ich dazu nichts gefunden
 

Neue Beiträge

Zurück