首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

1.6  特殊形状的窗体

将界面以不规则的形状显示在桌面上,可以给用户一种新鲜的感觉。本节主要对窗体以特殊的形状进行显示,如非矩形窗体和字体形窗体等。

实例022  非矩形窗体

*实例说明

文本框:  
图1.22  非矩形窗体
大部分Windows窗体都是一个矩形区域,读者是否已经厌倦了这种中规中矩的矩形窗体?本例中的窗体是一个打破传统矩形的异型窗体,运行该例会看到一个非常可爱的窗体,单击【X】按钮就会使窗口关闭。实例效果如图1.22所示。

*技术要点

以前,创建非矩形窗体是一个既费时又费人力的过程,其中涉及到 API 调用和大量的编程工作。在.NET 2.0框架中可以不调用API非常轻松的实现这一功能。只要重写窗体的OnPaint方法,在方法中重新绘制窗体,然后用透明色将窗体设置透明即可。

(1)Form.OnPaint方法:此成员重写Control.OnPaint。用来重新绘制窗体图像。其结构如下:

protected override void OnPaint (PaintEventArgs e)

参数说明如下。

l     PaintEventArgs:为Paint事件提供数据。

*实现过程

(1)创建一个项目,将其命名为Ex01_22,默认窗体为Form1。

(2)在窗口中添加Label控件,并将BackColor属性设为透明,将text属性设为空。

(3)将窗体的TransparencyKey属性设为窗体的背景色。

(4)主要程序代码。

设置图片透明颜色的实现代码如下:

        private void Form1_Load(object sender, EventArgs e)

        {

            bit = new Bitmap("Heart.bmp");

            bit.MakeTransparent(Color.Blue);

        }

重写基类方法,具体代码如下:

        protected override void OnPaint(PaintEventArgs e)

        {

            e.Graphics.DrawImage((Image)bit, new Point(0, 0));//将图片画出

        }

*举一反三

根据本实例,读者可以开发以下程序。

  可以把窗体制做成各种卡通图形。

*  可以将窗体制做成各种几何图形。

*  可以将窗体制做成桌面小精灵。

实例023 建立字体形状窗体

*实例说明

文本框:  
图1.23  建立字体形状窗体
大家都见过不规则形状的窗体吧,那么如何制作一个文字形的窗体呢?文字形窗体一般应用在屏幕提示中,如收款机屏幕等。运行本例,效果如图1.23所示。

*技术要点

以前,创建字体形窗体是一个既费时又费人力的过程,其中涉及到API调用和大量的编程工作。在.NET 2.0框架中可以不调用API非常轻松的实现这一功能。只要先将字体画在一幅图上,然后重写窗体的OnPaint方法(方法的详细内容可以参见实例022),在方法中用图重新绘制窗体,用背景色将窗体设置透明即可。

*实现过程

(1)创建一个项目,将其命名为Ex01_23,默认窗体为Form1。

(2)主要程序代码。

namespace SpecialSharpWindows

{

    public partial class Form1 : Form

    {

        Bitmap bit;

        public Form1()

        {

            InitializeComponent();

        }

设置图片透明颜色的实现。代码如下:

        private void Form1_Load(object sender, EventArgs e)

        {

            bit = new Bitmap("1.bmp");

            bit.MakeTransparent(Color.Blue);

        }

重写基类方法的实现。代码如下:

        protected override void OnPaint(PaintEventArgs e)

        {

            e.Graphics.DrawImage((Image)bit, new Point(0, 0));

        }

        private void label1_Click(object sender, EventArgs e)

        {

            this.Close();

        }

    }

}

*举一反三

根据本实例,读者可以实现以下功能。

*  制作圆形的窗体。

*  制作锯齿状的窗体。

实例024 控件随窗体自动调整

*实例说明

文本框:  
图1.24  控件随窗体自动调整
在软件开发中,随着窗体的大小变化,界面会和设计时出现较大的差异,控件和窗体的大小会不成比例非常不美观。本例中的控件是一个可以随窗体大小变化的控件。运行该例会看到一个控件随窗体大小变化的窗体。实例效果如图1.24所示。

*技术要点

在.NET 2.0框架中可以非常轻松的实现这一功能。大多数控件都有Anthor属性,当在窗体上添加控件时设置Anthor属性即可。Anthor属性是个锚定属性,指定了控件距容器边缘的距离。当窗体大小变化时,控件距窗体边缘的距离不变,自然大小就随窗体自动调整。

*实现过程

(1)创建一个项目,将其命名为Ex01_24,默认窗体为Form1。

(2)在窗体上添加MenuStrip控件、ToolStrip控件和Button控件。并设置Button的Anthor属性和Text属性。

*举一反三

根据本实例,读者可以实现以下功能。

*  图片大小随着窗体大小变化的窗体。

*  菜单栏大小随着窗体大小变化的窗体。

实例025 带分隔栏的窗体

文本框:  
图1.25  带分隔栏的窗体
*实例说明

在软件开发中,经常需要将界面分成几个部分,而且这几个部分又可以自由调整大小。运行本例,实例效果如图1.25所示。

*技术要点

在.NET 2.0框架中可以非常轻松的实现这一功能,只要在窗体中加入SplitContainer控件即可。SplitContainer控件带有一个分隔栏,用来把窗体分成两部分。

*实现过程

(1)创建一个项目,将其命名为Ex01_25,默认窗体为Form1。

(2)在Form1窗体上添加MenuStrip控件用来设计菜单栏,添加ToolStrip控件用来设计工具栏,添加SplitContainer控件用来设计分隔栏。

*举一反三

根据本实例,读者可以实现以下功能。

*  分成3部分的窗体。

*  分成4部分的窗体。

实例026 随机更换主界面背景

*实例说明

文本框:  
图1.26  随机更换主界面背景的程序

如果开发的软件用户使用频率非常高,可以为程序设计随机更换背景的程序。这样不但可以使用户心情愉快,也增加了软件的人性化设计。下面的界面就是一个随机更换主界面的例子,效果如图1.26所示。

*技术要点

随机更换主界面背景使用了Random类和ImageList控件。首先为ImageList控件添加一组图片,然后实例化一个Random类,再用Next()方法产生一个随机数以决定将哪个图片设为背景。

Random.Next()方法用来返回一个小于所指定最大值的非负随机数。其结构如下:

public virtual int Next (int maxValue)

参数说明如下。

l     maxValue:要生成的随机数的上界(随机数不能取该上界值)。maxValue必须大于或等于零。

l     返回值:大于或等于零且小于maxValue的32位带符号整数,即返回的值范围包括零但不包括maxValue。

*实现过程

(1)创建一个项目,将其命名为Ex01_26,默认窗体为Form1。

(2)在Form1窗体上添加ImageList控件,并为ImageList控件添加图片。

(3)主要程序代码。

        private void Form1_Load(object sender, EventArgs e)

        {

            Random rdn = new Random();

            int i = rdn.Next(imageList1.Images.Count);//产生一个随机数

            this.BackgroundImage = imageList1.Images[i];

        }

*举一反三

根据本实例,读者可以开发以下程序。

  每天更换主程序背景的主界面。

*  随机更换菜单栏、工具栏图标的主程序。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论