Question

J'essaie de définir le texte d'un champ de texte à l'aide de l'API Carbon comme suit:

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);

J'utilise le modèle de code C ++ de XCode. GetWindowRef () est donc un appel de la classe TWindow prédéfinie. La valeur de retour OSErr me donne noErr, mais mon champ de texte ne contient que des déchets. Peu importe que je règle ou non l'attribut de mon champ de texte sur Unicode.

Des idées sur ce qui ne va pas ici?

Était-ce utile?

La solution

Qu'est-ce que GetControlID (...) renvoie? Est-ce noErr ?

Un ControlRef est également un HIViewRef , vous pouvez également utiliser la fonction:

HIViewSetText pour définir le texte. Ceci est documenté pour fonctionner avec des fonctions acceptant kControlEditTextCFStringTag .

Au fait, la ligne que vous avez écrite:

CFRelease(title);

Peut causer des problèmes. Vous ne devez libérer que les objets créés à l'aide de fonctions pour lesquelles Create ou Copy ont été créés. Vous devez lire: "Introduction à la gestion de la mémoire - Guide de programmation pour Core Foundation". - recherche dans la documentation Xcode.

Autres conseils

Enfin, cela a fonctionné:

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

Puisque cela semble être une très vieille API, une meilleure solution semble être:

HIViewSetText(ctrl, title);

Merci à Lyndsey pour les astuces.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top