我试图通过PInvoke使用SetParent API将childForm设置为Excel主窗口的子级:

Form childForm = new MyForm();
IntPtr excelHandle = (IntPtr) excelApplication.Hwnd;
SetParent(childForm.Handle, excelHandle);
childForm.StartPosition = FormStartPosition.Manual;
childForm.Left = 0;
childForm.Top = 0;


正如您在上面看到的,我的目的也是将孩子放置在Excel窗口的左上角。但是,由于某些原因,childForm总是在某个奇怪的位置结束。

我做错了什么?

最佳答案

尽管这里的所有答案都提出了完全合乎逻辑的方法,但没有一个对我有用。然后我尝试了MoveWindow。由于某种原因,我不明白,它确实起作用了。

这是代码:

[DllImport("user32.dll", SetLastError = true)]
internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);

...

Form childForm = new MyForm();
IntPtr excelHandle = (IntPtr) excelApplication.Hwnd;
SetParent(childForm.Handle, excelHandle);
MoveWindow(childForm.Handle, 0, 0, childForm.Width, childForm.Height, true);

10-06 02:40