كيفية تعيين النص في حيز النص الكربون على OSX؟

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);

وأنا باستخدام C ++ قالب مدونة كسكودي، لذلك GetWindowRef () هو دعوة إلى فئة TWindow محددة مسبقا. قيمة الإرجاع OSErr يعطيني noerr ل، ولكن لي حيز النص يحتوي فقط القمامة. لا يهم إذا كنت تعيين السمة بلدي حيز النص إلى Unicode أم لا.

وأي أفكار ما هو الخطأ هنا؟

هل كانت مفيدة؟

المحلول

وماذا GetControlID (...) العودة؟ هل noErr؟

وكما ControlRef هو أيضا HIViewRef، يمكنك أيضا استخدام الدالة:

وHIViewSetText لضبط النص. تم توثيق هذا العمل مع الوظائف التي تقبل kControlEditTextCFStringTag.

وبالمناسبة، فإن الخط الذي كتب:

CFRelease(title);

هل يسبب مشاكل. ينبغي للمرء أن الإفراج فقط الأشياء التي بذلت باستخدام وظائف التي إنشاء أو نسخ في اسم API. فأنت تريد أن تقرأ: "مقدمة إلى برمجة دليل إدارة الذاكرة لمؤسسة كور" - البحث في وثائق كسكودي

نصائح أخرى

وأخيرا هذا لم خدعة:

SetControlData(ctrl, kControlEditTextPart, kControlStaticTextCFStringTag, sizeof(title), &title);

وبما أن هذا يبدو أن API قديمة جدا، وسيلة أفضل ويبدو أن:

HIViewSetText(ctrl, title);

وتشك ليندسي لتلميحات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top