当前位置: 代码迷 >> C# >> C# Winform项目,关于API.SetParent有关问题,请各位帮忙看看
  详细解决方案

C# Winform项目,关于API.SetParent有关问题,请各位帮忙看看

热度:80   发布时间:2016-05-05 03:56:04.0
C# Winform项目,关于API.SetParent问题,请各位帮忙看看。
在C# Winform项目中,有一个form窗体和一个panel控件,panel控件的大小为:956*536。
如果panel控件的位置为0,0,通过以下代码可以将SKYPE视频通话客户端嵌入到panel控件中显示(SKYPE视频通话客户端充满整个panel控件)。
IntPtr ptrSkypeWnd = API.FindWindow("SKYPE", null); \\获取Skype句柄 
API.SetWindowPos(ptrSkypeWnd, IntPtr.Zero, this.panel1.Location.X, this.panel1.Location.Y, 956, 536, 0);\\设置Skype位置以及Skype大小(956*536,与panel控件大小一样)
API.SetParent(ptrSkypeWnd, this.panel1.Handle);\\将Skype嵌入到panel控件中显示,且充满整个panel控件显示

如果panel控件的位置为改为650,0,则通过上面的代码无法将SKYPE视频通话客户端嵌入到panel控件中显示。
请问,各位帮忙看看这么修改下上面的代码,无论panel控件在什么位置,都可以将SKYPE视频通话客户端嵌入到panel控件中显示(且充满整个panel控件显示) 
------解决思路----------------------
你这不是嵌入,而是覆盖了

既然已经FindWindow了

直接Panel1.Controls.Add(ptrSkypeWnd )不行吗
------解决思路----------------------
API.SetWindowPos(ptrSkypeWnd, IntPtr.Zero, this.panel1.Location.X, this.panel1.Location.Y, 956, 536, 0);
直接改成
API.SetWindowPos(ptrSkypeWnd, IntPtr.Zero, 0, 0, 956, 536, 0);
既然已经把panel设置为父容器了,那么窗体的坐标就应该是相对于父容器的坐标,所以应该永远是0,0,而不要把父容器的坐标填写进去
------解决思路----------------------
把SetParent放前面,SetWindowPos放后面执行,试过吗
  相关解决方案