/down3/20070605/05142029888.rar
DEMO程序(含源碼)
/down4/20070628/28181121698.rar
2:載入
下載後的rar文件裏有壹個IrisSkin2.dll和壹個skin文件夾。
添加引用,將IrisSkin2.dll引用進項目中。
然後在解決方案資源管理器裏右擊項目→添加→新建文件夾,文件夾名為skin。
建完skin文件夾後再右擊這個文件夾→添加→現有項,在彈出的文件選擇框裏選*.*所有文件,再把解壓出來的skin文件夾裏的所有文件全選進去。
這時候我們可以看到skin文件夾裏已經有了我們添加的所有的換膚文件了。再按ctrl鍵選中所有的skin文件夾裏的文件,在屬性欄裏可以看到“生成操作”壹欄,默認選項是“無”,我們把它改成“嵌入的資源”。
3:類
下面我們新建壹個類,把以下的代碼復制進去,別忘了把命名空間改成妳自己的。
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data;
//TestSkin命令空間,別忘了改成妳自己的。
namespace TestSkin
{
class SkinClass
{
public static Sunisoft.IrisSkin.SkinEngine se = null;
/// <summary>
/// 增加換膚菜單
/// </summary>
/// <param name="toolMenu"></param>
public static void AddSkinMenu(ToolStripMenuItem toolMenu)
{
DataSet skin = new DataSet();
try
{
skin.ReadXml("skin.xml", XmlReadMode.Auto);
}
catch
{
}
if (skin == null || skin.Tables.Count < 1)
{
skin = new DataSet();
skin.Tables.Add("skin");
skin.Tables["skin"].Columns.Add("style");
System.Data.DataRow dr = skin.Tables["skin"].NewRow();
dr[0] = "系統默認";
skin.Tables[0].Rows.Add(dr); skin.WriteXml("skin.xml", XmlWriteMode.IgnoreSchema);
}
foreach (SkinType st in (SkinType[])System.Enum.GetValues(typeof(SkinType)))
{
toolMenu.DropDownItems.Add(new ToolStripMenuItem(st.ToString()));
toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1].Click += new EventHandler(frm_Main_Click);
if (st.ToString() == skin.Tables[0].Rows[0][0].ToString())
{
((ToolStripMenuItem)toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1]).Checked = true;
frm_Main_Click(toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1], null);
}
}
toolMenu.DropDownItems.Add(new ToolStripMenuItem("系統默認"));
toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1].Click += new EventHandler(frm_Main_Click);
if (skin.Tables[0].Rows[0][0].ToString() == "系統默認")
{
((ToolStripMenuItem)toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1]).Checked = true;
}
}
static void frm_Main_Click(object sender, EventArgs e)
{
for (int i = 0; i < ((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems.Count; i++)
{
if (((ToolStripMenuItem)sender).Text == ((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems[i].Text)
{
((ToolStripMenuItem)sender).CheckState = CheckState.Checked;
DataSet skin = new DataSet();
skin.Tables.Add("skin");
skin.Tables["skin"].Columns.Add("style");
System.Data.DataRow dr = skin.Tables["skin"].NewRow();
dr[0] = ((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems[i].Text;
skin.Tables[0].Rows.Add(dr);
skin.WriteXml("skin.xml", XmlWriteMode.IgnoreSchema);
}
else
{
((ToolStripMenuItem)((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems[i]).CheckState = CheckState.Unchecked;
}
}
if (((ToolStripMenuItem)sender).Text == "系統默認")
{
RemoveSkin();
DataSet skin = new DataSet();
skin.Tables.Add("skin");
skin.Tables["skin"].Columns.Add("style");
System.Data.DataRow dr = skin.Tables["skin"].NewRow();
dr[0] = "系統默認";
skin.Tables[0].Rows.Add(dr);
skin.WriteXml("skin.xml", XmlWriteMode.IgnoreSchema);
return;
}
foreach (SkinType st in (SkinType[])System.Enum.GetValues(typeof(SkinType)))
{
if (st.ToString() == ((ToolStripMenuItem)sender).Text)
{
ChangeSkin(st);
return; }
}
}
/// <summary>
/// 改變皮膚
/// </summary>
/// <param name="st"></param>
public static void ChangeSkin(SkinType st)
{
System.Reflection.Assembly thisDll = System.Reflection.Assembly.GetExecutingAssembly();
if (se == null)
{
//TestSkin是指命名空間,這裏妳可以換成妳自己的。
se = new Sunisoft.IrisSkin.SkinEngine(Application.OpenForms[0], thisDll.GetManifestResourceStream("TestSkin.skin." + st.ToString() + ".ssk"));
se.Active = true;
for (int i = 0; i < Application.OpenForms.Count; i++)
{
se.AddForm(Application.OpenForms[i]);
}
}
else
{
//TestSkin是指命名空間,這裏妳可以換成妳自己的。
se.SkinStream = thisDll.GetManifestResourceStream("TestSkin.skin." + st.ToString() + ".ssk");
se.Active = true;
}
}
/// <summary>
/// 移除皮膚
/// </summary>
public static void RemoveSkin()
{
if (se == null)
{
return;
}
else
{
se.Active = false;
}
}
}
/// <summary>
/// 換膚類型
/// </summary>
public enum SkinType
{
Calmness,
DeepCyan,
Eighteen,
Emerald,
GlassBrown,
Longhorn,
MacOS,
Midsummer,
MP10,
MSN,
OneBlue,
Page,
RealOne,
Silver,
SportsBlack,
SteelBlack,
vista1,
Vista2,
Warm,
Wave,
XPSilver
}
}
4:調用
在妳的主窗體裏加上壹個MenuStrip菜單,建壹個2級菜單(如:文件→更換皮膚),然後在Form_Load事件裏寫上調用代碼:
private void Form1_Load(object sender, EventArgs e)
{
//“更換皮膚ToolStripMenuItem” 是上面例子裏“更換皮膚”這個ToolStripMenuItem的Name。 SkinClass.AddSkinMenu(更換皮膚ToolStripMenuItem);
}
5:註
以下兩個方法是主要換膚用的:
ChangeSkin方法換膚
RemoveSkin方法恢復系統默認皮膚
大家可以不用直接給單獨壹個窗體換膚。我以上的代碼是生成壹個換膚菜單,然後所有的窗體都是自動進行換膚了。