原文:WPF 调用API修改窗体风格实现真正的无边框窗体

WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm中无边框窗体的样式。

但是AllowTransparency=true后WPF性能会大大降低,动画很卡。无奈只好关闭;

仅设置WindowStyle为None,似乎达不到理想效果,还是有边框:



立刻想到可以通过API修改窗体风格:SetWindowLong

网上查阅资料,发现去掉了WS_CATION = 0x00C00000L 似乎还是没有效果,看到别人的文章,发现WS_CATION = 0x00C0000L,

两个值不一样,于是全部用上,SetWindowLong(hWnd, GWL_STYLE, oldstyle & (~(0x00C00000L  |0x00C0000L)));

终于成功了


真正的无边框窗体,因为公司做触屏程序,需要这样的效果。

wziyx513225244的文章中封装的类修改了一下,http://blog.csdn.net/wziyx513225244/article/details/6988494

直接一个函数设置风格就OK了。感谢wziyx513225244

相信很多人应该都会遇到这个问题,贴出来供大家用:

public class NativeMethods
{ /// <summary> /// 带有外边框和标题的windows的样式 /// </summary> public const long WS_CAPTION = 0x00C00000L; public const long WS_CAPTION_2 = 0X00C0000L; // public const long WS_BORDER = 0X0080000L; /// <summary> /// window 扩展样式 分层显示 /// </summary> public const long WS_EX_LAYERED = 0x00080000L; public const long WS_CHILD = 0x40000000L; /// <summary> /// 带有alpha的样式 /// </summary> public const long LWA_ALPHA = 0x00000002L; /// <summary> /// 颜色设置 /// </summary> public const long LWA_COLORKEY = 0x00000001L; /// <summary> /// window的基本样式 /// </summary> public const int GWL_STYLE = -16; /// <summary> /// window的扩展样式 /// </summary> public const int GWL_EXSTYLE = -20; /// <summary> /// 设置窗体的样式 /// </summary> /// <param name="handle">操作窗体的句柄</param> /// <param name="oldStyle">进行设置窗体的样式类型.</param> /// <param name="newStyle">新样式</param> [System.Runtime.InteropServices.DllImport("User32.dll")] public static extern void SetWindowLong(IntPtr handle, int oldStyle, long newStyle); /// <summary> /// 获取窗体指定的样式. /// </summary> /// <param name="handle">操作窗体的句柄</param> /// <param name="style">要进行返回的样式</param> /// <returns>当前window的样式</returns> [System.Runtime.InteropServices.DllImport("User32.dll")] public static extern long GetWindowLong(IntPtr handle, int style); /// <summary> /// 设置窗体的工作区域. /// </summary> /// <param name="handle">操作窗体的句柄.</param> /// <param name="handleRegion">操作窗体区域的句柄.</param> /// <param name="regraw">if set to <c>true</c> [regraw].</param> /// <returns>返回值</returns> [System.Runtime.InteropServices.DllImport("User32.dll")] public static extern int SetWindowRgn(IntPtr handle, IntPtr handleRegion, bool regraw); /// <summary> /// 创建带有圆角的区域. /// </summary> /// <param name="x1">左上角坐标的X值.</param> /// <param name="y1">左上角坐标的Y值.</param> /// <param name="x2">右下角坐标的X值.</param> /// <param name="y2">右下角坐标的Y值.</param> /// <param name="width">圆角椭圆的width.</param> /// <param name="height">圆角椭圆的height.</param> /// <returns>hRgn的句柄</returns> [System.Runtime.InteropServices.DllImport("gdi32.dll")] public static extern IntPtr CreateRoundRectRgn(int x1, int y1, int x2, int y2, int width, int height); /// <summary> /// Sets the layered window attributes. /// </summary> /// <param name="handle">要进行操作的窗口句柄</param> /// <param name="colorKey">RGB的值</param> /// <param name="alpha">Alpha的值,透明度</param> /// <param name="flags">附带参数</param> /// <returns>true or false</returns> [System.Runtime.InteropServices.DllImport("User32.dll")] public static extern bool SetLayeredWindowAttributes(IntPtr handle, ulong colorKey, byte alpha, long flags); //================================================================================= /// <summary>
/// 设置窗体为无边框风格
/// </summary>
/// <param name="hWnd"></param>
public static void SetWindowNoBorder(IntPtr hWnd)
{
long oldstyle = NativeMethods.GetWindowLong(hWnd, NativeMethods.GWL_STYLE); SetWindowLong(hWnd, GWL_STYLE, oldstyle & (~(WS_CAPTION | WS_CAPTION_2)));
//SetWindowLong(hWnd, GWL_EXSTYLE, WS_CHILD);
} }

最新文章

  1. 深入浅出REST
  2. sharepoint2013的最少下载策略概述(MDS)
  3. 【bzoj2286】 消耗战
  4. oracle 清除当前用户的回收站
  5. iOS 面试题
  6. MySQL递归查询所有子节点,树形结构查询
  7. 解决ScrollView 与ListView共存显示不完全的问题
  8. IBM Python 技术专题
  9. HDU 3830 Checkers
  10. Java虚拟机的内存结构
  11. python_如何获取文件状态
  12. Django extra 和 annotate
  13. Vue(小案例_vue+axios仿手机app)_图片列表操作
  14. 闭包自由变量引用对象的问题 http://bbs.pythontab.com/thread-4266-1-1.html
  15. 调用write方法打印语句到浏览器
  16. HTML超级链接详细讲解
  17. UI 框架
  18. Linux命令_用户和用户组管理
  19. 【转】JMeter学习参数化User Defined Variables与User Parameters
  20. nextjs-demo

热门文章

  1. Innodb单表数据物理恢复
  2. 我的Java开发学习之旅------&amp;gt;Java经典排序算法之归并排序
  3. Erlang中的record与宏
  4. css中背景 字体 文体属性练习
  5. 课后作业11--使用SQL语句创建一个数据库
  6. winfrom 操作PPT
  7. hbase 2.0.2 分布式安装配置/jar包替换
  8. METHODS OF AND APPARATUS FOR USING TEXTURES IN GRAPHICS PROCESSING SYSTEMS
  9. 执行hdfs namenode -importCheckpoint时出现No image directories available!
  10. JAVA从本机获取IP地址