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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top