반응형
윈도우8에 IDesktopWallpaper 인터페이스가 추가되었습니다.
이 인터페이스를 활용하면 바탕화면의 배경화면을 변경할 수 있습니다.
MSDN에서 다음과 같이 확인할 수 있습니다.
https://msdn.microsoft.com/en-us/library/windows/desktop/hh706946(v=vs.85).aspx
메소드의 이름이 직관적이기 때문에 기능을 쉽게 알 수 있습니다.
배경화면의 색을 지정하거나 이미지, 슬라이드쇼의 설정이 가능합니다.
또한 화면의 해상도를 가져올 수도 있습니다.
#include <iostream>
#include <atlbase.h>
#include <ShObjIdl.h>
#include <Shlobj.h>
int main()
{
::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
CComPtr<IDesktopWallpaper> pWallPaper;
HRESULT hr = pWallPaper.CoCreateInstance(CLSID_DesktopWallpaper);
if (FAILED(hr))
{
return 0;
}
hr = pWallPaper->Enable(FALSE);
COLORREF color = 0xFFFFFF;
hr = pWallPaper->SetBackgroundColor(color);
hr = pWallPaper->GetBackgroundColor(&color);
hr = pWallPaper->Enable(TRUE);
UINT nCount = 0;
hr = pWallPaper->GetMonitorDevicePathCount(&nCount);
LPWSTR szPathAt = nullptr;
pWallPaper->GetMonitorDevicePathAt(0, &szPathAt);
LPWSTR szWallpaper = nullptr;
pWallPaper->GetWallpaper(szPathAt, &szWallpaper);
DESKTOP_WALLPAPER_POSITION dwp;
hr = pWallPaper->GetPosition(&dwp);
RECT rc;
pWallPaper->GetMonitorRECT(szPathAt, &rc);
::CoTaskMemFree(szPathAt);
::CoTaskMemFree(szWallpaper);
pWallPaper.Release();
::CoUninitialize();
return 0;
}
사용 방법은 슬라이드쇼를 제외하고는 간단합니다.
메모리를 할당해서 리턴하는 GetMonitorDevicePathAt()과 GetWallpaper() 등은 메모리를 해제해야 합니다.
슬라이드쇼를 설정하기 위해서는 IShellItemArray를 전달해야 합니다.
IDesktopWallpaper를 이용하면 듀얼 모니터 이상일 경우에 각각의 모니터에 다른 슬라이드쇼를 설정할 수 있습니다.
사용법도 간단하기 때문에 쉽게 사용이 가능합니다.
반응형
'Programming > Win32&MFC&COM' 카테고리의 다른 글
| MFC에서 커스텀 리소스(Custom Resource) 사용 방법 (2) | 2015.10.16 |
|---|---|
| MFC에서 엔터(Enter), ESC 입력시 종료되는 문제 해결 방법 (0) | 2015.09.25 |
| Visual Studio 2012 Update 1 다운로드(XP 호환성 문제 해결) (0) | 2015.08.16 |
| AfxMessageBox의 타이틀 변경 (0) | 2015.08.15 |
| IAutoComplete를 이용한 자동 완성(Auto Complete) 기능 구현 (0) | 2015.08.14 |