2014-01-03 3 views
-1

EDIT:WxWidgets - не может привести кадр к началу

Этот вопрос не о briging окно в передней части ВСЁ, только для моего приложения, специфические. Я хотел бы, чтобы кадр, с которым они взаимодействовали, находился за новым фреймом. Очень похоже на диалог, за исключением того, что это не диалог. Я не думаю, что это плохая практика, что-то было вызвано (в этом случае через меню), я ожидаю, что это будет напротив окна, которое я использовал для вызова.


Я только что прочитал How can I ensure that a wxFrame is brought to the foreground? и что не работает.

SetFocus(); делает окно хотите мое внимание (он мелькает в моей панели задач в случае моей платформы, GTK и бар MATE задача, если это не имеет значения)

Raise(); делает .... ничего

Show(); показывает это, очевидно, но, несмотря на новый статус, ничего не происходит.

Неприкосновенный щелчок по окну не выводит его на передний план до тех пор, пока я не сделаю что-то в родительском, несмотря на то, что я показываю, как я взаимодействую в панели задач. Я использую все три из вышеперечисленных (Show, SetFocus, затем Raise).

Я прочитал документацию Raise «s (http://docs.wxwidgets.org/trunk/classwx_window.html#a54808c933f22a891c5db646f6209fa4d) Raise и Lower являются„функции г порядка“- это говорит о том, что он должен сделать это. Однако у меня никогда не было большого успеха. Мне было бы очень приятно, если бы начальный кадр появился на переднем плане всякий раз, когда я запускал, например, но учитывая количество раз, которое я нажимаю, и проект построен по сравнению с количеством времени, потраченного на написание кода, и фактом создания нового папка даже чаще, я смирился с ней.

Было бы неплохо исправить это!

Добавление

Использование Lower на родителей не работал. Будет еще 64 очевидных способа попробовать это, я действительно хочу избежать спотыкания.

+0

Ваш вопрос очень запутан. Что именно ты пытаешься сделать? Что на самом деле происходит? Где код? Я предлагаю вам переписать вопрос, чтобы ответы на эти вопросы были ясными. (О, и удалите все эти изменения и добавления, в которых вы постоянно меняете свое мнение!) – ravenspoint

ответ

0

Я считаю, что ravenspoint, и это не хороший трюк пользовательского интерфейса, но если вы не возражаете немного мигать ... и крадете фокус, независимо от того, где вы можете печатать и т. Д., И т. Д. , просто любопытное плохо ...

ParentWindow->Iconize(false); // restore the window if minimized 
ParentWindow->SetFocus(); // focus on my window 
ParentWindow->Raise(); // bring window to front 
ParentWindow->Show(true); // show the window 

и прежде чем делать, подумайте о другом критическом приложении, запущенном с

«Введите код запуска счетчика измерения, влияние в течение 12 секунд:»

и половина путем ввода текста, ваше окно решает всплыть вверх.

+0

См. Редактирование, я хочу поднять рамку над ее родителем (то, что пользователь использовал для вызова этого нового фрейма) не перед все!Является ли эта плохая практика, я ничего не думал об этом, возможно, мне следует перестать избегать «модальных диалогов» и выработать то, что они есть? –

+0

Возможно, вам потребуется дублировать пару вызовов как дочерним, так и родительским. Без поиска, iconize (true) и родительский, и дочерний, iconize (false) для обоих, затем onlt на дочернем, setfocus, рейз и показать. Это гарантирует, что экранная вспышка будет отображаться в виде окон. постскриптум не эксперт, этот совет может быть неправильным, и ** определенно собирается сорвать пользователей **, где-то, когда-нибудь. Гораздо лучше зарезервировать строку состояния или область, чтобы разрешить всплывающие окна. Если это только по запросу, то эта последовательность, использующая как родительский, так и дочерний, должна работать. _быть не экспертом, высокая вероятность совета fail_ –

Смежные вопросы