0

我正在尝试使用 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 并不重要。

任何想法这里有什么问题?

4

2 回答 2

2

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

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

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

顺便说一句,你写的那行:

CFRelease(title);

会引起问题。应该只发布使用 API 名称中包含 Create 或 Copy 的函数制作的对象。您需要阅读:“Core Foundation 内存管理编程指南简介”——在 Xcode 文档中搜索。

于 2009-03-03T21:59:09.933 回答
0

最后这成功了:

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

由于这似乎是非常旧的 API,更好的方法似乎是:

HIViewSetText(ctrl, title);

感谢 Lyndsey 的提示。

于 2009-03-03T22:08:28.213 回答