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も であるHIViewRefため、次の関数も使用できます。

HIViewSetTextテキストを設定します。これは、 を受け入れる関数で動作するように文書化されていますkControlEditTextCFStringTag

ちなみに、あなたが書いた行:

CFRelease(title);

問題が発生します。API 名に Create または Copy が含まれる関数を使用して作成されたオブジェクトのみをリリースする必要があります。あなたは読みたいと思うでしょう:「Core Foundationのメモリ管理プログラミングガイドの紹介」 - Xcodeのドキュメントで検索してください。

于 2009-03-03T21:59:09.933 に答える