Форум программистов, компьютерный форум CyberForum.ru

Mac OS, Objective-C и два плюса (ляпаем глобальные горячие клавиши) - C++

Восстановить пароль Регистрация
 
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
20.01.2016, 02:17     Mac OS, Objective-C и два плюса (ляпаем глобальные горячие клавиши) #1
Здравствуйте, форумчане.
Обстановка
Есть программа на плюсах - окно SFML. На винде, если это окно скрыть, то программе будут поступать все нажатия клавиш и их можно считать так:
C++
1
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
На OS X такой фокус не проходит, программа вообще ничего не слышит. А это все потому-что apple sucks поступают только локальные события - когда на окне есть фокус.

Чего я хочу добиться
По нажатию определенной комбинации клавиш открыть вышеупомянутое SFML окно (на OS X).

Попытки
Проследить глобальные клавиши можно, как через Carbon, так и через Cocoa. Но последнее для горячих клавиш считается не православным (хотя оно и новее) (так пишут в инете) + надо давать какие-то права программе. Кусок Carbon'а же, где есть этот функционал, портировали на 64 бита и метод, говорят, лучше. Т.к. с карбоном надо работать на низком уровне, один товарищ даже написал небольшую обертку "с целью сделать работу с горячими клавишами проще".
http://stackoverflow.com/questions/3...an-application
https://github.com/davedelong/DDHotKey
Даже "объяснил" как использовать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
- (IBAction) registerHotkey:(id)sender {
  DDHotKeyCenter * c = [[DDHotKeyCenter alloc] init];
  if (![c registerHotKeyWithKeyCode:kVK_ANSI_1 modifierFlags:(NSCommandKeyMask | NSShiftKeyMask) target:self action:@selector(hotkeyWithEvent:) object:nil]) {
    NSLog(@"unable to register hotkey");
  } else {
    NSLog(@"registered hotkey");
  }
  [c release];
}
 
- (void) hotkeyWithEvent:(NSEvent *)hkEvent {
  NSLog(@"Hotkey event: %@", hkEvent);
}
Метод вроде неплохой, но я чего то не пойму как его использовать.

Вопросы

1) По какому принципу вызывается callback function (тобиш hotkeyWithEvent из того же пример сверху)? Как я себе это представляю:
- Регистрируется комбинация клавиш
- При регистрации передается адресс callback функции
- Программа продолжает работать.
- Нажимается комбинация
- Программа приостанавливается
- Вызывается та самая функция
- Программа продолжает работу
Так ли это? Если да, то как гарантировать безопасность такой комбинации?

2) Собственно вторая часть вопроса это как вызвать код выше из проги С++. Я выяснил как вызывать функцию.
Кликните здесь для просмотра всего текста
stuff.h
C++
1
2
3
4
5
6
#ifndef STUFF
#define STUFF
 
bool doStuff(int);   //Код на С который понимает как С++ так и Objective C
 
#endif
stuff.mm
C++
1
2
3
4
5
6
7
8
9
#import <AppKit/AppKit.h>
 
#include "stuff.h"
 
bool doStuff(int x)   //можно и Objective C header
{
    //Пишем Objective C код
    //но его можно мешать и с С++
}
main.cpp
C++
1
2
3
4
5
6
7
8
#include "stuff.h"
 
int main()
{
    doStuff(10);
 
    return 0;
}

Но как действовать с кодом из начала сообщения я не понимаю. Я даже не понимаю часть ли это класса или просто две статические фунции (в Objective C я не разбираюсь). А аргументы с которыми должна вызываться callback функция биндить чтоли?

Прошу помощи и подсказок как действовать дальше.

Добавлено через 22 часа 46 минут


Добавлено через 6 часов 0 минут
наверное зря я накатал такую простыню текста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2016, 02:17     Mac OS, Objective-C и два плюса (ляпаем глобальные горячие клавиши)
Посмотрите здесь:

C++ Objective C MAC OS
C++ Горячие клавиши
CodeBlocks горячие клавиши C++
В целочисленном массиве найти число чередований знака, то есть число переходов с минуса на плюс или с плюса на минус. C++
Перегрузка бинарного плюса C++
Горячие клавиши C++
C++ objective c и xcode непонятная ошибка
Инкремент, декремент и прочее. A+++ - что означают это три плюса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 22:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru