Autor Beitrag
Staeker
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 21.02.09 13:58 
Hallo,
ich möchte eine Form an den Desktop andocken.
Wisst Ihr zufällig wie man das macht.
Ich habe bisscher eine Klasse genutzt die das unter WinXO macht, doch leider funktioniert es unter Vista überhaupt nicht. Wenn ich es unter Vista ausführe bekommen ich zwar keine Fehlermeldung aber die ganze Form ist nicht mehr sichtbar. Vielleicht wisst ihr ja woran es liegt.

Hier ist der Code:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
//DLLs
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr
    FindWindow([MarshalAs(UnmanagedType.LPTStr)] string lpClassName,
    [MarshalAs(UnmanagedType.LPTStr)] string lpWindowName);

    [DllImport("user32.dll")]
    public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

    [DllImport("user32.dll")]
    public static extern IntPtr GetDC(UInt16 hwnd);

    IntPtr ipDesktop;
    Form ParentForm;

    //Der Kontruktor wird aufgerufen
    public DockWindowIntoDesktop(Form senderForm)
    {
        ParentForm = senderForm;
    }

    //Der Fenster wird angedockt
    public void DockStart()
    {
        IntPtr hwndParent = FindWindow("ProgMan", null);
        SetParent(ParentForm.Handle, hwndParent);
        ipDesktop = GetDC(0);
    }
    
    //Das Fenster wird vom Desktop geloest
    public void DockStop()
    {
        IntPtr hwndParent = FindWindow("screenClass", null);
        SetParent(ParentForm.Handle, hwndParent);
        ipDesktop = GetDC(0);
    }

Gruß
Staeker

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
KainPlan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27

Vista Buisness, Windows 7
C/C++, C#, PHP...
BeitragVerfasst: So 22.02.09 01:47 
Hallo!

Ich hab hier mal ein CodeSnip für dich.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
        /// <summary>
        /// Einzelnes Form auf den Desktop Festkleben
        /// </summary>
        /// <param name="formToDock">Formular, dass an den Desktop gedockt werden soll</param>
        public void StartDocking(Form formToDock)
        {
            IntPtr hwndParent = Win32.User32Api.FindWindow("progman", null);
            Win32.User32Api.SetParent(formToDock.Handle, hwndParent);
        }
        /// <summary>
        /// Einzelnes Formular vom Desktop wieder lösen und normal anzeigen lassen
        /// </summary>
        /// <param name="formToUndock">Formular das wieder normal angezeigt werden soll</param>
        public void StopDocking(Form formToUndock)
        {
            IntPtr hwndParent = Win32.User32Api.FindWindow("screenclass", null);
            Win32.User32Api.SetParent(formToUndock.Handle, hwndParent);
        }


Diese code funktioniert bei mir wunderbar. Musst dir nur die Funktionen wieder wie gewünscht importieren. Allerdings macht dieser Code aus deiner Form KEINE Appbar!
Staeker Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 22.02.09 17:42 
Hallo,
nein leider hat der Tipp auch nicht geklappt. Wenn man es mal genau nimmt war es ja fast da selbe wie der Code den ich hochgestellt habe.

Weiß gemand vielleicht eine Lösung

Gruß
Staeker