作者terrorlone (要努力成为伟大的学者)
看板C_Sharp
标题[问题] 执行档与表单共用图示
时间Sat May 19 13:06:29 2012
第一次在此发问,请多多指教。
这个问题我已经尽我所能找了一大堆不同的既有作法来参考了,
但是真的实在很难想像理应这麽单纯的一个问题最後却需要那麽复杂的解法。
我想要做的事情简单来说就是让编译出来的执行档以及程式表单使用同样的一个图示,
重点在於这个图示真的在资源当中是同样的一个图示,而不是重复了两次。
明明是同样的图示,没有理由在资源档里面放两份徒增执行档大小不是吗?
可是这样一个非常合理而且几乎我每一个写的程式都需要的机制,
我却始终找不到一个「简单」的方法来做到
(所谓简单是指只需要至多两三行程式就能搞定)。
两个网路上的人常说的作法:
(一)
this.Icon=Icon.ExtractAssociatedIcon(Application.ExecutablePath);
这个方法固然是很简短,可是问题是 ExtractAssociatedIcon 方法
只会抽出 32x32 尺寸的图示,这虽然在工作列上不会有问题,
可是显示在表单左上角的那个 16x16 图示可能看起来就会不太对了。
我需要的作法必须要能够确实抽出执行档图示的全部尺寸。
(二)
this.Icon=new Icon(System.Reflection.Assembly.GetExecutingAssembly()
.GetManifestResourceStream("namespace.filename.ico"));
这个方法可以抽出图示的全部尺寸,
可是却必须把那个被设定为执行档图示的档案设定编译选项为「内嵌资源」,
结果这样一搞变成编译出来的执行档又是把图示放了两份(看档案大小就知道),
根本没有达到我一开始的目的。
到最後,假如那个用来作为执行档图示的档案仍旧是以预设的「内容」方式编译的话,
我怎样都查不到简单的作法可以短短几行就把全尺寸的图示抽取出来,
到最後唯有的作法只有用一大堆 API 去读资源、
把个别尺寸的图示提取出来拼成一个 stream,
再用那个 stream 去建立 Icon 物件,整个就是让人觉得很不畅快。
也许我所期望的简单作法根本不存在,
但如果有的话,希望这边有人知道该怎麽做……
大感谢~
--
钱,真的是万能的。
——如果你不这麽觉得的话,那只是因为你的钱还不够多而已。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 24.7.197.217
1F:推 DearKurt:图片直接加入到专案资源内 05/20 17:46
2F:→ DearKurt:然後 this.Icon=Properties.Resources.图片名称 05/20 17:46
3F:→ terrorlone:你试试看就知道你那样的方法也是一样会放两份 05/21 12:16
4F:→ terrorlone:那在概念上跟我说的方法(二)是一样的,只是换个写法 05/21 12:18
5F:推 tnav:所谓的一样是指? 图片在专案资源档之中,确实只放一份而已呀? 05/21 21:40
6F:→ tnav:两张图分别从本机资源汇入,或读专案资源档,exe容量也差一倍 05/21 21:42
7F:→ terrorlone:我不确定我是否误解你的意思,但我操作的结果无疑执行 05/24 16:12
8F:→ terrorlone:档会是两倍大。我的流程:专案右键选「属性」,按左边 05/24 16:12
9F:→ terrorlone:「资源」标签,以「加入现有档案」的方式插入图示,然 05/24 16:13
10F:→ terrorlone:後再选左边「应用程式」标签,把「图示和资讯清单」中 05/24 16:13
11F:→ terrorlone:的图示设定成刚才插入的资源。很明显执行档是两倍大。 05/24 16:13
12F:→ terrorlone:而如果忽略插入资源的动作直接设定图示档案,那麽一楼 05/24 16:16
13F:→ terrorlone:的那段 code 是不能跑的,因为该图示并非内嵌资源 05/24 16:16