简单说一下背景,项目中重写WPF的popup控件以后出现了一个问题,就是如果程序的主窗体不是当前鼠标操作的窗体(前景窗体),弹出的窗体会出现无法跟随程序主窗体缩小而缩小的问题。
解决办法,获取程序主窗体句柄,在需要弹出popup窗体之前将其设为前景窗体。
核心代码:
//hwndSource程序主窗体的句柄
var hwndSource = (PresentationSource.FromVisual(thi.Child)) as HwndSource;
接下来就调用windowsAPI设置为前景窗体
[DllImport( "user32.dll ")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
顺便说一下,获取程序窗体的句柄也可以使用WindowsAPI (但是我采用下面的方法没有成功,可能类名和程序的标题名有错误吧)
[DllImport("user32.dll ")]
public static extern IntPtr FindWindow(string 类名, string 程序标题);