В C# существует ограничение на задание режима показа окна. В Visual Studio в свойстве формы TopMost можно установить только два значения. При этом форма при появлении будет всегда активна. Т.е. переведет на себя фокус ввода. Например, такая ситуация: приложение «висит» в трее и показывает всплывающие окна, типа таких, которые показывает ICQ при получении сообщения. Если пользоваться стандартными возможностями .NET, то реализовать окно, которые не будет перехватывать фокус ввода, не получится. На помощь приходят старые знакомые функции WINAPI, которые выполняются с параметрами SW_SHOWNOACTIVATE и SWP_NOACTIVATE.
Теперь создайте новую форму и пропишите следующий код:
1
//подключаем возможность использовать WinApi-функции
2
usingSystem.Runtime.InteropServices;
3
...
4
//задаем константы
5
privateconstintSW_SHOWNOACTIVATE = 4; //неактивна
6
privateconstintHWND_TOPMOST = -1; //поверх всех окон, включая топовые
Этого достаточно, чтобы создать окно, которое будет поверх всех остальных окон, но не будет активно. Вызывать нашу форму можно так (где frmTip – это название нашей формы, которую будем показывать):