| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1159 人关注过本帖
标题:[求助]关于更换桌面墙纸
只看楼主 加入收藏
linda84
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-6-2
收藏
 问题点数:0 回复次数:3 
[求助]关于更换桌面墙纸

下面一段是我截的更换桌面墙纸的方法,但是运行到CoCreateInstance 函数时失败,不知道为什么!
请大家帮助我,谢谢!:)

-----------------------------------------------------------------------------------------------------------------------------------------------------
SystemParametersInfo这个方法只能设置bmp格式的文件为背景,如果你一定要用他的话,可以把jpg图片转成bmp,再调用该函数。
另外还有一个方法就是IActiveDesktop,下面是设置用IActiveDesktop设置墙纸的函数
BOOL SetWallpaper(CString &strPicFile, DWORD dwStyle)
{
HRESULT hr;
IActiveDesktop* pIAD;
//创建接口的实例
hr = CoCreateInstance ( CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
IID_IActiveDesktop, (void**) &pIAD );
if(!SUCCEEDED(hr)) return FALSE;
//将文件名改为宽字符串,这是IActiveDesktop::SetWallpaper的要求
WCHAR wszWallpaper [MAX_PATH];
LPTSTR lpStr = strPicFile.GetBuffer(strPicFile.GetLength() );
MultiByteToWideChar(CP_ACP, 0, lpStr, -1, wszWallpaper, MAX_PATH);
strPicFile.ReleaseBuffer();
//设置墙纸
hr = pIAD->SetWallpaper(wszWallpaper, 0);
if(!SUCCEEDED(hr))
return FALSE;
//设置墙纸的样式
WALLPAPEROPT wpo;
wpo.dwSize = sizeof(wpo);
wpo.dwStyle = dwStyle;
hr = pIAD->SetWallpaperOptions(&wpo, 0);
if(!SUCCEEDED(hr))
return FALSE;
//应用墙纸的设置
hr = pIAD->ApplyChanges(AD_APPLY_ALL);
if(!SUCCEEDED(hr))
return FALSE;

//释放接口的实例
pIAD->Release();
return TRUE;
}

在MFC程序中应用此函数时,须注意以下三点。

1.在函数所在文件中加上声明IActiveDesktop的头文件

#include<shlobj.h>

2.在StdAfx.h中插入#include <wininet.h>
位置不能搞错,否则IActiveDesktop将找不到定义

#include <afxwin.h> // MFC core and standard components
#include <wininet.h> // NOTE: corrects compilation errors w/IActiveDesktop!!
#include <afxext.h> // MFC extensions

3.由于此函数引用了COM组件,所以必须在C**App::OnInitInstance()中插入以下语句,初始化COM组件。

AfxOleInit();

搜索更多相关主题的帖子: 墙纸 bmp 函数 BOOL 
2006-06-02 09:46
cathypu0725
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-26
收藏
得分:0 

运行函数之前有没有调CoInitialize(),如果没有加上再试一下.

2006-06-02 12:36
linda84
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-6-2
收藏
得分:0 
以下是引用cathypu0725在2006-6-2 12:36:00的发言:

运行函数之前有没有调CoInitialize(),如果没有加上再试一下.

感谢你的回复!



用了你说的试了试,成功了。
但是一个有颜色的图片显示成了一个全是白色的墙纸。
不知道为什么?

2006-06-02 13:39
linda84
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-6-2
收藏
得分:0 
以下是引用linda84在2006-6-2 13:39:00的发言:

感谢你的回复!



用了你说的试了试,成功了。
但是一个有颜色的图片显示成了一个全是白色的墙纸。
不知道为什么?

呵呵,不好意思!
我自己解决了,参数填错了,谢谢噢!
还有在用了CoInitialize函数后面一定要用CoUninitialize函数来与之对应吧!

2006-06-02 14:01
快速回复:[求助]关于更换桌面墙纸
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011031 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved