2013-03-04 357 views
2

一旦現在使用它作爲父級,你將如何解除表單中的應用程序?SetParent掛鉤,你怎麼解除掛鉤?

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

[DllImport("coredll.dll", SetLastError = true)] 
private static extern int GetWindowLong(IntPtr hWnd, int nIndex); 

[DllImport("coredll.dll", SetLastError = true)] 
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 

SetParent(setter, this.panel1.Handle); 

解除掛鉤我試過SetParent(setter,setter);沒有運氣。

+0

我並不熟悉這一點,但我會嘗試設置舊的父母(不管那是什麼),通過存儲它之前設置新的。 – TGlatzer 2013-03-04 05:54:20

+0

對不起,我無法理解'從你的表單中解開一個應用程序' - 這是什麼意思?就像您將Chrome標籤拖放到自己的應用中一樣?請詳細說明:) – 2013-03-04 05:55:33

+0

你必須知道。 – ploxtic 2013-03-04 05:56:15

回答

0

SetParent返回上一個父窗口句柄。要「解除」窗口,您應該能夠用最初返回的句柄調用SetParent。

+0

nope。除非你必須通過你的程序移動窗口,否則這是行不通的。卡在表格/面板 – ploxtic 2013-03-05 02:33:49

+0

如果以前的所有者是桌面,我不確定是否會有任何明顯的視覺效果恢復父母,除非你移動其中一個參與窗口或其他內容。 – 2013-03-05 04:58:04

+0

Chrome,Notepad:兩者都不會在IntPtr.Zero或-1,null或其自己的句柄之外反彈回窗體/面板之外。它對你有用嗎?或者你正在考慮「最初回來」的那個句柄。 – ploxtic 2013-03-05 05:36:51

0

我知道這是晚了,但我可以在零通過從母公司脫鉤:

SetParent(process.MainWindowHandle, IntPtr.Zero); 

這將設置桌面窗口作爲新的母公司。