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