Pregunta

Estoy intentando configurar el texto de un campo de texto usando la API de Carbon de esta manera:

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

Estoy usando la plantilla de código C ++ de XCode, por lo que GetWindowRef () es una llamada a la clase TWindow predefinida. El valor de retorno de OSErr me da noErr, pero mi campo de texto solo contiene basura. No importa si configuro el atributo de mi campo de texto en Unicode o no.

¿Alguna idea de lo que está mal aquí?

¿Fue útil?

Solución

¿Qué devuelve el GetControlID (...)? ¿Es noErr ?

Como ControlRef también es un HIViewRef , también puede usar la función:

HIViewSetText para configurar el texto. Está documentado que funciona con funciones que aceptan kControlEditTextCFStringTag .

Por cierto, la línea que escribiste:

CFRelease(title);

causará problemas Solo se deben liberar objetos que se hayan creado utilizando funciones que tengan Crear o Copiar en el nombre de la API. Querrá leer: " Introducción a la Guía de programación de administración de memoria para Core Foundation " - busca en la documentación de Xcode.

Otros consejos

Finalmente esto hizo el truco:

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

Como esta API parece ser muy antigua, parece ser una mejor manera:

HIViewSetText(ctrl, title);

Gracias a Lyndsey por las sugerencias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top