wxWidgets: показать окно, помеченное как скрытое в XRC.

Я новичок в wxWidgets а также DialogBlocks, У меня есть форма, которая создается с использованием DialogBlocks и сохраняется в виде файла XRC. Часть формы имеет вертикальную wxStaticBoxSizer в который помещены два wxScrolledWindow элементы. Я хочу показывать только по одному, основываясь на том, какие данные должны быть показаны пользователю, поэтому я пометил один скрытый, а другой оставил видимым. Когда я пытаюсь переключить дисплей и показать виджет, который был скрыт в XRC, и скрыть тот, который не был, тот, который я скрываю, исчезает, но тот, который я хочу показать, не виден. Если я изменю размер окна, оно появится. Как только это появилось тогда, я могу переключиться назад и вперед без проблем. Я пробовал много комбинаций показа, включения, аннулирования, получения sizer и вызова RecalcSizes, обновление, верстка и некоторые другие. Я тоже пробовал их в разных комбинациях. Просто звоню Show позволит мне переключаться между ними, но только после того, как я переключусь на тот, который не отображается изначально, и изменим размер окна. Из того, что я вижу в документах. проблема в том, что wxSizer не выделяет место для скрытых окон, но есть флаг, который можно установить для отмены этого поведения. Моя проблема в том, что DialogBlocks не предоставляет эту функцию, поэтому, если я вручную отредактирую файл XRC, изменение будет потеряно, когда я или один из других разработчиков сохраню некоторые изменения. Есть ли последовательность звонков, которые я могу сделать, чтобы сказать классификатору выделить место? По умолчанию OnResize Обработчик делает что-то, чтобы заставить классификатор выделять пространство, но я не знаю, что это такое, или как это сделать.

Это флаг, который я нашел в документации:

wxRESERVE_SPACE_EVEN_IF_HIDDEN Обычно wxSizers не выделяют пространство
для скрытых окон или других предметов. Этот флаг отменяет это поведение
так что для окна выделено достаточно места, даже если оно не
видимый. Это позволяет динамически отображать и скрывать элементы управления.
без изменения размера родительского диалога, например. Эта функция новая
начиная с версии wxWidgets 2.8.8

0

Решение

К сожалению, DialogBlocks действительно не позволяет вам указать этот флаг. Без этого вам нужно позвонить Layout() после показа ранее скрытого элемента управления. Это будет работать при условии, что вы вызываете его для родителя с достаточным пространством для размещения детей, которым теперь нужно больше места (например, вызов его для родителя верхнего уровня всегда будет работать), но приведет к видимому смещению элементов управления, что может быть не тем, что вы хочу.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]