Как установить текст в текстовом поле Carbon textfield в OSX?

StackOverflow https://stackoverflow.com/questions/608255

  •  03-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь установить текст текстового поля с помощью Carbon API следующим образом:

ControlID editId = {'EDIT', 3};
ControlRef ctrl;
GetControlByID(GetWindowRef(), &editId, &ctrl);
CFStringRef title = CFSTR("Test");      
OSErr er = SetControlData(ctrl, kControlEntireControl, kControlEditTextTextTag, CFStringGetLength(title), title);
CFRelease(title);

Я использую шаблон кода C ++ XCode, поэтому GetWindowRef() - это вызов предопределенного класса TWindow.Возвращаемое значение OSErr дает мне noErr, но мое текстовое поле содержит только мусор.Не имеет значения, установил ли я атрибут моего текстового поля в Unicode или нет.

Есть какие-нибудь идеи, что здесь не так?

Это было полезно?

Решение

Что делает GetControlID(...) вернуться?Так ли это noErr?

В качестве ControlRef также является HIViewRef, вы также можете использовать функцию:

HIViewSetText чтобы задать текст.Это задокументировано для работы с функциями, которые принимают kControlEditTextCFStringTag.

Кстати, строчка, которую вы написали:

CFRelease(title);

Это вызовет проблемы.Следует выпускать только те объекты, которые были созданы с использованием функций, в имени API которых есть Create или Copy.Вам захочется почитать:"Введение в руководство по программированию управления памятью для Core Foundation" - ищите в документации Xcode.

Другие советы

Наконец это сделало свое дело:

SetControlData(ctrl, kControlEditTextPart, kControlStaticTextCFStringTag, sizeof(title), &title);

Поскольку это, кажется, очень старый API, лучшим способом, по-видимому, является:

HIViewSetText(ctrl, title);

Спасибо Линдси за подсказки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top