请问

kane 2003-06-04 04:19:03
class CActiveDesktop {

protected:

// ATL smart pointers are the only way to go!!

CComQIPtr<IActiveDesktop> m_pIActiveDesktop;



public:

HRESULT m_hr; // most recent return code



// ctor: create IActiveDesktop interface instance

//

CActiveDesktop() {

m_hr = m_pIActiveDesktop.CoCreateInstance(CLSID_ActiveDesktop,

NULL, CLSCTX_INPROC_SERVER);

// If this bombs, you probably forgot to call call CoInitialize

ASSERT(SUCCEEDED(m_hr));

}
已经include了shlobj.h
编译仍说IActiveDesktop没有定义
...全文
39 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kane 2003-06-06
  • 打赏
  • 举报
回复
解决了,把最后一个applychanges的参数改为AD_APPLY_ALL

在此,多谢 ukyoking(累) 老兄
kane 2003-06-06
  • 打赏
  • 举报
回复
还有个问题,就是通过程序改变动态桌面的wallpaper,
#include "objbase.h"
#include "wininet.h"
#include "shlobj.h"
#include "windows.h"
#include "TCHAR.h"
#include "atlconv.h"
#define UNICODE

int main(int argc, char* argv[])
{

HRESULT hr;
IActiveDesktop *pActiveDesktop;

CoInitialize(NULL);
//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
IID_IActiveDesktop, (void**)&pActiveDesktop);

COMPONENTSOPT opt;
opt.dwSize = sizeof(opt);
opt.fActiveDesktop = opt.fEnableComponents = true;
hr = pActiveDesktop->SetDesktopItemOptions(&opt,0);
pActiveDesktop->ApplyChanges(AD_APPLY_REFRESH); // do it!

//Insert code to call the IActiveDesktop methods
USES_CONVERSION;
char path[] = "e:\\pic\\rpcp001.jpg";
LPWSTR sWallpaper = A2W(path);

// pActiveDesktop->GetWallpaper(sWallpaper, 256, 0);
hr = pActiveDesktop->SetWallpaper(sWallpaper, 0);
hr = pActiveDesktop->ApplyChanges(AD_APPLY_REFRESH);


// Call the Release method
pActiveDesktop->Release();
CoUninitialize();
return 0;
}

编译通过,每个函数执行都返回S_OK,也没问题,但桌面wallpaper确不改变????
kane 2003-06-06
  • 打赏
  • 举报
回复
blueblood7老兄说的问题确实存在,好奇怪

kane 2003-06-05
  • 打赏
  • 举报
回复
还是不行,没人知道吗?
wujpbb7 2003-06-05
  • 打赏
  • 举报
回复
#import "shell32.dll"
kane 2003-06-05
  • 打赏
  • 举报
回复
微软的msdn有这么个例子
HRESULT hr;
IActiveDesktop *pActiveDesktop;

//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
IID_IActiveDesktop, (void**)&pActiveDesktop);

//Insert code to call the IActiveDesktop methods

// Call the Release method
pActiveDesktop->Release();

我在编译时说没有定义IActiveDesktop,应该怎么做?
wujpbb7 2003-06-05
  • 打赏
  • 举报
回复
#include "objbase.h"
#include "wininet.h"
#include "shlobj.h"

//#import "shell32.dll"
int main(int argc, char* argv[])
{

HRESULT hr;
IActiveDesktop *pActiveDesktop;

CoInitialize(NULL);
//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
IID_IActiveDesktop, (void**)&pActiveDesktop);

//Insert code to call the IActiveDesktop methods
USHORT sWallpaper[256];
pActiveDesktop->GetWallpaper(sWallpaper, 256, 0);


// Call the Release method
pActiveDesktop->Release();
CoUninitialize();
return 0;
}

编译可以通过,把它移到 MFC 工程中就不行了,真是奇怪!

参见 http://www.experts-exchange.com/CXO/Programming/Programming_Languages/Cplusplus/Q_10281184.html
kane 2003-06-05
  • 打赏
  • 举报
回复
谁会,再加100分
kane 2003-06-04
  • 打赏
  • 举报
回复
每人知道吗

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧