2009-03-03 97 views
0

我试图使用Carbon API这样设置文本框的文本:如何在OSX上的Carbon文本框中设置文本?

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

我使用的是C++的XCode的代码模板,所以GetWindowRef()是预定义TWindow类的调用。 OSErr返回值给我noErr,但我的文本字段只包含垃圾。 如果我将文本字段的属性设置为Unicode,则无关紧要。

任何想法这里有什么错?

回答

2

GetControlID(...)返回什么?是noErr

作为ControlRef也是HIViewRef,你也可以使用函数:

HIViewSetText设置文本。这被记录为与接受kControlEditTextCFStringTag的功能一起使用。

顺便说,行,你写道:

CFRelease(title); 

会引起问题。一个应该只释放使用API​​名称中具有Create或Copy的函数创建的对象。您需要阅读:“Core Management的内存管理编程指南简介” - 在Xcode文档中进行搜索。

+0

是的,它返回noErr。 thx为CFRelease提示 – newgre 2009-03-03 22:04:44

0

最后这并获得成功:

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

由于这似乎是很旧的API,更好的办法似乎是:

HIViewSetText(ctrl, title); 

THX到Lyndsey的提示。