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);
ヒントについてはリンジーへのThx。
所属していません StackOverflow