如何在 OSX 上的 Carbon 文本字段中设置文本?
-
03-07-2019 - |
题
我正在尝试使用 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,但我的文本字段只包含垃圾。我是否将文本字段的属性设置为 Unicode 并不重要。
有什么想法吗?
解决方案
什么是 GetControlID
(...) 返回?是吗 noErr
?
作为一个 ControlRef
也是一个 HIViewRef
, ,您还可以使用该功能:
HIViewSetText
设置文本。这被记录为与接受的函数一起使用 kControlEditTextCFStringTag
.
顺便说一下,你写的那一行:
CFRelease(title);
会引起问题。人们应该只释放使用 API 名称中包含 Create 或 Copy 的函数创建的对象。你会想读:“Core Foundation 内存管理编程指南简介”——在 Xcode 文档中搜索。
其他提示
最后这就是诀窍:
SetControlData(ctrl, kControlEditTextPart, kControlStaticTextCFStringTag, sizeof(title), &title);
由于这似乎是一个非常古老的API,一个更好的方法似乎是:
HIViewSetText(ctrl, title);
向Lyndsey致谢,提示。
不隶属于 StackOverflow