반응형
윈도우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 |