zoukankan      html  css  js  c++  java
  • .NET基础示例系列之十:不规则窗体

    .NET中制做不规则形状的窗体有两种方法,一种是重写onpaint函数,另一种比较简单的方法是使用不规则的图片做背景,然后设置相关的属性。这里介绍的是后者,以及使用这种方法的一些细节问题:

     

    1.首先准备一张不规则的背景图片,例如一张圆角边框的图片

     

    2.新建项目,将窗体FormBorderStyle设置为none,以去掉标题栏。设置BackgroundImage

     

    3.设置窗体的TransparencyKey属性为图片中圆角边框之外的颜色,窗体在遇到该颜色将显示为透明

    通常这种做法是OK的,运行即可看到效果

     

    但是有几个值得注意的问题:

    1.所使用的背景图片,圆角边框之外的颜色最好不要使用透明、白色、或黑色。举个例子,使用白色,则TransparencyKey将设置为白色,如果你的窗体上有checkbox一类的控件,你会发现你点不中小框了,因为小框的白色部分此时变为透明。透明、黑色原因相同。在下面的例子中,我用的是黄色。

     

    2.如果你的显示器显示设置高于24位色,会发现TransparencyKey设置不起作用了。这是微软的一个bug,有一种解决办法是,先将背景图片添加到资源文件,然后在窗体构造时为窗体设置背景图片:

    Bitmap bmp = AppResource.bg01;

    bmp.MakeTransparent(Color.Yellow);

    this.BackColor = Color.Yellow;

    this.BackgroundImage = bmp;

    this.TransparencyKey = Color.Yellow;

     

    3.背景图片最好使用位图,试了试jpg,好像有问题。

     

    以下是代码,包括添加鼠标事件以便可以拖动窗体:

    private bool isMouseDown = false;

    private Point position;

     

    public MainForm()

    {

        InitializeComponent();

        Bitmap bmp = AppResource.bg01;

        bmp.MakeTransparent(Color.Yellow);

        this.BackColor = Color.Yellow;

        this.BackgroundImage = bmp;

        this.TransparencyKey = Color.Yellow;

    }

     

    private void btnExit_Click(object sender, EventArgs e)

    {

        this.Close();

    }

     

    private void MainForm_MouseDown(object sender, MouseEventArgs e)

    {

        if (e.Button == MouseButtons.Left)

        {

            int x = -e.X;

            int y = -e.Y;

            position = new Point(x, y);

            isMouseDown = true;

        }

    }

     

    private void MainForm_MouseMove(object sender, MouseEventArgs e)

    {

        if (isMouseDown)

        {

            Point newPosition = Control.MousePosition;

            newPosition.Offset(position);

            this.Location = newPosition;

        }

    }

     

    private void MainForm_MouseUp(object sender, MouseEventArgs e)

    {

        if (e.Button == MouseButtons.Left)

        {

            isMouseDown = false;

        }

    }

  • 相关阅读:
    2019.7.17东湖大数据页面三
    2019.7.17东湖大数据页面二
    2019.7.17东湖大数据页面一
    css的使用方法和css选择器
    css定位和浮动
    form表单的理解及用法
    CSS中路径及form表单的用法
    关于新手html的认识 以及对table的基本用法
    网络编程和并发34题
    爬虫day01
  • 原文地址:https://www.cnblogs.com/morvenhuang/p/520116.html
Copyright © 2011-2022 走看看