2015-09-01 1 views
0

Я строю проект в OSX (Yosemite) с wxWidgets 3.0.2.Есть ли способ полностью удалить границу фокуса объекта wxTextCtrl на OSX?

Я могу удалить синюю рамку вокруг окна wxTextCtrl, используя wxBORDER_NONE. Но когда я помещаю его в sizer, у него есть серая граница 3 пикселя, от которой я просто не могу избавиться. Какой смысл иметь 2 границы, один из которых не может быть удален? Неужели люди хотят настроить больше, чем это?

Есть ли способ устранить его? Я действительно не хочу взломать источник wx, но я буду, если придется.

Или существует другой способ управления макетом без использования sizers, чем может быть причиной появления границы?


Обновление: Кажется, что граница выделения фокуса. Я не хочу этого.

Есть ли способ отключить границу вокруг сфокусированного объекта пользовательского интерфейса? Это так расстраивает, потому что это такая незначительная вещь, но моя программа бесполезна, если ее не удалять.

+0

«Есть ли другой способ управления макетом без использования sizers». У вас нет использовать sizers. Вы можете четко определить позицию каждого виджета. Его жесткие санки, но не сложнее, чем в каркасах, которые не имеют sizers. – ravenspoint

+0

Можете ли вы разместить код, в котором вы создаете wxTextCtrl, и добавить его в sizer? – tinman

+0

Спасибо за ввод, но я немного изменил вопрос. Это не вина садизеров, это просто, что sizers показывают проблему.Я пробовал использовать абсолютное позиционирование, и это то же самое. Проблема - это только граница фокуса. Он серый, около 3 пикселей шириной, и он разрушает все. Мне нужно отключить его или каким-то образом нарисовать. – DaleyPaley

ответ

1

В случае, если кто-то еще натыкаются на этот пост, этот ответ на обновленный вопрос:

Обновления: Кажется, что граница фокуса изюминки. Я не хочу этого.

Есть ли способ отключить границу вокруг сфокусированного объекта пользовательского интерфейса?

Использование wxWidgets API, нет, нет способа удалить его, так как это поведение собственного класса NSTextField. Я был только в состоянии удалить путем редактирования самого источника WX установить focusRingType свойства базового NSTextField объекта NSFocusRingTypeNone:


Файл: ядра/textctrl.mm
Func: wxWidgetImpl :: CreateTextControl

NSTextField* v = nil; 
if (style & wxTE_PASSWORD) 
    v = [[wxNSSecureTextField alloc] initWithFrame:r]; 
else 
    v = [[wxNSTextField alloc] initWithFrame:r]; 

... 

// remove glow/border when textfield gets focused 
[v setFocusRingType:NSFocusRingTypeNone]; 

Я также установил BORDER_NONE на моем wxTextCtrl.

Конечно, такого рода изменения стандартного OS X выглядят так, возможно, поэтому это не было представлено как API wxTextCtrl? Или это ломает что-то еще? Но пока все работает нормально. Кроме того, мое приложение нуждается в, чтобы иметь свою собственную тему, которая не подходит для границы свечения.

Я использую wxWidgets 3.1.0 (клонирован с их repo) и OS X 10.12.