/ / Carbon / Cocoa unosić się nad zdarzeniem - macos, kakao, węgiel, dok, nscursor

Węglowe / kakaowe unoszą się nad wydmami - makra, kakao, węgiel, stacja dokująca, nscursor

Pracuję nad aplikacją, która używa bitówCarbon i Cocoa do obsługi kodu C ++ napisanego dla systemu Windows. Obecnie mam problem polegający na tym, że gdy użytkownik albo cmd + tabuluje poza oknem, albo po prostu najeżdża kursorem myszy na stację dokującą (nie tylko ikonę aplikacji - gdziekolwiek w stacji dokującej), kursor (używając Cocoa Klasa NSCursor) zmienia się z niestandardowego kursora na normalny kursor OS X.

Zasadniczo, czy ktoś wie, co jest wysyłane do aplikacji (zarówno przez Carbon, jak i Cocoa), gdy użytkownik unosi się nad dokiem?

Odpowiedzi:

0 dla odpowiedzi № 1

Wynika to z faktu, że dok zastępuje wszelkie zmiany kursora. To, co musisz zrobić, to ustawić zegar, który wielokrotnie uruchamia się, aby zmienić kursor.

Najpierw utwórz metodę, która pozwoli Ci zmienić kursor, a następnie ustaw customCursor

func changeCursor() {
/* Code here to create custom cursor */
customCursor.set()
}

Następnie, gdy jesteś gotowy, aby zmienić kursor, musisz oznaczyć stoper gwiazdką i pozwolić mu wielokrotnie odpalać

//cursorTimer is an NSTimer object that you need to keep track of
self.cursorTimer = NSTimer.scheduledTimerWithTimeInterval(0.001, target:self, selector: "changeCursor", userInfo: nil, repeats: true)

A kiedy skończysz, możesz unieważnić timer

self.cursorTimer.invalidate()

Działa to również tylko wtedy, gdy aplikacja jest z przoduwiększość. Jeśli ktoś naciśnie klawisze Command + Tab, aplikacja nie będzie mogła ustawić kursora. Aby umożliwić aplikacji sterowanie kursorem w tle, musisz używać prywatnych interfejsów API, więc nie ma Mac App Store.

W nagłówku pomostowym możesz dodać następujący kod

typedef int CGSConnectionID;
CGError CGSSetConnectionProperty(CGSConnectionID cid, CGSConnectionID targetCID, CFStringRef key, CFTypeRef value);
int _CGSDefaultConnection();

A następnie w AppDelegate możesz dodać ten kod do applicationDidFinishLaunching

let propertyString = CFStringCreateWithCString(kCFAllocatorDefault, "SetsCursorInBackground", 0)
CGSSetConnectionProperty(_CGSDefaultConnection(), _CGSDefaultConnection(), propertyString, kCFBooleanTrue)