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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top