原文: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);}}

WPF 调用API修改窗体风格实现真正的无边框窗体相关推荐

  1. 无边框窗体移动的方法

    文章目录 1 无边框窗体移动的方法 1.1 无边框窗体移动的方法 1 无边框窗体移动的方法 1.1 无边框窗体移动的方法 当我们把窗体设置为无边框后,会发现用鼠标拖动窗体时是没有反应的,我们需要在窗体 ...

  2. 通过调用API函数实现的无边框窗体的拖拽,比判断坐标更快捷

    在winform程序中,有时会选择边框设计会none,但是这样就不能拖拽窗体移动 解决方案有二: 1,判断坐标控制拖拽 2.利用API函数, 下面介绍利用API函数,方便,快捷 #region 移动无 ...

  3. Oracle EBS PO调用API修改一揽子发放行需求日期或数量引发单价变更

    背景:         最近,客户的用户反映批量修改或拆分一揽子发放行的需求日期或承诺日期或数量时,自动修改该发放行的单价为对应PBA行的单价. 解决方法:         通过实际数据分析.参考官方 ...

  4. 01.WPF中制作无边框窗体

    [引用:]http://blog.csdn.net/johnsuna/article/details/1893319 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBor ...

  5. 无边框窗体和用户控件以及权限

    无边框窗体: 就是吧窗体的边框去掉,然后自己做按钮设置功能. 无边框窗体的移动: 将下面代码直接复制粘贴,将窗体的鼠标按下事件的方法改成下面方法的名字就可以直接使用 1 //窗体移动API 2 [Dl ...

  6. 再谈无边框窗体的操作

    本文介绍操作无边框窗体的其他几个方面的技巧. 设置浮动菜单 通常情况下,在无边框窗体中不能设置菜单.如果在无边框窗体中设置了菜单,运行时窗体上就会出现标题栏.那么,是否在无边框窗体中就不能使用菜单了呢 ...

  7. 拖动无边框窗体(VB6代码)

    简单代码片段,记录一下备用. Option Explicit Dim mX As Long, mY As Long Private Sub Form_MouseDown(Button As Integ ...

  8. Qt无边框窗体(Windows)

    Qt无边框窗体Windows篇 去掉标题栏和边框 实现拖拽功能 还原窗体功能 注意点 我们可以做的更好 添加阴影 亚克力面板效果 结语 去掉标题栏和边框 首先第一步我们要通过设置系统绘制的边框消失 s ...

  9. 【C#】使用DWM实现无边框窗体阴影或全透窗体

    1.无边框窗体阴影,win7(需要开启Aero效果)及以上系统 public class LdwmForm : Form{public LdwmForm(){Initialize();}/// < ...

最新文章

  1. rest-framework之解析器
  2. 神“脑补”!只要一段话,就知道你的说话手势 | UC伯克利
  3. ES6标准学习: 4、数组的扩展
  4. 第二次冲刺团队进展报告七
  5. 基于堆栈的虚拟机实现
  6. linux常用ogg脚本,ogg基本监控脚本
  7. 【内核驱动】 Kconfig简介
  8. C++描述杭电OJ 2012.素数判定 ||
  9. MySQL安装错误——Access denied for user 'root'@'localhost' (using password: YES)
  10. java 接口怎么规范属性_JAVA命名规范
  11. 浩万计算机工具,子浩KX3552驱动一键安装工具(Win7/Win8/win10)
  12. Matlab画图技巧: 不需要敲代码的傻瓜式操作流程
  13. 卡耐基:一个人的成功,只有15%是靠专业技术
  14. 对虎牙直播进行爬取,并对信息进行处理分析
  15. Learning to Predict Context-adaptiveConvolution for Semantic Segmentation阅读笔记
  16. Android校园社区平台 校园通 校园生活服务平台app
  17. 操作系统实验指导书(完整版)
  18. linux连公共wifi怎么输密码,公共Wifi密码怎么用 公共Wifi密码使用方法
  19. 思岚科技机器人自主定位导航系统
  20. css选择器优先级和photoshop快捷键以及100度享乐网框架

热门文章

  1. 【Linux操作系统】进程的控制
  2. 西游记中的 “马流” 二元帅 - 我找到了
  3. Class -- 09 -- Field类常用方法解析
  4. 激活层是每一层都有吗_每一个人的青春里,都有一段刻骨铭心的初恋,你还记得她吗?...
  5. 美国服务器的安全措施
  6. 第四届字节跳动青训营
  7. 记录一个有关offsetWidth的怪异问题
  8. 统信UOS配置X11VNC服务--基于systemd
  9. 记一次Linux挖矿木马清除
  10. 宝贝,在带你去看丑小鸭儿童剧吧。