WPF: размеры элемента Canvas
От: just_aircraft  
Дата: 30.10.18 14:48
Оценка:
Привет всем,
Помогите пожалуйста с ребусом..неделю не могу победить.
Есть окно приложения, на нем есть панель типа 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. Вроде очевидно всё..но не срабатывает.
где могут быть грабли?
Re: WPF: размеры элемента Canvas
От: _Raz_  
Дата: 30.10.18 16:24
Оценка:
Здравствуйте, 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>>
Re[2]: WPF: размеры элемента Canvas
От: just_aircraft  
Дата: 30.10.18 20:19
Оценка:
Здравствуйте, _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 улетает не туда, куда надо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.