Update: Вы также можете проверить WinForms' NativeWindow
class, который может быть использован, чтобы обернуть родную HWWND
и слушать окно сообщений, отправленных в это окно.
Я полагаю, вам нужна функция MoveWindow
API Win32, чтобы установить положение (и размеры) ваше окно В (HWND
один). Вы можете вызвать эту функцию API из .NET via P/Invoke.
Чтобы получить текущее положение и размер окна B, вам также необходимо позвонить GetWindowRect
, также через P/Invoke.
Следующий код не может работать из коробки, и, возможно, есть более простые решения, но это может дать вам отправную точку, вместе с приведенными выше ссылками:
// the following P/Invoke signatures have been copied from pinvoke.net:
[DllImport("user32.dll", SetLastError = true)]
internal static extern bool MoveWindow(IntPtr hWnd,
int X, int Y,
int nWidth, int nHeight,
bool bRepaint);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(HandleRef hWnd, out RECT lpRect);
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left; // x position of upper-left corner
public int Top; // y position of upper-left corner
public int Right; // x position of lower-right corner
public int Bottom; // y position of lower-right corner
}
...
System.Windows.Form a = ...;
IntPtr b = ...;
RECT bRect;
GetWindowRect(b, out bRect);
MoveWindow(b,
a.Location.X + 50, b.Location.Y,
bRect.Right - bRect.Left, bRect.Bottom - bRect.Top,
true);
+1 нравится нравится –
Liking it much. Не могу протестировать прямо сейчас, но сегодня вечером и отметьте, как принято, если он будет работать без излишнего вмешательства. Благодаря! – Lazlo