Привет всем,
Помогите пожалуйста с ребусом..неделю не могу победить.
Есть окно приложения, на нем есть панель типа Canvas — в коде ниже фигурирует как myPanel
Задача найти окно запущенного рядом Notepad, сделать его дочерним окном моего приложения и вписать положение и размеры окна Notepad в поле занимаемое myPanel.
IntPtr hParent=Process.GetCurrentProcess().MainWindowHandle;
IntPtr hWnd = IntPtr.Zero;
foreach (Process pList in System.Diagnostics.Process.GetProcesses())
{
if (pList.MainWindowTitle.Contains("Notepad"))
{
hWnd = pList.MainWindowHandle;
}
}
SetParent(hWnd, hParent);
Point ptPanelOrigin = myPanel.PointToScreen(new Point(0, 0));
MoveWindow(hWnd, (int)ptPanelOrigin.X, (int)ptPanelOrigin.Y, (int)myPanel.ActualWidth, (int)myPanel.ActualHeight, true);
Для "захвата" и позиционирования окна Notepad использую функции WinApi.
Соответстветнно окно находится, дочерним делается, а вот с позиционирование и размерами беда. Никак он не хочет занимать нужное положение и размеры.
Всё время мимо панели. Всегда окно Notepad сдвинуто вниз и вправо и по ширине и высоте не совпадает с размерами панели.
Кодом я пытаюсь найти верхнюю левую точку панели, перевести её в координаты экрана и на эту точку сдвинуть левый верхний угол Notepad. Вроде очевидно всё..но не срабатывает.
где могут быть грабли?
Здравствуйте, just_aircraft, Вы писали:
_> [...] дочерним делается [...]
_>Всегда окно Notepad сдвинуто вниз и вправо
For a child window, they are relative to the upper-left corner of the parent window's client area.
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-movewindow
_>и по ширине и высоте не совпадает с размерами панели.
How do I convert a WPF size to physical pixels?... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Здравствуйте, _Raz_, Вы писали:
_>> [...] дочерним делается [...]
_>>Всегда окно Notepad сдвинуто вниз и вправо
_R_>For a child window, they are relative to the upper-left corner of the parent window's client area.
Спасибо.Буду думать. В лоб не получилось всё равно. С учетом этого нюанса, что позиционирование делается относительно родительского окна, заменил в коде строку поиска координат точки 0,0
Point ptPanelOrigin = myPanel.TranslatePoint(new Point(0, 0), Application.Current.MainWindow);
То есть теперь я ищу левый верхний угол в координатах родительского окна..Но всё равно Notepad улетает не туда, куда надо.