C#(WPF)按钮图片不显示,壁纸切换功能

来源:互联网 发布:淘宝o2o平台 编辑:程序博客网 时间:2024/04/30 18:15

            最近开始做一个懒人桌面的项目,于是开始重头学习C#,今天实现了桌面壁纸的切换功能,代码很少,但是遇到了很多基础的问题,我全部列在这里,供小伙伴们查看,少走弯路(我的环境是vs2013+wpf+.net4.0)。

              1.  给按钮添加了图片,设计视图里能显示,但是运行时就是看不到图片显示

                弄了半天才发现需要把资源文件添加到工程里,这里我们直接拖入到工程里的引用里就行了。

                    

                    如果还不行,你要试着重新生成解决方案

                    

            2.   相对路径问题

                   为了程序的可移植性,我在程序里使用了相对路径,但是又出现了问题,切换壁纸无效。又是想了半天,才肯定是路径问题,这里是因为xmal文件和程序运行时,相对路径的当前目录改变了的原因。之前我为按钮添加图片时,相对路径的当前目录是工程当前所在目录

                   

                  所以我要使用resource文件夹里的图片,直接使用相对路径"Resource\Icon\next.png"就行了,但是到了切换壁纸的时候,因为这时程序开始运行了,所以此时的相对路径的当前目录改变到了debug目录,这时再要使用Resource文件夹里的文件,就不能再直接使用"Resource\Icon\next.png",得先回到Resource文件夹所在的目录在调用,所以这里得这样使用”..\\..\\Resource\\wallpaper.bmp“(这里为什么有两个斜杠?理由是转移字符,这里也可以这样写@“..\..\Resource\wallpaper.bmp”,不懂自己google)

          3.   如何进行壁纸切换

                调用windows的user32.dll,来实现壁纸切换,但是这里必须注意,这个api只支持bmp格式的图片,所以,要想切换,得先把图片格式通过程序改为bmp,主要程序如下

                

            //取出将要替换的壁纸            string wallpaper = "..\\..\\Resource\\Wallpaper\\" + allimg[current_img_num];//取出要切换的壁纸路径            //将指针指向下一张壁纸,若是这个数字超过了列表的长度,说明壁纸已经到达最后一张,这时将其置为1,重头开始            if (current_img_num++ >=allimg.Count()-1)            {                current_img_num=1;            }            string tempFile = "..\\..\\Resource\\wallpaper.bmp";//因为壁纸必须为bmp格式,所以设置一个bmp的暂存文件            System.Drawing.Image image = System.Drawing.Image.FromFile(wallpaper);            image.Save(tempFile, System.Drawing.Imaging.ImageFormat.Bmp);//将要切换的壁纸            wallpaper = tempFile;            SystemParametersInfo(20, 0, wallpaper, 0x2);//将壁纸切换为Wallpaper

                      注意System.Drawing.Image这个类必须要引用System.Drawing这个命名空间才行

                        

                     程序比较简单欢迎下载LazyDeskV1.0。

                           

                   

0 0
原创粉丝点击