OSX에서 Carbon Textfield에서 텍스트를 설정하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/608255

  •  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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top