WPF中不规则窗体与WindowsFormsHost控件兼容问题的解决方法

2019-12-26 11:48:47丽君
易采站长站为您分析WPF中不规则窗体与WindowsFormsHost控件兼容问题的解决方法,对比以往的解决方案,给出了一个具有普遍性的技巧,具有一定的借鉴价值,需要的朋友可以参考下    

本文实例讲述了WPF中不规则窗体与WindowsFormsHost控件兼容问题的解决方法。。具体方法如下:

这里首先说明一下,有关WPF中不规则窗体与WindowsFormsHost控件不兼容的问题,网上给出的很多解决方案不能满足所有的情况,是有特定条件的,比如有一篇《WPF中不规则窗体与WebBrowser控件的兼容问题解决办法》(感兴趣的朋友可以自己百度一下这篇文章)。该网友的解决办法也是别出心裁的,为什么这样说呢,他的webBrowser控件的是单独放在一个Form中,让这个Form与WPF中的一个Bord控件进行关联,进行同步移动,但是在移动的时候会出现闪烁,并且还会出现运动的白点,用户体验肯定不好。

OK,绕了一大圈,还是言归正传吧,为什么会出现该问题呢,是什么原因导致在WPF中设置了透明窗体之后,嵌入WinForm中的控件会显示不了呢。一开始我以为是没有正常加载,还要我有UISPY,通过这个软件,我捕获了一下当前运行的程序,发现我在WPF中内嵌的WinForm控件已经加载上了,只是没有看到而已罢了。很郁闷啊。

悲催的程序,头疼啊,是什么原因导致的呢,网上查资料,找到了http://www.easck.com/zh-cn/library/aa970688.aspx ,让我了解了不少知识。由于项目要用到透明窗体还要制作圆角窗体,说以本来打算不改变WPF中对window的设置,即不改变WindowStyle=“None” 和AllowTransparent = “True”这些设置,想在在WindowsFormsHost上做一些设置,发现这条路走不通。浪费了不少时间。

此路不通只有换思路了,那么把AllowTransparent =“false” ,然后就可以显示,呵呵……当然还要修改啊,WPF的窗体多难看啊,外边有一个边框。怎么搞去啊,怎样办,这也是一个问题啊。想用WPF的特性,悲剧了,好像没有相关的方法啊。

OK,路还是有的,程序员就是来解决办法的,怎么办,只能调用Windows的API,把最外层的那层边框被去掉了。那么需要什么呢,思路是有了,对吧,那么就行动吧,google 和百度一通,发现还真有不少例子,c++的例子最全面,可以参考一下。那么就整理了一下需要这些函数:

SetWindowLong   设置值window的样式
GetWindowLong   获取window的样式