2009-03-03 15 views
0

Ich versuche, den Text eines Textfeldes mit der Carbon-API wie folgt festgelegt: von XCodeWie setze ich Text in Carbon Textfield auf OSX?

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++ Code-Vorlage, so GetWindowRef() ein Aufruf der vordefinierten TWindow Klasse . Der Rückgabewert OSErr gibt mir noErr, aber mein Textfeld enthält nur Müll. Es spielt keine Rolle, ob ich das Attribut meines Textfelds auf Unicode einstelle oder nicht.

Irgendwelche Ideen, was hier falsch ist?

Antwort

2

Was gibt der GetControlID (...) zurück? Ist es noErr?

Als ControlRef ist auch ein HIViewRef, können Sie auch die Funktion verwenden:

HIViewSetText den Text zu setzen. Dies ist dokumentiert, um mit Funktionen zu arbeiten, die kControlEditTextCFStringTag akzeptieren.

By the way, die Linie, die Sie schrieb:

CFRelease(title); 

Probleme verursachen wird. Man sollte nur Objekte freigeben, die mit Funktionen erstellt wurden, die Create oder Copy im API-Namen haben. Sie sollten lesen: "Einführung in Memory Management Programming Guide für Core Foundation" - Suche in der Xcode-Dokumentation.

+0

Ja, es gibt NoErr zurück. thx für den CFRelease Hinweis – newgre

+0

Funktioniert der HIViewSetText? Es scheint viel einfacher zu telefonieren als die Anrufe, die gerade benutzt werden. –

0

Schließlich dies der Trick:

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

Da diese sehr alte API zu sein scheint, scheint eine bessere Art und Weise zu sein: für die Hinweise

HIViewSetText(ctrl, title); 

Thx zu Lyndsey.

Verwandte Themen