遇到一个问题,在visual c++中如何设置桌面背景为web页面?
解决方案 »
- GetClientRect()既然获得的左上角都是(0,0),那获得的不就是对象的Rect大小吗?
- 有关位图的颜色表的表项的保留字段的问题
- SOCKET遇到的问题
- Programming Server-Side Applications for Microsoft Windows 2000 源码
- 什么样的条件才能找到一份VC程序员的工作?
- 关于多线程读写文件的问题??
- 怎么修改控件的字体
- 怎样使鼠标点击“透明”!?
- 添加Activex Control时发现,VC6.0 GALLERY文件夹中为空,VISITA系统,怎样解决?
- CMSWinsockControl控件使用的问题!会用的进。
- 谁来帮我开发个东东
- 怎样在删除控制台时保留进程
COMPONENTSOPT opt;HRESULT hr = ::CoCreateInstance(
CLSID_ActiveDesktop,
NULL,
CLSCTX_INPROC_SERVER,
IID_IActiveDesktop,
(void**)&pAD);opt.dwSize = sizeof(opt);
opt.fActiveDesktop =
opt.fEnableComponents = TRUE;
hr = pAD->SetDesktopItemOptions(&opt,0);
hr = pAD->ApplyChanges(AD_APPLY_REFRESH);
MSDN: IActiveDesktop Interface
Allows a client program to manage the desktop items and wallpaper on a local computer.这儿有个封装好的。
#pragma once#include <shlguid.h>
#include <shlobj.h> // IActiveDesktop
#include <atlbase.h> // ATL stuff//////////////////
// Handy class to manipulate the active desktop
//
class CActiveDesktop {
protected:
// ptr to IActiveDesktop interface
CComQIPtr<IActiveDesktop> m_pIActiveDesktop;public:
// ctor: get interface ptr to IActiveDesktop
CActiveDesktop() {
HRESULT hr = m_pIActiveDesktop.CoCreateInstance(CLSID_ActiveDesktop,
NULL, CLSCTX_INPROC_SERVER);
// If this bombs, you most likely forgot to call call CoInitialize
ASSERT(SUCCEEDED(hr));
} // Determine if Active Desktop is enabled. Could also use SHGetSettings
//
BOOL IsEnabled() {
ASSERT(m_pIActiveDesktop);
COMPONENTSOPT opt;
opt.dwSize = sizeof(opt);
HRESULT hr = m_pIActiveDesktop->GetDesktopItemOptions(&opt,0);
ASSERT(SUCCEEDED(hr));
return opt.fActiveDesktop;
}
// Enable/disable Active Desktop. Calls IActiveDesktop.
//
void Enable(BOOL bEnable) {
ASSERT(m_pIActiveDesktop);
COMPONENTSOPT opt;
opt.dwSize = sizeof(opt);
HRESULT hr = m_pIActiveDesktop->GetDesktopItemOptions(&opt,0);
ASSERT(SUCCEEDED(hr));
opt.fActiveDesktop = bEnable;
hr = m_pIActiveDesktop->SetDesktopItemOptions(&opt,0);
ASSERT(SUCCEEDED(hr));
ApplyChanges(AD_APPLY_REFRESH);
} // Apply the changes
//
void ApplyChanges(DWORD dwFlags) {
ASSERT(m_pIActiveDesktop);
HRESULT hr = m_pIActiveDesktop->ApplyChanges(dwFlags);
ASSERT(SUCCEEDED(hr));
};};这样用就行了。
void CMainFrame::OnActiveDesktop()
{
CActiveDesktop ad;
ad.Enable(!ad.IsEnabled());
}void CMainFrame::OnUpdateActiveDesktop(CCmdUI* pCmdUI)
{
CActiveDesktop ad;
pCmdUI->SetText(ad.IsEnabled() ? _T("Disable &Active Desktop")
: _T("Enable &Active Desktop"));
}