2016-09-29 2 views
0

Я пытаюсь встроить окно приложения в мое приложение формы окна. В целях тестирования я использовал блокнот. Я встраивание его в моей панели, используя следующие:Окно приложения не сосредоточено в панели (формы C#)

public Form1() 
    { 
     InitializeComponent();  

     Process p = Process.Start("notepad.exe"); 
     Thread.Sleep(100); 
     SetParent(p.MainWindowHandle, panel1.Handle);   
    } 

где

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

В результате этого блокнота встраивается в моей панели, но это где-то справа. Он не центрирован таким образом, что верхний левый блокнот совпадает с верхним левым углом панели. Я могу перетащить и переместить блокнот, чтобы выровнять его, но я хочу, чтобы это было сделано автоматически.

Я пробовал играть с настройками привязки, док-станции, поля и прокладки и ничего действительно не работал. Что я делаю не так?

+3

ли эта помощь? http://stackoverflow.com/questions/3032246/c-sharp-opening-process-and-changing-window-position – PaulF

+0

Он делает. Благодарю. – trycatch22

ответ

1

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

Если вы настаиваете на проведении экспериментов, вам нужно получить RECT вашей клиентской области вашей панели и вызвать SetWindowPos() в окне гостевого приложения, чтобы поместить его в нужное место.

(Если это не работает, вы можете также вызвать MapWindowRect() для отображения координат. Но это не должно, вероятно, будет необходимо.)

Смежные вопросы