Como definir o texto no campo de texto de carbono no OSX?
-
03-07-2019 - |
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?
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.