Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

1

04.10.2007, 15:35

Cursorressource laden und setzen geht net -.-

wieder mal ein problem -.-

ich möchte ein programm schreiben, was den mauszeiger umstellt. Dazu muss ich soweit ich weiss mit loadcursor den entsprechenden laden. dabei habe ich eine neue resource vom typ cursor gemacht und als IDC_CURSOR1 gelassen. nun wollte ich wie folgt laden:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <windows.h>
#include "resource.h"

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
    MSG msg;

        //IDC_CURSOR1 geht net zu übergeben

    HCURSOR Cursor = LoadCursor(hInstance,"cursor1.cur");
    SetCursor(Cursor);

    while(TRUE)
    {
        
        if (GetMessage(&msg,NULL,0,0))
        {
            if(msg.message == WM_CLOSE) break;
            if(msg.message == WM_SETCURSOR) SetCursor(Cursor);
        }
    }

    return 0;
}


das laden klappt, aber er wird nicht angezeigt

2

04.10.2007, 20:45

Zitat

das laden klappt, aber er wird nicht angezeigt

Woher weißt du das? Wenn das laden einfach NULL zurückgibt dann funktionierts und der Fehler liegt beim laden. Das kannst du aber abfragen (if (Cursor == NULL)...). Ansonsten bau mal ein GetLastError ein dass hilft bei der WinAPI fast immer und prüf den Rückgabewert von SetCursor.
Ansonsten kann ich dir auch nicht helfen denn eigentlich müsste dein Code korrekt sein!
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

04.10.2007, 21:12

Ist der Cursor Teil deiner Programmresourcen? Füg die Cursordatei einfach mal in dein Projekt ein und verwende statt den Namen das Macro MAKEINTRESOURCE.
@D13_Dreinig

4

04.10.2007, 22:48

Yep, etwa so:
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE( IDC_CURSOR1 ));
ShowCursor(true);
fka tm

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

04.10.2007, 23:21

Jo, so ungefähr... :idea:
@D13_Dreinig

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

6

05.10.2007, 17:38

@david: jo den hab ich in der resource hinzugefügt.

hab mal nen bissle abgeändert. aba trotzdem nix angezeigt ich probier noch getLasterror. wollt trotzdem nochma senden.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <windows.h>
#include "resource.h"

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
    MSG msg;
    BOOL ende = FALSE;

    HCURSOR Cursor = LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR1));
    if (Cursor == NULL) ende = TRUE;

    SetCursor(Cursor);
    ShowCursor(TRUE);

    while(!ende)
    {
        
        if (GetMessage(&msg,NULL,0,0))
        {
            if(msg.message == WM_CLOSE) ende = TRUE;
            if(msg.message == WM_SETCURSOR)
            {
                SetCursor(Cursor);
                ShowCursor(TRUE);
            }
        }
    }

    return 0;
}


ich weis blos das ich was gelesen hab, dass man immer den cursor neu setzen muss, weil der ja oftmals verändert wird (bei text etc.). da weis ich nicht ob die nachricht WM_SETCURSOR reicht.

7

05.10.2007, 17:53

Hast du mal NULL statt hInstance bei LoadCursor ausprobiert?
Außerdem kapier ich nicht wer/was WM_SETCURSOR (ohne Fenster?) innerhalb der While-Schleife auslösen soll. Oder stehe ich da grad auf der Leitung?
fka tm

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

8

05.10.2007, 21:29

das hInstance sagt doch dasser es aus der resource laden soll. deswegen müsste das richtig sein. probiern kann icks ja ma.

die messages sind doch nicht vom fenster, sondern von windows an die app. sonst würden ja auch die anderen nachrichten wie app beenden net gehen und das wär ja sinnlos. ;)

9

06.10.2007, 11:17

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <windows.h>
#include <cstring>
#include "resource.h"

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
    HCURSOR hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR1));
    if (Cursor == NULL) { MessageBox(TEXT("Cursor konnte nicht geladen werden!"), NULL, MB_OK | MB_ICONERROR); return 1; }

    SetCursor(hCursor);

    MSG msg;
    std::memset(&msg, 0, sizeof(MSG));

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
} 
Kommt die Message Box?
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

10

06.10.2007, 14:10

:(

Werbeanzeige