Wie Text in Carbon-Textfeld auf OSX setzen?
-
03-07-2019 - |
Frage
Ich versuche, den Text eines Textfeldes mit der Carbon-API wie folgt festgelegt:
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);
Ich bin mit der C ++ Codevorlage von XCode, so GetWindowRef () ein Aufruf der vordefinierten TWindow Klasse. Der OSErr Rückgabewert gibt mir noErr, aber mein Textfeld enthält nur Müll. Dabei spielt es keine Rolle, ob ich das Attribut meines Textfeldes auf Unicode gesetzt ist oder nicht.
Alle Ideen, was hier falsch ist?
Lösung
Was bedeutet die GetControlID
(...) zurückkehren? Ist es noErr
?
Als ControlRef
ist auch ein HIViewRef
, können Sie auch die Funktion verwenden:
HIViewSetText
den Text zu setzen. Dies wird dokumentiert mit Funktionen zu arbeiten, die kControlEditTextCFStringTag
nehmen.
Durch die Art und Weise, die Linie, die Sie schreibt:
CFRelease(title);
Wird Probleme verursachen. Man sollte nur Objekte freigeben, die mit den Funktionen vorgenommen wurden, die in den API-Namen erstellen oder kopieren. Sie werden lesen wollen. „Einführung in die Memory-Management-Programmierhandbuch für Core Foundation“ - Suche in der Xcode-Dokumentation
Andere Tipps
Schließlich tat dies der Trick:
SetControlData(ctrl, kControlEditTextPart, kControlStaticTextCFStringTag, sizeof(title), &title);
Da diese sehr alte API zu sein scheint, ein besserer Weg zu sein scheint:
HIViewSetText(ctrl, title);
Thx zu Lyndsey für die Hinweise.