2016-11-03 3 views
0

Хорошо для всего сообщества. Я работаю в Visual Studio 2015, в технологиях C# и WPF. Мне нужно встроить в окно моей программы, другую оконную систему сторонней системы, такую ​​как «Блокнот».Внедрение приложения в окно WPF

Я нашел ответ here (извините, что сайт находится на испанском языке), но он работает только с Windows Form.

Это мой код.

//get the third party window 
public static IntPtr getWindow(string titleName) 
{ 
    Process[] pros = Process.GetProcesses("."); 
    foreach (Process p in pros) 
     if (p.MainWindowTitle.ToUpper().Contains(titleName.ToUpper())) 
     return p.MainWindowHandle; 
     return new IntPtr(); 
} 

//Get my own window 
IntPtr ptr = new WindowInteropHelper(this).Handle; 

//a window embedded within the other 
[DllImport("user32.dll")] 
     public extern static IntPtr SetParent(IntPtr hWnChild, IntPtr hWndNewParent); 

Как я уже говорил, это работает для Windows Forms, но в WPF не работает. Кто-нибудь может мне помочь?

+0

Вы почти там, вы должны просто поставить код вместе правильно. –

ответ

0

Вот код, проблема в том, что вам нужно установить положение, ширину, высоту и перерисовать дочернее окно в новом родительском окне.

public void CapturarApp() 
     { 
      hWndApp = ScreenFuntion.getWindow("Notepad"); 
      if (hWndApp.ToInt32() > 0) 
      { 
       ProgramsEncrustForm.MoveWindow(hWndApp, 
        0, 0, 
        Int32.Parse(Width.ToString()), 
        Int32.Parse(Height.ToString()), 1); 
       ProgramsEncrustForm.SetParent(hWndApp, new WindowInteropHelper(this).Handle); 
      } 
      else 
      { 
       hWndApp = IntPtr.Zero; 
      } 
      this.Show(); 
     } 

А вот способ двигаться и перекрашивать окно

[System.Runtime.InteropServices.DllImport("user32.dll")] 
public extern static int MoveWindow(IntPtr hWnd, int x, int y, 
    int nWidth, int nHeight, int bRepaint); 
+0

Я верю, что [этот пост] (http://stackoverflow.com/a/40410219/3110834) отвечает на ваш вопрос, а также комментарий затрагивает проблему, которая * Вы также можете захотеть переставить блокнот после того, как вы добавили его в свое окно , Для этого вы можете использовать метод SetWindowPos *. В таких случаях, имеющих полный ответ, вам не нужно публиковать свой собственный ответ, вы можете опубликовать некоторые комментарии о том, как применить решение, так как тот, кто ответил на ваш вопрос, сказал * Сообщите мне, если у вас возникли проблемы с применением решения * , Я также добавил «SetWindowPos» к ответу. –

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