一,为什么要给窗体程序添加图标
俗话说:人靠衣装,马靠鞍。一个有个性的窗体程序,不能总是使用微软自带的默认图标,而给程序添加一个自己喜欢的图标,不仅彰显水平,还会增加用户的使用体验!所以,窗体程序加入合适的图标值得程序员的学习。下面就开始教程内容啦!!!
二,图标是什么
摘抄自百度的定义: icon是一种图标格式,用于系统图标、软件图标等,这种图标扩展名为*.icon、*.ico。常见的软件或windows桌面上的那些图标一般都是ICON格式的。
博主的理解:icon是图标的一种格式,是用来给系统图标或者软件图标的外表
比如:博主对任务管理器的截图
如上面的截图,360是一款软件的程序,前面都有代表这款软件的图标(看到这个图标,我们就知道这款软件就是360这家公司的软件)
注意:后台进程最后一个系统软件显示得到图标就是微软自带的默认图标(博主觉得又土又low)
续前面的理解:图标的扩展名是*.icon、*.ico,是不是我们只需要在文件夹里面给任意一种形式的图片改一个后缀就能将图片改成*.icon、*.ico格式的文件了呢?
答案是不行的,敲重点了(博主测试后,发现这个图标死活添加不上)
三,如何转换成icon格式
方式一:直接在网上搜索ICON图标在线转换(这个就不多讲了,自己摸索一下就知道了)
方式二:使用icon图标转换软件
(迅捷的PDF转换器有这个功能),引用自我已经测试可用的转换软件
下载地址ICO图标转换1.0密码:74nr
方式三: 自己用c#写一个程序,将图片转换成ICON格式的图标(作为一个程序猿,不能什么都白嫖吧!!!所以记得评论+关注)
C#转换icon的原理:
第一步:使用bitmap这个类( Bitmap 是用于处理由像素数据定义的图像的对象。)创建一个你想要制定大小的原位图(因为计算机操作系统和显示设备的多样性,导致了图标的大小需要有多种格式。扩展资料图标有一套标准的大小和属性格式,且通常是小尺寸的。有16*16,32*32,48*48)
第二步:使用IntPtr类获取原位图的图标句柄(C#中的IntPtr类型被称之为“平台特定的整数类型”,用于本机资源,例如窗口句柄。资源的大小取决于使用的硬件和操作系统,即此类型的实例在32位硬件和操作系统中将是32位,在64位硬件和操作系统中将是64位;但其大小总是足以包含系统的指针---简单来讲就是获得图标能够在计算机显示的必要条件)
第三步:使用Icon这个类,从图标的指定WINDOWS句柄创建Icon(此时,图片已经转换成icon格式了)
附上,我引用的代码
public partial class Form1 : Form
{
Bitmap srcBitmap = null;//用于保存原图
Size size;//用于保存目标图标的大小
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 选择源文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void browseBtn_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "图片(*.jpg,*.png,*.bmp)|*.jpg;*.png;*.bmp";//筛选文件格式
dlg.ValidateNames = true;//文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名
dlg.CheckFileExists = true;///验证文件有效性
dlg.CheckPathExists = true;//验证路径有效性
if (dlg.ShowDialog() == DialogResult.OK)
{
pathTb.Text = dlg.FileName;
srcBitmap = new Bitmap(dlg.FileName);
this.srcPanel.Refresh();
}
}
/// <summary>
/// 禁止用户在此TextBox中输入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
//禁止用户输入
e.Handled = true;
}
/// <summary>
/// 绘制原图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void srcPanel_Paint(object sender, PaintEventArgs e)
{
if (srcBitmap != null)
{
Graphics g = e.Graphics;
//原图的绘制区域
Rectangle rect = new Rectangle(0, 0, this.srcPanel.Width, this.srcPanel.Height);
//在规定区域缩放绘制原图
g.DrawImage(srcBitmap, rect);
}
}
/// <summary>
/// 实现bitmap到ico的转换
/// </summary>
/// <param name="bitmap">原图</param>
/// <returns>转换后的指定大小的图标</returns>
private Icon ConvertBitmap2Ico(Bitmap bitmap)
{
Bitmap icoBitmap = new Bitmap(bitmap, size);//创建制定大小的原位图
//获得原位图的图标句柄
IntPtr hIco = icoBitmap.GetHicon();
//从图标的指定WINDOWS句柄创建Icon
Icon icon = Icon.FromHandle(hIco);
return icon;
}
/// <summary>
/// 生成并保存图标
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void makeBtn_Click(object sender, EventArgs e)
{
if (Path.Text != "" && sizeComb.Text != "")
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "图标(*.ico)|*.ico";
dlg.CheckPathExists = true;
if (dlg.ShowDialog() == DialogResult.OK)
{
FileStream fs = new FileStream(dlg.FileName, FileMode.Create);
Icon icon = ConvertBitmap2Ico(srcBitmap);
this.Icon = icon;
icon.Save(fs);//将Icon保存的指定的输出
fs.Close();
}
}
}
/// <summary>
/// 选择目标图标的大小
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void sizeComb_SelectedIndexChanged(object sender, EventArgs e)
{
if (sizeComb.SelectedIndex == 0)
{
size = new Size(16, 16);
}
else if (sizeComb.SelectedIndex == 1)
{
size = new Size(32, 32);
}
else
{
size = new Size(48, 48);
}
}
}
}
(不清楚,上述几个类的使用方式的可以自行查看MSDN文档)
四,给窗体或者快捷方式添加图标
给快捷方式添加图标:
第一步:右击解决方案,点击属性
第二步:在图标和清单点击浏览
第三步:选择已经转换好的icon图标
判断你转换的icon格式是否正确方法:打开之后后面有图标显示
最后就是自己查看它的图标啦 (在DDEBUG文件夹找到,你创建的快捷方式,就有显示你选择的图标)
给控件或者窗体添加图标
右击窗体属性,在icon添加图标即可
感谢观看!!!!!!