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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Неопределенная ссылка на деструктор http://www.cyberforum.ru/cpp-beginners/thread1641962.html
Здравствуйте! Какое-то время пользовался еклипсом, но пришлось от него отказаться в пользу утилит cmake и make. Во время линковки возникают ошибки типа "undefined reference to 'Listener::~Listener()'" Вот пример этого класса: хедер class Listener { private: const char* openStr; listener_t* lsn; uint32_t type; public:
C++ Почему диапазон значений у типа float больше, чем у типа int, если они оба занимают 4 байта? Почему диапазон значений флоат больше чем у инта, если они оба занимают 4 байта? Вроде слышал что-то связанное с мантисой, но как это правильно сформулировать? http://www.cyberforum.ru/cpp-beginners/thread1641949.html
C++ С помощью метода волны найти кратчайший путь из одной клетки в другую (ход конём)
Пытаюсь решить такую задачу: с помощью метода волны нужно найти кратчайший путь из одной клетки в другую. Проблема состоит в том, что я настолько тупой, что не могу даже составить формировку матрицы. Точнее могу, но каким то образом заполняются те клетки, которые не должны заполняться. Прошу помощи в решении. Заранее спасибо. #include <iostream> using namespace std; int t={0}; int...
Зеркально поменять местами разряды младшего байта нечетных чисел C++
Добрый вечер. Помогите пожалуйста решить задачку, весьма срочно. Буду признателен вам. Задача: зеркально поменять местами разряды младшего байта нечетных чисел. После этого определить минимальное число в массиве и его индекс.
C++ Вычислить первые n элементов заданной последовательности http://www.cyberforum.ru/cpp-beginners/thread1641928.html
#include <iostream> #include <cmath> using namespace std; int main() { int n; cin >> n; int b = 5, ch = -1; for (int i = 2; i <= n; i++)
C++ Литература по архитектуре приложений на С++ Доброго времени суток. Мне нужно написать большой графический проект на С++. Для всего этого выбрал Qt. Что из себя представляет приложение: возможность черчения различных линий, автоматизация процесса рисования через указание каких либо параметров(3 квадрата/треугольника и т.д., и программа сама рисует их), возможность двигать уже нарисованные линии и объекты и т.д. В чем вопрос: как... подробнее

Показать сообщение отдельно
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
20.01.2016, 02:17     Mac OS, Objective-C и два плюса (ляпаем глобальные горячие клавиши)
Здравствуйте, форумчане.
Обстановка
Есть программа на плюсах - окно 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 минут
наверное зря я накатал такую простыню текста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru