WinForms - Попытка сделать максимизированную фоновую форму, которая остается в фоновом режиме и не отвечает - PullRequest
3 голосов
/ 12 августа 2011

Короче говоря, я хочу создать фоновую форму, которая занимает весь экран и всегда остается сзади - без установки каких-либо других форм приложений, которые всплывают, чтобы установить их дочерний элемент при их создании.

У меня есть приложение WinForms, которое я иногда поддерживаю, и которое требует значительных архитектурных улучшений.Это приложение киоска с сенсорным экраном.В будущем этому будет уделено серьезное внимание, но сейчас мне нужно нанести на него пластырь.

Проблема в том, что приложение было разработано с приходом и уходом окон, а основных окон нетот которого другие окна - дети.И все это многопоточно, потому что он реагирует на множество событий из разных источников.Кроме того, все запутанно замкнуто в Виндзоре, и это делает все изменения проблемными и умножающими дефекты.

Так что некоторые из «диалогов», которые появляются, не находятся в режиме диалога и не имеют родителей и донне занимать весь экран, как они должны.И я предполагаю, что это не было обнаружено в тесте, потому что иногда предыдущие окна зависали, а иногда они не появлялись из-за некоторых ошибок в обработке событий.В системе много скрытых ошибок и недостатков дизайна, поэтому, когда я слишком сильно нарушаю, вещи ломаются.

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

1010 * Я сделал вид, который работает, и я установить обработчик события набольшинство соответствующих событий (которые просто вызывают SendToBack ()), если они происходят - например, фокус или щелчок мыши или что-то еще.

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

Есть ли гарантированный способ заставить эту форму остаться на заднем плане?

1 Ответ

4 голосов
/ 14 августа 2011
public partial class BackgroundForm : Form
{

    const int WM_MOUSEACTIVATE = 0x21;
    const int MA_NOACTIVATEANDEAT = 0x0004;

    public BackgroundForm()
    {
        InitializeComponent();
        ShowInTaskbar = false;
    }

    protected override void DefWndProc(ref Message m)
    {
        if (m.Msg == WM_MOUSEACTIVATE)
        {
            m.Result = (IntPtr) MA_NOACTIVATEANDEAT;
            return;
        }

        base.DefWndProc(ref m);
    }

    protected override bool ShowWithoutActivation
    {
        get { return true; }
    }

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