C#仿QQ皮肤系列之-引言
2010-03-24 11:00
218 查看
C#仿QQ皮肤-实现原理系列文章导航
/article/4703880.html
C#仿QQ皮肤系列之-引言
开篇大喜吧,有朋友很早就提出让我写文章说明这块的原理,一直没有时间来写,今天是这块的第一篇文章,我不打算说什么实际的实现上的问题,跟大家聊聊天
不知道 有没有朋友研究过这一块,其实只有三个点上的技术要我们去研究的,第一个就是GDI+ ,基本上每一个控件都 用的上,当然这套皮肤主要也是从这块入手的,建议如果对这块不太理解的朋友可以先学习一下,第二个就是 windows的API,像显示方面的,呵呵 ,当然还有别的,这些我会在之后的具体实现上一一说明,第三块其实就是,程序的实现原理了,也就是作文里的中心思想。
先告诉大家一个好的消息吧,就是在最新的皮肤里我又增加了一个右键菜单的功能, 方便大家的使用,只在在调用的界面里加上一行就可以了, 跟使用正常的控件没有什么分别,当然也是有不同肤色让大家选择的。具体功能 可以看最新版本的皮肤。
接下来先做个小例子吧,实现一个最简单点的控件就是Button,原理今天先不讲,就讲讲怎么实现效果的先来看一下效果
代码
public Image MouseMoveImage
{
get
{
return _mouseMoveImage;
}
set
{
_mouseMoveImage = value;
}
}
public Image MouseDownImage
{
get
{
return _mouseDownImage;
}
set
{
_mouseDownImage = value;
}
}
public Image NormalImage
{
get
{
return _normalImage;
}
set
{
_normalImage = value;
this.BackgroundImage = _normalImage;
}
}
public Color ImageTransparentColor
{
get
{
return this.imageTransparentColor;
}
set
{
this.imageTransparentColor = value;
Bitmap image = this.BackgroundImage as Bitmap;
if (((image != null) && (value != Color.Empty)) && !ImageAnimator.CanAnimate(image))
{
try
{
image.MakeTransparent(this.imageTransparentColor);
}
catch
{ }
}
}
}
//重写一下创建控件的方法
protected override void OnCreateControl()
{
base.OnCreateControl();
if (this.NormalImage != null)
{
this.BackgroundImage = NormalImage;
}
}
//重写进入事件
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
if (this.MouseMoveImage != null)
{
this.BackgroundImage = MouseMoveImage;
}
this.Invalidate();
}
//重写离开可见部分的事件
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
if (this.NormalImage != null)
{
this.BackgroundImage = NormalImage;
}
this.Invalidate();
}
//重写鼠标按下事件
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
base.OnMouseDown(e);
if (this.MouseDownImage != null)
{
this.BackgroundImage = this.MouseDownImage;
}
}
//重写鼠标离开事件
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
{
base.OnMouseUp(e);
if (this.NormalImage != null)
{
this.BackgroundImage = NormalImage;
}
}
//重写背景修改时的事件
protected override void OnBackgroundImageChanged(EventArgs e)
{
base.OnBackgroundImageChanged(e);
this.ImageTransparentColor = Color.FromArgb(255, 0, 255);
}
public string ToolTip
{
get { return _toolTip; }
set
{
_toolTip = value;
this.toolTip.SetToolTip(this, _toolTip);
}
}
其实我也不知道 要怎么开头说,不知道 这样行不行,如果大家有更好的方案可以告诉我, 我一定改正,呵呵
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/article/4703880.html
C#仿QQ皮肤系列之-引言
开篇大喜吧,有朋友很早就提出让我写文章说明这块的原理,一直没有时间来写,今天是这块的第一篇文章,我不打算说什么实际的实现上的问题,跟大家聊聊天
不知道 有没有朋友研究过这一块,其实只有三个点上的技术要我们去研究的,第一个就是GDI+ ,基本上每一个控件都 用的上,当然这套皮肤主要也是从这块入手的,建议如果对这块不太理解的朋友可以先学习一下,第二个就是 windows的API,像显示方面的,呵呵 ,当然还有别的,这些我会在之后的具体实现上一一说明,第三块其实就是,程序的实现原理了,也就是作文里的中心思想。
先告诉大家一个好的消息吧,就是在最新的皮肤里我又增加了一个右键菜单的功能, 方便大家的使用,只在在调用的界面里加上一行就可以了, 跟使用正常的控件没有什么分别,当然也是有不同肤色让大家选择的。具体功能 可以看最新版本的皮肤。
接下来先做个小例子吧,实现一个最简单点的控件就是Button,原理今天先不讲,就讲讲怎么实现效果的先来看一下效果
代码
public Image MouseMoveImage
{
get
{
return _mouseMoveImage;
}
set
{
_mouseMoveImage = value;
}
}
public Image MouseDownImage
{
get
{
return _mouseDownImage;
}
set
{
_mouseDownImage = value;
}
}
public Image NormalImage
{
get
{
return _normalImage;
}
set
{
_normalImage = value;
this.BackgroundImage = _normalImage;
}
}
public Color ImageTransparentColor
{
get
{
return this.imageTransparentColor;
}
set
{
this.imageTransparentColor = value;
Bitmap image = this.BackgroundImage as Bitmap;
if (((image != null) && (value != Color.Empty)) && !ImageAnimator.CanAnimate(image))
{
try
{
image.MakeTransparent(this.imageTransparentColor);
}
catch
{ }
}
}
}
//重写一下创建控件的方法
protected override void OnCreateControl()
{
base.OnCreateControl();
if (this.NormalImage != null)
{
this.BackgroundImage = NormalImage;
}
}
//重写进入事件
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
if (this.MouseMoveImage != null)
{
this.BackgroundImage = MouseMoveImage;
}
this.Invalidate();
}
//重写离开可见部分的事件
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
if (this.NormalImage != null)
{
this.BackgroundImage = NormalImage;
}
this.Invalidate();
}
//重写鼠标按下事件
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
base.OnMouseDown(e);
if (this.MouseDownImage != null)
{
this.BackgroundImage = this.MouseDownImage;
}
}
//重写鼠标离开事件
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
{
base.OnMouseUp(e);
if (this.NormalImage != null)
{
this.BackgroundImage = NormalImage;
}
}
//重写背景修改时的事件
protected override void OnBackgroundImageChanged(EventArgs e)
{
base.OnBackgroundImageChanged(e);
this.ImageTransparentColor = Color.FromArgb(255, 0, 255);
}
public string ToolTip
{
get { return _toolTip; }
set
{
_toolTip = value;
this.toolTip.SetToolTip(this, _toolTip);
}
}
其实我也不知道 要怎么开头说,不知道 这样行不行,如果大家有更好的方案可以告诉我, 我一定改正,呵呵
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
相关文章推荐
- C#仿QQ皮肤系列之-引言
- C#仿QQ皮肤系列之-引言
- C# WinForm开发系列 - WebBrowser
- (转)C#线程系列讲座(4):同步与死锁
- 大白话系列之C#委托与事件讲解(序言)
- 【面向对象语言系列】关于 C# 数据分析,你需要知道的事
- ASP.NET Web 应用开发实战快速上手系列 2——C#基础
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
- C#系列之String和StringBuilder
- C# WinForm开发系列 - WebBrowser
- OAuth 2.0系列教程(一)引言
- C#多线程学习(五) 多线程的自动管理(定时器) (转载系列)——继续搜索引擎研究
- [C# 网络编程系列]专题八:P2P编程
- 大白话系列之C#委托与事件讲解大结局
- C# WinForm急速系列 – DataGridView 附Word文档
- 使用C#调用金诚信71x系列读卡器的DLL
- 整理完成了C# WinForm开发系列 - Report文章收藏
- [导入]C# 3.0入门系列(二)
- [C# 网络编程系列]专题五:TCP编程
- [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器