Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 03.08.2006, 12:32 Titel: Wie kann ich einen eigenen Mouse Zeiger laden |
|
|
Hallo,
Wie kann ich einen eigenen Mouse Zeiger laden,
muss er ein bmp sein ??
irgend wie mit
SetCursor(LoadImage(NULL,"cursor.png",IMAGE_CURSOR,0,0,0));
SetCursor(LoadCursor(NULL,"cursor.bmp"));
oder was muss ich tun ?
gruss danke |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 03.08.2006, 12:41 Titel: |
|
|
Womit arbeitest du denn? Du kannst einfach den Standardzeiger auschalten und ein Sprite an die Position der Maus rendern. |
|
Nach oben |
|
|
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 03.08.2006, 12:42 Titel: |
|
|
ja kann ich machen aber das sprite zieht sich zu langsam an die richtige stelle |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 03.08.2006, 12:44 Titel: |
|
|
Was für eine API verwendest du? Und wie renderst du das Sprite? |
|
Nach oben |
|
|
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 03.08.2006, 13:04 Titel: |
|
|
ah ich hab was bei direct x gelesen:
Code: |
HRESULT SetCursorProperties(
UINT XHotSpot,
UINT YHotSpot,
IDirect3DSurface9 * pCursorBitmap
);
und
void SetCursorPosition(
INT X,
INT Y,
DWORD Flags
);
|
ist fast alles klar nur was muss ich mit:
IDirect3DSurface9 * pCursorBitmap;
pCursorBitmap-> was soll ich da angeben und wo kann ich mein bild laden ?? |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 03.08.2006, 13:14 Titel: |
|
|
Da gab's doch so 'ne Funktion 'D3DXCreateSurfaceFromFileEx' oder so ähnlich. Oder du lädst die Grafik per Hand und kopierst sie dir in ein Surface. |
|
Nach oben |
|
|
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 03.08.2006, 13:52 Titel: |
|
|
ist ja wahnsinnig schwierig !
gibt es denn niergends ein beispiel |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
|
Nach oben |
|
|
Loigie Junior JLI'ler
Anmeldedatum: 29.06.2004 Beiträge: 52 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 06.08.2006, 10:51 Titel: |
|
|
Ich mach das so:
CPP: | #pragma once
class CFenster //Fenster Klasse CFenster
{
public:
HWND CreateFenster(HINSTANCE hInstance,WNDPROC WinProc,UINT ScrWidth,UINT ScrHeight,BOOL Fullscreen,LPCTSTR WindowName,
LPCTSTR Icon,LPCTSTR Cursor)
{
hIcon = NULL;
hCursor = NULL;
hIcon =(HICON)LoadImage(NULL,Icon,IMAGE_ICON, 32, 32,LR_LOADFROMFILE);
if(hIcon==NULL)
{
MessageBox(NULL,"Icon konnte nicht eingelesen Werden!","",MB_OK);
}
hCursor =(HICON)LoadImage(NULL,Cursor,IMAGE_ICON, 32, 32,LR_LOADFROMFILE);
if(hCursor==NULL)
{
MessageBox(NULL,"Cursor konnte nicht eingelesen Werden!","",MB_OK);
}
WNDCLASSEX winclass; //Struktur zum Speichern der eigenschaften des Fensters
winclass.cbSize = sizeof(WNDCLASSEX); //Größe der Struktur
winclass.lpfnWndProc = WinProc; //Zeiger auf die Callback Funktion
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hInstance; //Instanz des Programms
winclass.hIcon = hIcon; //Logo das geladen werden soll
winclass.hCursor = (HCURSOR)hCursor; //Mauszeiger der geladen werden soll
winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //Hintergrund Farbe des Fensters
winclass.lpszMenuName = NULL; //Name des Menüs(es wird keins verwendet)
winclass.lpszClassName = "CFenster"; //(Klasse)Name des Fensters
winclass.hIconSm = NULL; //Icon das geladen werden soll
UINT Style;
if(!Fullscreen)
{
winclass.style = CS_HREDRAW | CS_VREDRAW; //Still des Fensters
Style = WS_OVERLAPPEDWINDOW | WS_POPUP | WS_VISIBLE;
}
else
{
winclass.style = 0, //Still des Fensters
Style = WS_POPUP | WS_VISIBLE;
}
if (!RegisterClassEx(&winclass)) //Fenster bei Windows registrieren lassen
{
return(NULL);
}
return CreateWindowEx( //Eigentliches Fenster erstellen
0, //
"CFenster", //Name der Fensterklasse
WindowName, //Zeile die in der Titelzeile angezeigt wird
Style, //Still(z.B. Sichtbar)
0,0, //Position an dem das Fenster erstellt wird(oben links)
ScrWidth, //Breite des Fensters
ScrHeight, //Hohe des Fensters
NULL, //Handel des Übergeortneten Fenster(gibt keins)
NULL,
hInstance,
NULL); //Instanz des Programms
};
~CFenster()
{
DestroyIcon(hIcon);
DestroyIcon(hCursor);
};
private:
HICON hIcon;
HICON hCursor;
};
|
[Edit by Mod]Ich hab mal aus "code" "cpp" gemacht, liest sich einfach besser[/Edit]
Das Bild des Cursor wird als ico File angegeben. |
|
Nach oben |
|
|
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 04.09.2006, 16:31 Titel: |
|
|
Was stimmt hie nicht ?
Code: |
hr = m_lpD3DDevice->SetCursorProperties (0,0, lpSurface);
if (FAILED (hr))
{
return false;
}
m_lpD3DDevice->ShowCursor(true);
|
bei:
hr = m_lpD3DDevice->SetCursorProperties (0,0, lpSurface);
mag er nicht mehr
kann mir da jemand helfen
Zuletzt bearbeitet von peterbub am 05.09.2006, 08:13, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 04.09.2006, 16:45 Titel: |
|
|
Ich vermute das die Datei cursor.png nicht dem 8888 ARGB surface Format entspricht. Oder etwas hiermit nicht übereinstimmt:
Zitat: |
[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.
|
Ausserdem fragt man sich weshalb du zuerst auf lpSurface eine neues Surface erstellst und danach ein Surface lädst? _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 04.09.2006, 17:04 Titel: |
|
|
weil ich sonst einen absturz bekomme
ne das war es leider auch nicht |
|
Nach oben |
|
|
Loigie Junior JLI'ler
Anmeldedatum: 29.06.2004 Beiträge: 52 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 04.09.2006, 17:37 Titel: |
|
|
Übergib doch mal die Rückgabewerte der DirectX Funktionen DXGetErrorDescription9();
vielleich gibt die ja eine genauere Fehlerbeschreibung. So ist es auf jeden fall
schwer etwas über die Ursache eines Fehler zu sagen.
Die Funktion CreateOffscreenPlainSurface() solltest du eigentlich weg lassen können, da D3DXLoadSurfaceFromFile() ein Surface von alleine anlegt. |
|
Nach oben |
|
|
|