C# Winform 窗体美化(六、双层窗体)

33 篇文章 0 订阅
13 篇文章 117 订阅

六、双层窗体

大概情况

双层床体是为了平滑的创建异形窗体的一个解决方案,找了很多资料,整理了一下。

双层窗体的逻辑是建立在 UpdateLayeredWindow 不能绘制控件的基础上,上层再添加一个专门放置控件的层;这样就可以在上层“控件层”放控件,下层的“皮肤层”绘制异形的窗口。

有两点需要主意:

  1. 两个窗体的大小和位置的统一,使用 Size 和 Location 来解决;
  2. 两个窗体的 Z 轴(层次顺序)要准确,使用 Form.Owner 即可解决。
代码

源码下载
如果没有积分,也可以关注我获取哟~
hi
控件层代码:

public partial class MainForm : Form
{
    private SkinForm Skin;
    public MainForm()
    {
        InitializeComponent();
        ShowInTaskbar = false;//禁止控件层显示到任务栏
        FormBorderStyle = FormBorderStyle.None;//设置无边框的窗口样式
    }
    private void MainForm_Load(object sender, EventArgs e)
    {
        if (!DesignMode)
        {
            Skin = new SkinForm(this);//创建皮肤层 
            BackgroundImage = null;//去除控件层背景
            TransparencyKey = BackColor;//使控件层背景透明
            Skin.Show();//显示皮肤层 
        }
    }

    #region 属性
    private bool _skinmobile = true;
    [Category("Skin")]
    [Description("窗体是否可以移动")]
    [DefaultValue(typeof(bool), "true")]
    public bool SkinMovable
    {
        get { return _skinmobile; }
        set
        {
            if (_skinmobile != value)
            {
                _skinmobile = value;
            }
        }
    }
    #endregion
}

皮肤层代码:

partial class SkinForm : Form
{
    private MainForm Main;
    public SkinForm(MainForm main)
    {
        InitializeComponent();
        SetStyles();//减少闪烁
        Main = main;//获取控件层对象
        FormBorderStyle = FormBorderStyle.None;//设置无边框的窗口样式
        ShowInTaskbar = true;//使控件层显示到任务栏
        BackgroundImage = Main.BackgroundImage;//将控件层背景图应用到皮肤层
        BackgroundImageLayout = ImageLayout.Stretch;//自动拉伸背景图以适应窗口
        Size = Main.Size;//统一大小
        Main.Owner = this;//设置控件层的拥有皮肤层
        FormMovableEvent();//激活皮肤层窗体移动
        SetBits();//绘制半透明不规则皮肤
        Location = new Point(Main.Location.X, Main.Location.Y);//统一控件层和皮肤层的位置
    }
    //减少闪烁代码...(见源码)
    //激活皮肤层窗体移动代码...(见源码)
    //绘制半透明不规则皮肤代码...(见源码)
}
效果图

正八经的效果图

参考资料

双层窗体 csdn bbs http://bbs.csdn.net/topics/390769541
双层窗体源码 http://download.csdn.net/download/lyx_520/4921128

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于大大大洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值