Создайте проект «Инструмент командной строки» из xcode, настройте и запустите NSApplication. Курсор в этом приложении не может измениться - PullRequest
0 голосов
/ 18 марта 2020

Я создаю небольшой инструмент, построенный на проекте «Инструмент командной строки». Все работает хорошо, кроме Курсор в этом инструменте.

Вот код запуска:

int main(int argc, const char * argv[]) {
    NSApplication * app = [NSApplication sharedApplication];
    MyDelegate * delegate = [[MyDelegate alloc] init];
    app.delegate = delegate;
    [app run];
    return 0;
}

А в MyDelegate я создаю окно, вид и т. Д. c. Однако я переопределяю функцию resetCursorRects в представлении, но ничего не произошло.

Если тот же код выполняется в проекте приложения, все будет хорошо.

Все, что я пробовал, включает в себя:

  1. Создание подкласса из NSApplication и переопределение функции запуска для обработки события uesr.
  2. Создание NSTrackingArea в представлении для обновления курсора.
  3. Выполнение селектора (запустить) на mainThread и дождаться завершения.

Однако они вообще не работали.

Теперь единственная причина, по которой я догадался - это функция NSApplicationMain(argc, argv) не равно [app run].

Какая разница? Может ли кто-нибудь мне помочь?

PS: Если я использую NSApplicationMain(argc, argv), xcode выдаст мне ошибку, что у меня должен быть комплект и Info.plist. Я не хочу создавать приложение, потому что оно жирное.

1 Ответ

0 голосов
/ 18 марта 2020

Программа, которая не является приложением в комплекте, по умолчанию является только фоновым процессом. По умолчанию связанное приложение является процессом с поддержкой переднего плана. (Можно изменить ключ LSUIElement в Info.plist приложения, чтобы изменить это.)

Курсором может установить только активное приложение. Процесс только для фона или элемента пользовательского интерфейса (также называемый аксессуаром) не может стать активным приложением.

Если вы хотите, чтобы ваша программа могла активироваться и управлять курсором, вы можете использовать [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular], чтобы сделать это процесс приложения с поддержкой переднего плана. Обратите внимание, что это заставит его появиться в переключателе приложений Dock и Command-Tab (но с общим c -исполняемым значком).

Конечно, сделать вашу программу полной и простой полноценное приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...