winform中在panel里嵌入其他窗体

D_rea_m 2017-10-16 02:30:46
如果直接在panel里嵌入其他的窗体,直接用 SetParent(hwnd, panel1.Handle); //panel1.Handle为要显示外部程序的容器;
会出现一个问题,外部的窗体改变大小时,panel会跟着改变,可是里面的窗体不会跟着改变,这个问题该怎么解决啊???
!!!!!里面的窗体不是winform窗体,是我嵌入的其他程序的
...全文
443 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨易夕 2017-10-17
  • 打赏
  • 举报
回复
你不是应该在嵌入之前把这个窗体句柄保存下来吗。
D_rea_m 2017-10-16
  • 打赏
  • 举报
回复
引用 3 楼 qq_28194303 的回复:
Resize窗体还有
[DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool BRePaint);
MoveWindow函数。
我把程序窗口嵌入进去之后,就没办法找到这个程序的窗口句柄了,没办法用MoveWindow
D_rea_m 2017-10-16
  • 打赏
  • 举报
回复
我把程序窗口嵌入进去之后,就没办法找到这个程序的窗口句柄了,没办法用MoveWindow
qq_37753824 2017-10-16
  • 打赏
  • 举报
回复
有DOCK就 DOCK.Fill 没有就这样看看 private void panel1_SizeChanged(object sender, EventArgs e) { panel2.Size = panel1.Size; panel2.Location = panel1.Location; }
晨易夕 2017-10-16
  • 打赏
  • 举报
回复
Resize窗体还有
[DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool BRePaint);
MoveWindow函数。
晨易夕 2017-10-16
  • 打赏
  • 举报
回复
我们做WPF插件也会使用反射将编写好的插件窗体加载到Panel里,用的方法大致相同。
我测试了一下,加载第三方程序有时会失败(可能MainWindow隐藏了之类的),还要加上Sleep才会成功。原因就没功夫去研究了。


[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetParent")]
public extern static IntPtr SetParent(IntPtr childPtr, IntPtr parentPtr);

private void Form1_Load(object sender, EventArgs e)
{
Process p = Process.Start(@"D:\Program Files (x86)\Notepad++\notepad++.exe");
p.WaitForInputIdle();
Thread.Sleep(3000);
SetParent(p.MainWindowHandle, panel1.Handle);//Panel
}


111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧