问题:
使用Visual Studio.net 2003编写一个在WinCE下运行的应用程序时,需要使用位图资源,于是使用下面的代码:
Using System.Drawing;
…..
Bitmap picBitmap = new Bitmap(“pica.bmp”);
……
Pica.bmp就是我想要使用的位图文件,我将这个文件附加到工程目录中,编译通过,启动调试,但是发现虽然在部署这个应用程序的时候已经将pica.bmp复制到了WinCE Emulator中和应用程序同样的目录下,但是程序运行到这个位置总会抛出一个“FileNotFoundException”,而同样的代码在Windows应用程序中却运行的好好的。
分析:
由于各方面的经验不足,到现在也没想清楚。
解决:
1、 观察一下VS.net是怎样使用位图资源的。
新建一个Smart Device的Windows Form应用,新建一个窗体:Form1,在窗体上拖入一个PictureBox:pbShow,将pbShow的Image属性设置为你想要的位图。然后看Form的源代码,发现问题所在了:
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(LoginForm));
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
原来VS.net是通过.net资源文件来使用个中位图资源的。
假设我们的项目名叫做SmartDeviceApplication1,命名空间叫做SmartApp那么在目录SmartDeviceApplication1/obj/DEBUG目录下你能够找到一个叫做SmartApp.Form1.resources的.net资源文件。这个文件是由.net自动生成的,但是因为我们要使用自己的资源,所以我们要学会编辑和使用这个文件。
2、 编辑*.resources文件
VS.net中自带了一个资源编辑器,叫做RESEDITOR,通常在/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1/Samples/Tutorials/resourcesandlocalization/reseditor这个目录下(可能会由于Visual Studio.NET的版本的不同而不同吧),这个目录下将包含build.bat和ResEditor.cs这两个文件,ResEditor.cs是资源编辑器的源码,微软没有提供编译好了的程序,怎么说也算是支持了一把开源了。打开开始菜单 | 程序 | Microsoft Visual Studio .NET 2003 | Visual Studio .NET工具 | Visual Studio .NET 2003命令提示,定位到上面的目录,运行build.bat就能够编译ResEditor.cs这个文件了。运行ResEditor,就能够编译我们想要的资源了。界面如图:
这样的界面也算是很简洁了,使用也很简单:在Add下拉框中选择你要添加的资源类型,我们这里选的是:System.Drawing.Bitmap,在后面的TextBox里给他取一个名字,比如叫ForTest,点右边的Add按钮,
单击右边的…按钮,浏览到要添加的图片就可以了。从文件里另存为.resources的文件。
3、 使用资源文件
将编译好的文件附加到你的工程中,右键单击工程名,添加 | 添加现有项,选择资源文件,比如叫做MyRes.resources,我们在程序中需要ResourceManager来使用文件中的位图。ResourceManager还能用来解决软件的国际化问题,我们在这里就不介绍了。
System.Resources.ResourceManager rm = new ResourceMagager(“SmartApp.MyRes”, System.Reflection.Assembly.GetExecutingAssembly());
Bitmap picBitmap = (Bitmap)rm.getObject(“ForTest”);
如果在资源文件中添加了string,我们就能直接使用getString了,而不需要用到强制类型转换。
这里的SmartApp是我们的程序的命名空间,MyRes是文件名,记住不要带后缀。这样就能正确地使用我们的位图资源了!^_^