-1

大家好。

    [DllImport("user32.dll")]
    public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
    
    public void DockAllNote(System.Windows.Forms.Panel panel)
    {
        Process[] MultiClients = Process.GetProcessesByName("notepad");
        foreach (Process Client in MultiClients)
        {
            hWndOriginalParent = Client.MainWindowHandle;
            SetParent(Client.MainWindowHandle, panel.Handle);
            panel.Refresh();
        }
    }`enter code here`

上面的代码工作。我想取消停靠记事本窗口。

    public void UndockNoteAll(System.Windows.Forms.Panel panel)
    {
        Process[] MultiClients = Process.GetProcessesByName("notepad");
        foreach (Process Client in MultiClients)
        {
            SetParent(Client.MainWindowHandle, IntPtr.Zero);
            panel.Refresh();
        }
    }

我尝试了此取消停靠代码,但取消停靠不起作用。记事本留在面板上。如何取消停靠窗口?一年前尝试使用 IntPtr.Zero 取消停靠。我不记得代码是什么了。

抱歉英语不好 谢谢

4

1 回答 1

0

解决了。

IntPtr DockedHandle = IntPtr.Zero;
IntPtr OrjinalHandle = IntPtr.Zero;
//Dock
OrjinalHandle = process.MainWindowHandle
DockedHandle = SetParent(process.MainWindowHandle, panel.Handle);
//Undock
SetParent(OrjinalHandle, DockedHandle);
于 2022-02-20T09:32:34.687 回答