C # создание липких окон на рабочем столе с прозрачностью - PullRequest
0 голосов
/ 09 января 2010

Длинное название, но простая проблема.

Я пытаюсь позволить окну прилипать к столу (или булавке), я могу сделать это так:

    [DllImport("User32.dll")]
    static extern IntPtr FindWindow(String lpClassName, String lpWindowName);
    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
    [DllImport("user32.dll")]
    static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

        IntPtr pWnd = FindWindow("Progman", null);
        pWnd = FindWindowEx(pWnd, IntPtr.Zero, "SHELLDLL_DefVIew", null);
        pWnd = FindWindowEx(pWnd, IntPtr.Zero, "SysListView32", null);
        IntPtr tWnd = this.Handle;
        SetParent(tWnd, pWnd);

Это отлично работает, но я не могу изменить прозрачность или непрозрачность.

Я могу использовать CreateWindowEx для создания хорошего прозрачного многоуровневого окна, но тогда этот метод больше не работает для закрепления его на рабочем столе!

Кто-нибудь знает, как это можно сделать?

Спасибо!

1 Ответ

1 голос
/ 09 января 2010

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

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

...