Создание новой формы с тем же z-порядком, что и для другой формы - PullRequest
2 голосов
/ 17 июля 2009

Windows Forms, .net 2.0

Моя главная тема приложения имеет форму (A). У меня есть фоновый поток, который работает от таймера, чтобы определить, что действие имело место - когда это происходит, он заставляет основную форму приложения скрыться (используя BeginInvoke) и создает новую форму (B) в своем собственном потоке (отдельно). насос сообщений).

Звучание двух потоков звучит сложно, но, к сожалению, это необходимо.

Новая форма в новом насосе сообщений показана вверху не верхних форм (как и следовало ожидать!). Однако, если оригинальное приложение не было на рабочем столе, это очень раздражает.

Итак, я хотел бы определить, каков z-порядок исходной формы (A), прежде чем скрывать ее; затем создайте мою новую форму (B), отражающую z-порядок исходной формы.

Есть идеи?

[У этого также есть побочный эффект формы B, всплывающей над заставкой, если она находится на рабочем столе текущего пользователя (то есть без пароля), который, если я не могу исправить это, как хотелось бы выше, я бы хотел бы избежать этого ...]

Ответы [ 2 ]

1 голос
/ 22 июля 2009

Я решил эту проблему с помощью функции Win32 GetWindow, чтобы определить, какое предыдущее окно было для моей основной формы. Затем, когда я создаю свою новую форму во втором потоке, я могу использовать SetWindowPos, чтобы установить для z-порядка значение, которое я получил на первом шаге.

Я также использую предложение nobugz, чтобы определить, было ли приложение сфокусированным приложением, и если нет, я использую переопределение ShowWithoutActivation, чтобы убедиться, что моя новая форма не запускается активированной

0 голосов
/ 17 июля 2009

AFAIK, вы можете вызвать Form.Activate (), чтобы вывести его на передний план, но я не знаю z-порядка на уровне Windows в WinForms. Возможно, вам повезет больше в Win32.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...