Pergunta

Estou tentando definir o texto de um campo de texto usando a API de carbono como esta:

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

Eu estou usando o modelo de código do Xcode C ++, então GetWindowRef () é uma chamada para a classe TWindow predefinido. O valor de retorno OSErr me dá NOERR, mas meu campo de texto contém apenas lixo. Não importa se eu definir o atributo do meu campo de texto para Unicode ou não.

Todas as idéias que está errado aqui?

Foi útil?

Solução

O que o (...) return GetControlID? É noErr?

Como ControlRef é também um HIViewRef, você também pode usar a função:

HIViewSetText para definir o texto. Isso está documentado para trabalhar com funções que aceitam kControlEditTextCFStringTag.

A propósito, a linha que você escreveu:

CFRelease(title);

causará problemas. Um só deve liberar objetos que foram feitas usando funções que criar ou copiar em nome API. Você vai querer ler:. "Introdução ao Gerenciamento de memória Guia de Programação para o Núcleo Foundation" - busca na documentação do Xcode

Outras dicas

Finalmente, este fez o truque:

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

Uma vez que este parece ser muito antiga API, uma maneira melhor parece ser:

HIViewSetText(ctrl, title);

Thx para Lyndsey para as dicas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top