Окно на рабочем столе / самое нижнее окно в winforms - PullRequest
0 голосов
/ 04 ноября 2011

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

Я искал кучу, и я продолжаю находить половину решений. Вот что я пробовал до сих пор:

Создал BackBaseForm, который переопределяет событие WndProc, и если оно WM_WINDOWPOSCHANGING, я не вызываю base.WndProc(ref m) и вместо этого отправляю следующее сообщение:

SetWindowPos(Handle, new IntPtr(1), 0, 0, this.width, this.height, SWP_NOZORDER);

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

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

Установите для frmBackground.Enabled значение false.

В вашей основной форме:

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        var bg = new Form();
        bg.WindowState = FormWindowState.Maximized;
        bg.ShowInTaskbar = false;
        bg.FormBorderStyle = FormBorderStyle.None;
        bg.Show();
        bg.Enabled = false;
        this.Owner = bg; // optional - see below
    }

Если вы сделаете это:

this.Owner = f; 

Тогда ваша основная форма будет мигатькогда вы нажимаете фоновую форму (по крайней мере, в Windows 7, я не уверен в других версиях).В любом случае, установка Enabled в false будет работать.Но вы получите звуковой сигнал, когда нажмете фоновую форму, что может раздражать.Вероятно, есть какой-то способ предотвратить это.

0 голосов
/ 04 ноября 2011

Создайте фоновую форму и установите для этой фоновой формы форму владельца вашей основной формы. Например:

frmBackground backgroundForm = new frmBackground();
frmMain mainForm = new frmMain();
mainForm.Owner = backgroundForm;
backgroundForm.Show();
mainForm.Show();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...