OSX에서 Carbon Textfield에서 텍스트를 설정하는 방법은 무엇입니까?
-
03-07-2019 - |
문제
탄소 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을 제공하지만 내 텍스트 필드에는 쓰레기 만 포함되어 있습니다. 텍스트 필드의 속성을 유니 코드로 설정했는지 여부는 중요하지 않습니다.
여기에 무엇이 잘못되었는지 아이디어가 있습니까?
해결책
무엇을합니까 GetControlID
(...) 반품? 그게 야 noErr
?
A로 ControlRef
또한 a HIViewRef
, 당신은 또한 기능을 사용할 수 있습니다.
HIViewSetText
텍스트를 설정합니다. 이것은 받아들이는 기능으로 작동하도록 기록되어 있습니다 kControlEditTextCFStringTag
.
그건 그렇고, 당신이 쓴 줄은 다음과 같습니다.
CFRelease(title);
문제를 일으킬 것입니다. API 이름으로 작성하거나 복사 한 함수를 사용하여 만들어진 개체 만 해제해야합니다. "Core Foundation 용 메모리 관리 프로그래밍 안내서 소개" - Xcode 설명서에서 검색하십시오.
다른 팁
마침내 이것은 트릭을 수행했습니다.
SetControlData(ctrl, kControlEditTextPart, kControlStaticTextCFStringTag, sizeof(title), &title);
이것은 매우 오래된 API 인 것처럼 보이므로 더 나은 방법은 다음과 같습니다.
HIViewSetText(ctrl, title);
힌트를 위해 Lyndsey에서 thx.
제휴하지 않습니다 StackOverflow