winform界⾯设计
来⾃于以下两个地址,为便于查阅,所以全复制到了⾃⼰的BLOG:
⼀,不规则WINFORM窗体
Author:unknown From:Internet
在以前版本的Visual Basic或Visual C++中,创建不规则窗体和控件是⼀件很复杂的事,不仅需要调⽤⼤量API函数⽽且⼯作量也不⼩。不过,现在在Visual C#下,情况就完全不同了。运⽤Windows Forms你就可以很轻易地创建出⼀个不规则的窗体以及窗体上的控件。⼀个具有不规则窗体和控件的应⽤程序肯定会更吸引⼴⼤的⽤户,微软的Windows Media Player 7就显⽰出这⼀点。作为程序员,您⼀定想在⾃⼰的程序中运⽤这点技术吧。
程序的窗体和控件都可以以⾮传统的⽅式被创建。本⽂就向⼤家展⽰如何在应⽤程序中创建不规则窗体,以及如何在窗体上创建各式各样的⾃定义形状的控件。
注:创建不规则窗体和控件这个过程包含了⼤量的图形编程⼯作,所以不同的计算机因内存和显卡的不同可能会导致最终的效果有所不同。因此,在发布你的应⽤程序前,务必在各种不同类型的计算机上做好测试⼯作。
实现⽅法
⾸先,创建⼀个位图⽂件作为程序的窗体。位图可以是任意形状的,但是位图⽂件区域⼀定要⾜够⼤,这样才能包含窗体上的所有控件。然后,你可以通过设置⼀些属性使该图成为程序的窗体。
把程序中的标题栏去掉,否则整个界⾯将显得很不协调。当然你去掉了标题栏也就去掉了它的最⼤化、最⼩化、关闭、移动窗体等功能。为了使程序仍然具有这些功能,我们需在程序中添加⼀些代码,这样⽤户就仍然可以像以前⼀样和程序进⾏交互。
因此,你需要完成如下⼯作:
1.创建⼀个作为窗体的位图⽂件。
2.创建⼀个Windows应⽤程序,⽤上述位图⽂件作为程序的窗体同时去掉其标题栏。
3.添加原标题栏具有的功能所需的代码。
具体步骤
下⾯我就具体向⼤家介绍如何创建不规则窗体。
创建⼀个具有不规则形状的位图⽂件
1.⽤任何画图程序就可以创建不规则形状的位图,你可以使⽤最容易也是最⽅便的画图程序。
2.⽤⼀种颜⾊画出⼀个不规则的区域作为程序的窗体,并⽤另⼀种颜⾊画出该位图的背景。(你要使该不规则区域⾜够⼤。)
3.保存位图⽂件。
下⾯就是⼀个例⼦:
在vs中创建⼀个新的⼯程
⾸先,设置窗体的背景从⽽建⽴窗体形状。
1.在窗体设计器中选中窗体使之获得焦点。
2.在属性对话框中进⾏如下设置:
●将FormBorderStyle属性设置为None。该属性去掉了程序的标题栏,同时也除去了标题栏的功能,不过我在后⾯还会向⼤家介绍如何添加代码以恢复这些功能的。
●将BackgroundImage属性设置为你创建的位图⽂件。你不必在⼯程中添加该⽂件,因为你⼀旦指定了该⽂件,它就会⾃动被添加到⼯程中。
●将TransparencyKey属性设置为位图⽂件的背景颜⾊值(在本例中是蓝⾊)。该属性使得位图的背景即上图中的蓝⾊部分不可见,从⽽窗体就呈现出⼀个不规则的椭圆形。
3.保存⼯程。按Ctrl+F5可以运⾏此程序。(注:因为没有标题栏,所以你可以通过Alt+F4来关闭程序)
将FormBorderStyle属性设置为None后,程序的标题栏就被去掉了。这样,为了获得原来标题栏的功能,我们必须⼿动添加代码。下⾯我就向⼤家介绍如何添加代码实现关闭功能以及移动窗体的功能。
实现窗体的关闭及移动
1.往窗体上拖放⼀个按钮控件。
2.在属性对话框中,将该控件的Text属性设置为“关闭”。
3.双击按钮添加⼀个Click事件处理函数。
4.在代码编辑器中添加如下代码:
private void button1_Click(object sender, System.EventArgs e)
{
this.Close();
}
⼆、不规则按钮
Author:unknown From:Internet
现在,我们已经创建了⼀个不规则的窗体,并实现了⼀些基本的移动窗体、关闭窗体的功能。然⽽,窗体上的按钮控件还是⽼⼀套,那么⽅⽅正正,使得整个界⾯不美观。接下来我就向⼤家介绍如何创建⾃定义形状的控件。
前⾯我们创建不规则窗体的时候⽤到了TransparencyKey属性,但是控件是没有该属性的,所以我们得其他的⽅法来实现控件的不规则形状了。在窗体上画⼀个⾃定义形状的控件时,你需要精确的告知窗体在什么位置以及如何画该控件。在.Net Framework中有相应的类和⽅法来帮你实现这些,所以你不必担⼼具体实现。
.Net Framework中的类提供给控件⼀个指⽰说明,该指⽰说明能确定控件被画的形状。通过不同的指⽰说明,你就可以按你想要的⽅法来画控件了。该指⽰说明利⽤了GraphicsPath这个类,这个类代表了⼀系列⽤来画图的直线和曲线。⾸先,你得指定⼀个GraphicsPath类的对象并告知它你要画什么图形。然后,你将控件的Region属性设置为上述GraphicsPath类的对象。这样,你就可以创建任何⾃定义形状的控件了。
步骤如下:
●创建⼀个GraphicsPath类的实例对象。
●指定好该对象的各项细节(如⼤⼩、形状等等)。
●将控件的Region属性设置为上⾯建⽴的GraphicsPath类的实例对象。
创建⼀个像⽂本的按钮控件:
1.拖放⼀个按钮控件到窗体上。
2.在属性对话框中进⾏如下设置:
●将Name属性设置为CustomButton。
●将BackColor属性设置为⼀个和窗体背景颜⾊不同的颜⾊值。
●将其Text属性设置为空字符串。
3.添加窗体的Paint事件的事件处理函数。
4.添加以下代码,⽤GraphicsPath类的实例对象来画控件。下⾯的代码以⼀串字符串的形式画该按钮控件,同时,程序还设置了字符串的字体、⼤⼩、风格等属性。字符串被赋给GraphicsPath类的实例对象。然后,该实例对象就被设置为按钮控件的Region属性。这样⼀个⾃定义形状的控件就完成了。
private void CustomButton_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
//初始化⼀个GraphicsPath类的对象
System.Drawing.Drawing2D.GraphicsPath myGraphicsPath = new
System.Drawing.Drawing2D.GraphicsPath();
//确定⼀个字符串,该字符串就是控件的形状
string stringText = "Click Me!";
//确定字符串的字体
FontFamily family = new FontFamily("Arial");
//确定字符串的风格
int fontStyle = (int)FontStyle.Bold;
//确定字符串的⾼度
int emSize = 35;
//确定字符串的起始位置,它是从控件开始计算⽽⾮窗体
PointF origin = new PointF(0, 0);
//⼀个StringFormat对象来确定字符串的字间距以及对齐⽅式
StringFormat format = new StringFormat(StringFormat.GenericDefault);
//⽤AddString⽅法创建字符串
myGraphicsPath.AddString(stringText, family, fontStyle, emSize, origin, format);
改变button按钮的形状//将控件的Region属性设置为上⾯创建的GraphicsPath对象
CustomButton.Region = new Region(myGraphicsPath);
}
三、GDI+编程的10个基本技巧
创建绘图表⾯
创建绘图表⾯有两种常⽤的⽅法。下⾯设法得到PictureBox的绘图表⾯。
private void Form1_Load(object sender, System.EventArgs e)
{
/
/得到pictureBox1的绘图表⾯
Graphics g = this.pictureBox1.CreateGraphics();
}
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
//得到pictureBox1的绘图表⾯
Graphics g = e.Graphics;
}
可以利⽤Graphics对象绘制出各种图形图案。控件的Paint事件和OnPaint⽅法都可以绘图都是好时机。在OnPaint⽅法⾥绘制图案⼀定从参数e⾥⾯得到Graphics属性。下⾯是两个例⼦。
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(Color.White);
float x, y, w, h;
x = this.Left+2;
y = this.Top+2;
w = this.Width-4;
h = this.Height-4;
Pen pen = new Pen(Color.Red, 2);
e.Graphics.DrawRectangle(pen, x, y, w, h);
base.OnPaint (e);
}
private void PictureBoxII_Resize(object sender, EventArgs e)
{
{
this.Invalidate();
}
private void button1_Click(object sender, System.EventArgs e)
{
this.pictureBoxII1.CreateGraphics().FillEllipse(
Brushes.Blue, 10, 20, 50, 100);
}
和⽂本有关的三个类:
FontFamily——定义有着相似的基本设计但在形式上有某些差异的⼀组字样。⽆法继承此类。
Font——定义特定的⽂本格式,包括字体、字号和字形属性。⽆法继承此类。
StringFormat——封装⽂本布局信息(如对齐⽅式和⾏距),显⽰操作(如省略号插⼊和国家标准 (National) 数字位替换)和 OpenType 功能。⽆法继承此类。
下⾯的程序显⽰了⼀段⽂字。
private void button2_Click(object sender, System.EventArgs e)
{
Graphics g = this.pictureBoxII1.CreateGraphics();
g.FillRectangle(Brushes.White, this.pictureBoxII1.ClientRectangle);
string s = "aaaaaaaaaaaaaaaaaaaaaaaaaa";
FontFamily fm = new FontFamily("ËÎÌå");
Font f = new Font(fm, 20, FontStyle.Bold, GraphicsUnit.Point);
RectangleF rectF = new RectangleF(30, 20, 180, 205);
StringFormat sf = new StringFormat();
SolidBrush sbrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
sf.LineAlignment = StringAlignment.Center;
sf.FormatFlags = StringFormatFlags.DirectionVertical;
g.DrawString(s, f, sbrush, rectF, sf);
}
GDI+的路径——GraphicsPath类
GraphicsPath类提供了⼀系列属性和⽅法,利⽤它可以获取路径上的关键点,可以添加直线段、圆等⼏何元素。可以获得包围矩形,进⾏拾取测试。这些功能都怎么⽤,要仔细看⼀下。
private void button3_Click(object sender, System.EventArgs e)
{
//绘图表⾯
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论