質問

次のように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);

ヒントについてはリンジーへのThx。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top