我正在尝试使用 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致谢,提示。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top