cursor-id



  • Hast du WINVER >= 0x0500 definiert? Falls das nichts hilft ist wohl dein PSDK zu alt (evtl. hilft es, das #define von Hand einzufügen).

    #if(WINVER >= 0x0500)
    #define IDC_HAND            MAKEINTRESOURCE(32649)
    #endif /* WINVER >= 0x0500 */
    


  • danke, ich hab jetzt einfach das gemacht (und es funktioniert):

    SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(32649)));
    


  • Das ist wirklich einfach. Die Zahl kann man sich auch wesentlich besser merken als IDC_HAND. Und notfalls kann man ja auch jederzeit in <winuser.h> nachschlagen ...

    *kopfschüttel*



  • ist ja gut.



  • *threadmissbrauch*

    wieso funktioniert das hier nicht?

    case ID_MENU_CURSOR_GREENARROW:
    				{
    					SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_BLUEARROW)));
    				}break;
    

    Der Cursor bleibt stets der selbe?



  • das ich da blue und green vertauscht habe ändert nix 😃



  • rofl - wahrscheinlich hast du IDC_BLUEARROW gar nicht definiert 🕶



  • Natürlich isses definiert, beim Programmstarten wird doch schon ein anderer Cursor aktiviert.

    Nur während der laufzeit klappts net, auch wenn ich den Cursor erst in einer Variablen speicher:

    hcur = LoadCursor(hinstance, MAKEINTRESOURCE(IDC_BLUEARROW));
    SetCursor(hcur);

    😕

    Wo ist der fehler?



  • Sorry - du sahst für mich zuerst irgendwie nach einem Troll aus 🙄

    Das sollte dir weiterhelfen:

    If your application must set the cursor while it is in a window, make sure the class cursor for the specified window's class is set to NULL. If the class cursor is not NULL, the system restores the class cursor each time the mouse is moved.

    Your application can change the design of the cursor by using the SetCursor function and specifying a different cursor handle. However, when the cursor moves, the system redraws the class cursor at the new location. To prevent the class cursor from being redrawn, you must process the WM_SETCURSOR message. Each time the cursor moves and mouse input is not captured, the system sends this message to the window in which the cursor is moving.



  • Mag vielleicht lächerlich klingen aber ich werd nicht ganz schlau aus den Zitaten:

    Ich soll bevor ich irgendwas veränder SetCursor(NULL) anwenden und danach in WM_SETCURSOR verhindern das nach jeder Bewegung wieder der ursprüngliche Cursor gezeigt wird 😕

    Vielleicht noch ein Hinweis 😃 😉 ?



  • // Du sollst bei...
    WNDCLASSEX wcex;
    wcex.lpszClassName="MeineFensterKlasse";
    wcex.lpfnWndProc=WindowProc();
    
    // ...das da auf NULL setzen:
    wcex.hCursor=NULL;
    


  • Bringt aber nicht wirklich was wenn ich
    winclass.hCursor = NULL;
    mache?

    Ich hab das Gefühl ich mache irgendwas grundsätzlich verkehrt?



  • ...und die WM_SETCURSOR abfangen 😉
    oder für ne Fensterklasse kann man auch SetClassLong() verwenden um den Cursor zu ändern...



  • SetClassLong(hwnd, GCL_HCURSOR, (LONG) LoadCursor(hinstance, MAKEINTRESOURCE(IDC_BLUEARROW)));
    

    Klappt auch nicht, er ändert den Cursor nimmt aber nen standardwindowscursor 😕 ?!



  • Also bei mir funktioniert das so aber! Wird der Cursor evtl. nicht richtig geladen, weil hinstance ungültig ist 🙄



  • Ich gebs auf ich find den Fehler nicht, ich hab schon zig verschiedene Dinge probiert, der Cursor wird zwar geändert allerdings immer in einen standard Windowscursor.

    Hier ist der Code, schau mal bitte ob du siehst woran es liegt flenders 🙂

    http://mitglied.lycos.de/inselkampf/c++/Code.zip

    (ist etwas größer da ich die sounds nicht entfernt habe)

    Hoffe du kannst mir helfen, die Stelle wo der Cursor geändert werden soll wird doch vier Kommentarreihen gekennzeichnet, alternativ die Stelle steht an Zeile 133.

    Gruß

    Nagetier



  • Die Sounds komen mir irgendwie bekannt vor - nur von wem? LaMothe?🤡
    Der Fehler liegt wohl, wie schon vermutet, daran, dass hinstance ungültig ist. Du musst es entweder über die Fenster-Klasse holen, oder in WinMain bzw. in WM_CREATE der globalen Variable den entsprechenden Wert zuweisen 🙂



  • sorry ich bekomms nicht hin, bin in der hinsicht ein neuling.

    das selbe problem hab ich jetzt auch noch in anderer form, ich will ein paar steuerelemente ausgeben und sie außerhalb von winmain erstellen ( per funktion).

    dafür musste ich hwnd global machen, aber sie werden dennoch nicht gezeichnet. wie weise ich hwnd oder hinstance einen gültigen wert zu?! was muss ich dafür in wm create tun?



  • Entweder du speicherst den an WinMain im ersten Parameter übergebenen Wert in einer globalen Variablen, oder du speicherst ihn in WM_CREATE (dort bekommst du ihn mit ((LPCREATESTRUCT)lParam)->hInstance ) in einer globalen oder in einer in WndProc statischen Variable.
    Alternativ kannst du dir hInstance auch bei Bedarf direkt über GetWindowLong(hWnd,GWL_HINSTANCE) bzw. GetWindowLongPtr(hWnd,GWLP_HINSTANCE) holen 🙂


Anmelden zum Antworten