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

来源:转载


            最近开始做一个懒人桌面的项目,于是开始重头学习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。

                           

                   



分享给朋友:
您可能感兴趣的文章:
随机阅读: