Cursor der Anwendung verändern



  • Kann keine mehr was zu meinem Problem sagen, dass ich mit dem veränderten Cursor nicht mehr auf die Schaltflächen des Fensterrahmens zugreifen kann?
    Habe ich bei der Veränderung des Cursors irgendwas falsch gemacht?

    MfG
    Hundefutter



  • Setze doch den Cursor bei der Registrierung des Hauptfensters :

    WNDCLASSEX wcex;
    ...
     wcex.hCursor = LoadCursorFromFile (...);
    ...
     RegisterClassEx(&wcex);
    ...
    

    Dann "gilt" der neue Cursor nur für das Hauptfenster, nicht aber für die Schaltflächen.

    *EDIT*
    -> WNDCALSSEX -> WNDCLASSEX
    -> RegisterWindowEx -> RegisterClassEx



  • SetCursor muss man bei der Nachricht WM_SETCURSOR aufrufen (IMHO). Alternative: SetClassLong(Ptr).

    @merker: Ist nicht unbedingt eine Alternative, je nachdem, ob er den Cursor später nochmal ändern will.



  • Wenn ich dem Cursor bei der Registrierung des Hauptfensters setze, muss ich aber erst einmal aus dem fenster mit der maus rausgehen und dann auf dei Schaltfläche, weil sich sonst der Cursor auch wieder nicht ändert, wenn ich von dem Fenster sofort auf dei Schaltfäche wechsel.

    Die Version mit der Nachricht WM_SETCURSOR funktioneirt bei mir irgendwie überhaupt nicht, kann aber auch sein, dass ich nen fehler gemacht habe.
    Probiere mal ncoh nen bisschen weiter, wenn jemand noch Tipps hat, bitte melden!

    MfG
    Hundefutter


  • Mod

    1. Muss Dir klar sein, dass jedes Fenster selbst bestimmt wie sein Cursor aussehen soll. Man kann also nicht pauschal einen Cursor setzen. Sondern immernur für die Fenster die man auch regsitriert.
    2. WM_SETCURSOR bekommt jedes Fenster zugesendet und das entsprechende Fensterreagiert in dem es den entsprechenden Cursor setzt.
    3. Von SetClassLong würde ich tunlichst Abstand nehmen, weil dies Pauschal das verhalten aller Fenster dieser Klasse verändert.
    Hier würde ich eher zu Subclassing raten als zu diesem Holzhammer.



  • Martin Richter schrieb:

    3. Von SetClassLong würde ich tunlichst Abstand nehmen, weil dies Pauschal das verhalten aller Fenster dieser Klasse verändert.
    Hier würde ich eher zu Subclassing raten als zu diesem Holzhammer.

    Stimmt schon, aber in der Regel reggt man ja für sein Hauptfenster eine eigene Klasse und erstellt dann eben auch nur ein Fenster davon 😉 .


  • Mod

    CodeFinder schrieb:

    Martin Richter schrieb:

    3. Von SetClassLong würde ich tunlichst Abstand nehmen, weil dies Pauschal das verhalten aller Fenster dieser Klasse verändert.
    Hier würde ich eher zu Subclassing raten als zu diesem Holzhammer.

    Stimmt schon, aber in der Regel reggt man ja für sein Hauptfenster eine eigene Klasse und erstellt dann eben auch nur ein Fenster davon 😉 .

    Wenn Du Herr des Fensters bist, warum verwendest Du überhaupt SetClassLOng und nicht PreCreateWindow und änderst den Cursor in der entsprechenden Klasse?

    Du kanst nicht davon ausgehen, dass die Klasse die die MFC fürt Dich anlegt nur einmal verwendet wird. AfxRegisterClass hat so seine Tricks.



  • Wenn du eine Cursor-Datei hast, musst du einen Bereich angeben, der die "Mausspitze" ist. Ich weis aber nicht, wie man bei einem Icon diesen Bereich definiert.



  • Wenn ich das jetzt richtig verstanden habe, müsste ich ja eigentlich nur, wenn die Nachrichct WM_SETCURSOR ausgerufen wird, den Cursor immer neu setzen, oder?
    Ist der dann auch nur in dem Fenster und nicht auf dem Fensterrahmen so gesetzt?
    Was wäre jetzt die beste Lösung, um den Cursor nur in dem Fenster zu verändern, und nicht auf dem Rahmen, so das ich noch die Schaltflächen anwählen kann?



  • Naja, lasse die Anwendung jetzt erstmal im Fullscreen-Modus laufen, damit ist das Problem, dass der Cursor auf dem Rahmen des Fensters nicht geändert wrid, erstmal gelöst.. :p

    //Edit:

    Wenn jemand doch noch ne gute Lösung für mich hatt (siehe vorherigen Post), dann bitte noch schreiben..


Anmelden zum Antworten