Получение оконных координат точки вставки - Какао - PullRequest
2 голосов
/ 26 сентября 2011

Каков наилучший способ получить координаты окна текущей позиции каретки в элементе управления редактированием текста в Какао?

Вот как я это делаю на других платформах

  1. Windows - EM_POSFROMCHAR
  2. GTK - Использование gtk_text_view_get_iter_location и gtk_text_view_buffer_to_window_coords.

Мне интересно, как то же самое можно сделать с помощью какао. Я нахожусь на MacOSX 10.6.8, и я делаю это с использованием C ++.

Ответы [ 2 ]

5 голосов
/ 01 октября 2011

Предполагается, что textView - это переменная, которая указывает на текстовое представление, а window - это переменная, которая указывает на окно:

// -firstRectForCharacterRange:actualRange returns a frame rectangle
// containing the insertion point or, in case there's a selection,
// the first line of that selection. The origin of the frame rectangle is
// in screen coordinates
NSRange range = [textView selectedRange];
NSRect screenRect = [textView firstRectForCharacterRange:range actualRange:NULL];

// -convertRectFromScreen: converts from screen coordinates
// to window coordinates
NSRect windowRect = [window convertRectFromScreen:screenRect];

// The origin is the lower left corner of the frame rectangle
// containing the insertion point
NSPoint insertionPoint = windowRect.origin;
1 голос
/ 04 октября 2011

В документации указан следующий метод

- (void)drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)aColor turnedOn:(BOOL)flag

сказано

При вызове этого метода фокус должен быть заблокирован на приемнике. Вам не нужно вызывать этот метод напрямую.

Если вы переопределите этот метод (и вызовете супер-реализацию) в подклассе NSTextView, это позволит вам узнать положение точки вставки, по крайней мере, когда это требуется для Cocoa.

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