Come impostare il testo nel campo di testo Carbon su OSX?
-
03-07-2019 - |
Domanda
Sto cercando di impostare il testo di un campo di testo usando l'API Carbon in questo modo:
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);
Sto usando il modello di codice C ++ di XCode, quindi GetWindowRef () è una chiamata alla classe TWindow predefinita. Il valore di ritorno OSErr mi dà noErr, ma il mio campo di testo contiene solo immondizia. Non importa se ho impostato l'attributo del mio campo di testo su Unicode o meno.
Qualche idea di cosa non va qui?
Soluzione
Cosa restituisce GetControlID
(...)? È noErr
?
Poiché un ControlRef
è anche un HIViewRef
, puoi anche utilizzare la funzione:
HIViewSetText
per impostare il testo. Questo è documentato per funzionare con funzioni che accettano kControlEditTextCFStringTag
.
A proposito, la riga che hai scritto:
CFRelease(title);
Causerà problemi. Uno dovrebbe rilasciare solo oggetti che sono stati creati usando funzioni che hanno Crea o Copia nel nome dell'API. Ti consigliamo di leggere: " Introduzione alla Guida alla programmazione della gestione della memoria per Core Foundation " - cerca nella documentazione Xcode.
Altri suggerimenti
Alla fine questo ha funzionato:
SetControlData(ctrl, kControlEditTextPart, kControlStaticTextCFStringTag, sizeof(title), &title);
Poiché questa sembra essere un'API molto vecchia, un modo migliore sembra essere:
HIViewSetText(ctrl, title);
Grazie a Lyndsey per i suggerimenti.