我对wpf中可能修复空域问题有疑问。在空域我的意思是同时使用wpf和win32窗口的问题以及win32窗口始终排在最前面的事实。
我有一个win32窗口,我想将其合并到我的wpf应用程序中。但是我想在那里使用所有花哨的wpf东西(比如把东西放在它上面等等。)。
我知道由于空域问题,这是不可能的。
我的win32窗口只是一个视频窗口,因此它没有键盘或鼠标活动部件。所以我的想法是使用PrintWindow win32函数定期将窗口内容复制到一些内存空间,然后我会使用Interopbitmap来获取它然后我可以使用该interopbitmap作为源。
另外我会隐藏那个win32窗口,因此它没有显示(据说printwindow可以隐藏窗户)。
不幸的是,我对win32编程知之甚少,所以到目前为止我都失败了。有没有其他人有这方面的经验?或者可能有其他解决方案来逃避空域问题?
我正在做这样的事情
this.dispatcher = Dispatcher.CurrentDispatcher;
Utilities.GetClientRect(this.hwnd, out rect);
width = rect.Right;
height = rect.Bottom;
this.dc = Utilities.CreateCompatibleDC(IntPtr.Zero);
this.hBitmap = Utilities.CreateCompatibleBitmap(dc, width, height);
Utilities.SelectObject(this.dc, this.hBitmap);
this.BitmapSource = (InteropBitmap)Imaging.CreateBitmapSourceFromHBitmap(this.hBitmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
然后定期从另一个线程(每秒5次)我做了这个
Utilities.PrintWindow(this.hwnd, dc, WindowPart.Client);
this.dispatcher.BeginInvoke(DispatcherPriority.Render, (Action)this.BitmapSource.Invalidate);
我只是一个黑屏,所以显然不起作用。
任何帮助都将不胜感激。