如何在OSX上的Carbon文本字段中设置文本?

时间:2009-03-03 21:22:13

标签: c++ macos macos-carbon

我正在尝试使用Carbon API设置文本字段的文本,如下所示:

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

我正在使用XCode的C ++代码模板,因此GetWindowRef()是对预定义的TWindow类的调用。 OSErr返回值给了我noErr,但我的textfield只包含垃圾。 如果我将textfield的属性设置为Unicode无关紧要。

这里有什么问题吗?

2 个答案:

答案 0 :(得分:2)

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

由于ControlRef也是HIViewRef,您还可以使用以下功能:

HIViewSetText设置文字。记录这些内容可以使用接受kControlEditTextCFStringTag的函数。

顺便说一下,你写的这行:

CFRelease(title);

会引起问题。应该只释放使用API​​名称中具有“创建”或“复制”功能的对象。您将需要阅读:“Core Foundation内存管理编程指南简介” - 在Xcode文档中搜索。

答案 1 :(得分:0)

最后这就是诀窍:

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

由于这似乎是一个非常古老的API,一个更好的方法似乎是:

HIViewSetText(ctrl, title);

向Lyndsey致谢,提示。