1、窗口颜色的渐变

C#中可以通过Color.FromArgb( )方法返回一种颜色。

Color.FromArgb( )方法用来返回Color的颜色值,该方法语法结构如下:

 

public static Color FromArgb (

int red,
int green,
 
int blue
)
参数说明如下。

l     red:新Color的红色分量值。有效值为从0~255。
l     green:新Color的绿色分量值。有效值为从0~255。
l     blue:新Color的蓝色分量值。有效值为从0~255。
l     返回值:此方法创建的Color。

该函数就是用3种不同的色值来返回一个颜色,而稍微的调整某一种颜色值就可以使整体的颜色发生细微的变化,在窗体中至上而 下每行填充一种稍微调整后的颜色,这样整体看来就会产生渐变的效果。可以利用窗体的Graphics对象对窗体进行绘图,该对象可以完全操控窗体的客户 区。

触发重新绘制事件的实现代码如下:

private void button2_Click(object sender, EventArgs e)

{
this.Hide( );
this.Visible=true;

}

重新绘制窗体背景颜色的实现代码如下:

protected override void OnPaintBackground(PaintEventArgs e)

{

int y, dy;
y
= this.ClientRectangle.Location.Y;
dy
= this.ClientRectangle.Height / 256;

for (int i = 255; i >= 0; i--)

{

Color c
= new Color( );

c
= Color.FromArgb(Convert.ToInt32(textBox1.Text.ToString( )), i,Convert.ToInt32(textBox2.Text.ToString( )));

SolidBrush sb
= new SolidBrush(c);

Pen p
= new Pen(sb, 1);

e.Graphics.DrawRectangle(p,
this.ClientRectangle.X, y, this.Width,y+dy);

y
= y + dy;

}

}

其实textBox1和textBox2分别为输入r、b分量的文本框。



2、通过设置Form.Opacit属性设置窗体的不透明级别。
如渐显窗体,用Timer控件控制。

private void timer1_Tick(object sender, EventArgs e)
{

this.Opacity += 0.1;

}
3、窗体动画之——滚动字幕

private void timer1_Tick(object sender, EventArgs e)//用Timer来控制滚动速度

{
label1.Left
-= 2;
if (label1.Right < 0)

{

label1.Left
= this.Width;
}

}
4、窗体动画之——动画显示窗体

    Windows提供了一个API函数Animate Window,该函数可以实现窗体的动画效果,AnimateWindow函数在C#中的声明如下。

[DllImportAttribute("user32.dll")]

private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
参数说明如下。
l     hwnd:目标窗口句柄。
l     dwTime:动画的持续时间,数值越大动画效果的时间就越长。
l     DwFlags:DwFlags参数是动画效果类型选项

实例:

public partial class Form1 : Form
{
public const Int32 AW_HOR_POSITIVE = 0x00000001; //自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略
public const Int32 AW_HOR_NEGATIVE = 0x00000002;//自右向左显示窗口。当使用了 AW_CENTER 标志时该标志被忽略
public const Int32 AW_VER_POSITIVE = 0x00000004; //自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略
public const Int32 AW_VER_NEGATIVE = 0x00000008;//自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略
public const Int32 AW_CENTER = 0x00000010;//若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展
public const Int32 AW_HIDE = 0x00010000;//隐藏窗口,缺省则显示窗口
public const Int32 AW_ACTIVATE = 0x00020000;//激活窗口。在使用了AW_HIDE标志后不要使用这个标志
public const Int32 AW_SLIDE = 0x00040000;//使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略
public const Int32 AW_BLEND = 0x00080000; //使用淡入效果。只有当hWnd为顶层窗口的时候才可以使用此标志
public Form1()
{
InitializeComponent();
AnimateWindow(
this.Handle, 500, AW_SLIDE + AW_VER_NEGATIVE);
}


[DllImportAttribute(
"user32.dll")]
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
AnimateWindow(
this.Handle, 300, AW_SLIDE + AW_VER_NEGATIVE + AW_HIDE);
}
}
5、闪烁窗体

Windows提供了一个API函数FlashWIndow,该函数可以使窗体闪烁一下。FlashWIndow函数在C#中声明如下:

[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]

public static extern bool FlashWindow(IntPtr handle, bool bInvert);
参数说明如下。
l     handle:表示将要闪烁的窗体。
l     bInvert:是否恢复状态。

利用该函数只能使窗体闪烁一下,如果让窗口不停地闪烁,就需要用一个Timer控件每隔一段时间就调用该函数使窗体闪烁。

 
代码:

[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern bool FlashWindow(IntPtr handle, bool bInvert);

private void timer1_Tick(object sender, EventArgs e)
{
FlashWindow(
this.Handle,true);
}
6、动画形式的程序界面

从工具箱“选择项”中将Microsoft Animation Control 6.0(SP4)COM组件添加到工具箱,然后继续将该组件从工具箱添加到窗体即可,如图所示:

AxAnimation.open方法用来播放动画文件。其结构如下:

Public void AxAnimation.open(string bstrFilename)


参数说明如下。
l     bstrFilename:将要播放的文件名。
注意:因为使用了AxAnimation类,所以要添加对WMPLib命名空间的引用。

代码:

 

private void Form1_Load(object sender, EventArgs e)

{
axAnimation1.Open(
"Electron.avi");
axAnimation2.Open(
"zybiao.avi");
axAnimation3.Open(
"gd.avi");
}

7、(1)将窗体的RightToLeft属性设置为Yes即可实现使窗体标题栏文字右对齐。
         (2)将窗体的Text属性设为空,同时将ControlBox属性设为False可使窗体没有标题栏。
获取桌面大小:

      (3) this.Left = Convert.ToInt32(textBox1.Text);
               this.Top = Convert.ToInt32(textBox2.Text);

         用来设置窗体在屏幕中的位置。

      (4)将TopMost属性设为True即可实现使窗体始终在最上层。

      (5)textBox2.Text = Screen.PrimaryScreen.WorkingArea.Height.ToString( );
                textBox1.Text = Screen.PrimaryScreen.WorkingArea.Width.ToString( );
               获取桌面大小。

      (6) 在窗口间移动按钮

 窗体中每个可视控件都有所有者和父对象两个重要属性,所有者是控件建立时指定的所属对象,该对象可以是不可视控件,而父对象必须是可视控件。因此可以通过窗 体中可视控件的Parent属性来判断控件是否在这个窗体中,还可以用Form.Controls.Add( )方法为窗体添加控件。

代码:

Form2 f;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
if (button1.Parent == this)
{
f.Controls.Add(
this.button1);
this.button1.Text = "返回原地";
}
else
{
this.Controls.Add(button1);
this.button1.Text = "开始移动";
}
}

private void Form1_Load(object sender, EventArgs e)
{
f
= new Form2();
f.Show();


posted on 2011-03-04 14:53  Penny●zheng  阅读(1107)  评论(0)    收藏  举报