Cursor der Anwendung verändern



  • Danke für die verchiedenen funktionen, schaffe es jetzt einen cursor aus einer .ico datei zu laden und anzuzeigen.
    Benutze dafür jetzt erst LoadCursorFromFile() und dann SetCursor()...
    Nun habe ich nur noch das problem, dass ich nciht mehr auf die schaltflächen des Fensters, in welchem die Anwendung läuft, zugreifen kann.
    Woran liegt das? Mache ich beim Setzen des Cursors ncoh irgendwas falsch?
    Mache das im moment so, dass ich bei jedem Durchlauf der Hauptschleife des Programms den Cursor neu setze, da sont der Standardcursor angezeigt wird?
    Was muss ich noch ändern, so dass ich auch auf die Schaltflächen des Fensters zugreifen kann?
    MfG
    Hundefutter



  • 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