708 lines
32 KiB
C++
708 lines
32 KiB
C++
// ==========================================================================
|
||
// Class Implementation : COXActiveDesktop
|
||
// ==========================================================================
|
||
|
||
// Source file OXActiveDesktop.cpp
|
||
|
||
// Version: 9.3
|
||
|
||
// This software along with its related components, documentation and files ("The Libraries")
|
||
// is ?1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
|
||
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
|
||
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
|
||
// to obtain this file, or directly from our office. For a copy of the license governing
|
||
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
|
||
|
||
// //////////////////////////////////////////////////////////////////////////
|
||
|
||
#include "stdafx.h"
|
||
#include "OXActiveDesktop.h"
|
||
|
||
#include "UTBStrOp.h"
|
||
|
||
#ifdef _DEBUG
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[]=__FILE__;
|
||
#define new DEBUG_NEW
|
||
#endif
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
// Global functions
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
LPWSTR GetWcharString(LPCTSTR pszSource)
|
||
{
|
||
//This function converts LPCTSTR string
|
||
//to LPWSTR string.
|
||
//NOTE: If the function returns a value other than
|
||
//not NULL the caller is responsible for
|
||
//freeing the memory by operator delete[]
|
||
|
||
if (!pszSource)
|
||
return NULL;
|
||
|
||
LPWSTR lpszwSource=new WCHAR[lstrlen(pszSource)+1];
|
||
|
||
//zero-length string
|
||
if (!lstrlen(pszSource))
|
||
{
|
||
*lpszwSource=NULL;
|
||
return lpszwSource;
|
||
}
|
||
|
||
//non zero-length string
|
||
#ifdef _UNICODE
|
||
//just copy string
|
||
UTBStr::tcscpy(lpszwSource, lstrlen(pszSource)+1, pszSource);
|
||
#else
|
||
int nRet=::MultiByteToWideChar(CP_ACP,NULL,
|
||
pszSource,-1,lpszwSource,lstrlen(pszSource)+1);
|
||
if (!nRet)
|
||
{
|
||
TRACE2("GetWcharString() : error %d while converting string %s\n",
|
||
GetLastError(),pszSource);
|
||
delete []lpszwSource;
|
||
return NULL;
|
||
}
|
||
#endif
|
||
|
||
return lpszwSource;
|
||
}
|
||
|
||
LPTSTR GetTcharString(LPWSTR pszwSource)
|
||
{
|
||
|
||
//This function converts LPWSTR string
|
||
//to LPTSTR string.
|
||
//NOTE: If the function returns a value other than
|
||
//not NULL the caller is responsible for
|
||
//freeing the memory by operator delete[]
|
||
|
||
if (!pszwSource)
|
||
return NULL;
|
||
|
||
LPTSTR lpszSource=new TCHAR[lstrlenW(pszwSource)+1];
|
||
|
||
//zero-length string
|
||
if (!lstrlenW(pszwSource))
|
||
{
|
||
*lpszSource=NULL;
|
||
return lpszSource;
|
||
}
|
||
|
||
|
||
#ifdef _UNICODE
|
||
UTBStr::tcscpy(lpszSource, lstrlenW(pszwSource)+1, pszwSource);
|
||
#else
|
||
int nRet=::WideCharToMultiByte(CP_ACP,NULL,
|
||
pszwSource,-1,lpszSource,lstrlenW(pszwSource)+1, NULL, NULL);
|
||
if (!nRet)
|
||
{
|
||
TRACE1("GetWcharString() : error %d while converting a string\n",
|
||
GetLastError());
|
||
delete []lpszSource;
|
||
return NULL;
|
||
}
|
||
#endif
|
||
return lpszSource;
|
||
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
// Construction/Destruction
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
COXActiveDesktop::COXActiveDesktop(HWND hWnd) :
|
||
m_pActiveDesktop(NULL) , m_nError(NULL), m_hWnd(hWnd)
|
||
{
|
||
}
|
||
|
||
COXActiveDesktop::COXActiveDesktop(const COXActiveDesktop& Src)
|
||
{
|
||
m_pActiveDesktop=NULL;
|
||
*this=Src;
|
||
}
|
||
|
||
const COXActiveDesktop& COXActiveDesktop::operator=(const COXActiveDesktop& Src)
|
||
{
|
||
m_hWnd=Src.m_hWnd;
|
||
if (m_pActiveDesktop)
|
||
m_pActiveDesktop->Release();
|
||
m_pActiveDesktop=Src.m_pActiveDesktop;
|
||
m_pActiveDesktop->AddRef();
|
||
m_nError=Src.m_nError;
|
||
|
||
return *this;
|
||
}
|
||
|
||
|
||
COXActiveDesktop::~COXActiveDesktop()
|
||
{
|
||
if (m_pActiveDesktop)
|
||
m_pActiveDesktop->Release();
|
||
|
||
}
|
||
|
||
BOOL COXActiveDesktop::Init()
|
||
{
|
||
//This function must be called first. If this
|
||
//function failed all next calls to other functions
|
||
//will fail
|
||
|
||
ASSERT(m_pActiveDesktop==NULL);
|
||
|
||
m_nError=NULL;
|
||
|
||
HRESULT hRslt=::CoCreateInstance(CLSID_ActiveDesktop,
|
||
NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&m_pActiveDesktop);
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
|
||
BOOL COXActiveDesktop::AddItem(LPCOMPONENT pComp, LPCTSTR pszSource,
|
||
BOOL bDisplayDialog, BOOL bApply)
|
||
{
|
||
|
||
//This function inserts the item in ActiveDesktop
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
ASSERT(pComp);
|
||
|
||
m_nError=NULL;
|
||
|
||
if (pszSource)//IActiveDesktop::AddUrl
|
||
{
|
||
|
||
ASSERT(lstrlen(pszSource));
|
||
ASSERT(m_hWnd);
|
||
|
||
DWORD dwFlags=bDisplayDialog?NULL:ADDURL_SILENT;
|
||
|
||
LPWSTR lpszSource=GetWcharString(pszSource);
|
||
if (!lpszSource)
|
||
return FALSE;
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->AddUrl(m_hWnd,
|
||
lpszSource, pComp, dwFlags);
|
||
delete []lpszSource;
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
|
||
if (bApply)
|
||
return ApplyChanges();
|
||
|
||
return TRUE;
|
||
}
|
||
else
|
||
if (bDisplayDialog)//IActiveDesktop::AddDesktopItemWithUI
|
||
{
|
||
ASSERT(m_hWnd);
|
||
HRESULT hRslt=m_pActiveDesktop->AddDesktopItemWithUI(m_hWnd,
|
||
pComp, NULL);
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
|
||
if (bApply)
|
||
return ApplyChanges();
|
||
|
||
return TRUE;
|
||
}
|
||
else//IActiveDesktop::AddDesktopItem
|
||
{
|
||
HRESULT hRslt=m_pActiveDesktop->AddDesktopItem(pComp,NULL);
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
|
||
if (bApply)
|
||
return ApplyChanges();
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
}
|
||
|
||
BOOL COXActiveDesktop::CreateHTML(LPCTSTR pszFileName,
|
||
LPCOMPONENT pComp)
|
||
{
|
||
//This function generates HTML file from the supplied
|
||
//component
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
ASSERT(pComp);
|
||
ASSERT(pszFileName);
|
||
ASSERT(lstrlen(pszFileName));
|
||
m_nError=NULL;
|
||
|
||
LPWSTR lpszSource=GetWcharString(pszFileName);
|
||
if (!lpszSource)
|
||
return FALSE;
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->GenerateDesktopItemHtml(lpszSource,
|
||
pComp,NULL);
|
||
delete []lpszSource;
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
LPCOMPONENT COXActiveDesktop::GetComponent(LPCTSTR pszSource)
|
||
{
|
||
//This function returns component by the source
|
||
//if succeed. Otherwise NULL will be returned.
|
||
//NOTE: If this function returns non-NULL the
|
||
//caller is responsible for freeing memory by operator delete.
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
ASSERT(pszSource);
|
||
ASSERT(lstrlen(pszSource));
|
||
m_nError=NULL;
|
||
|
||
LPWSTR lpszSource=GetWcharString(pszSource);
|
||
if (!lpszSource)
|
||
return NULL;
|
||
|
||
LPCOMPONENT pComp=new COMPONENT;
|
||
::ZeroMemory(pComp,sizeof(COMPONENT));
|
||
pComp->dwSize=sizeof(COMPONENT);
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->GetDesktopItemBySource(lpszSource,
|
||
pComp,NULL);
|
||
|
||
if (FAILED(hRslt))
|
||
delete pComp;
|
||
|
||
OX_ACTDESK_CHECK_ERROR(NULL)
|
||
|
||
return pComp;
|
||
}
|
||
|
||
LPCOMPONENT COXActiveDesktop::GetComponent(DWORD dwID)
|
||
{
|
||
//This function returns component by the ID
|
||
//if succeed. Otherwise NULL will be returned.
|
||
//NOTE: If this function returns non-NULL the
|
||
//caller is responsible for freeing memory by operator delete.
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
|
||
LPCOMPONENT pComp=new COMPONENT;
|
||
::ZeroMemory(pComp,sizeof(COMPONENT));
|
||
pComp->dwSize=sizeof(COMPONENT);
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->GetDesktopItemByID(dwID, pComp, NULL);
|
||
|
||
if (FAILED(hRslt))
|
||
delete pComp;
|
||
|
||
OX_ACTDESK_CHECK_ERROR(NULL)
|
||
|
||
return pComp;
|
||
|
||
}
|
||
|
||
LPCOMPONENT COXActiveDesktop::GetComponent(int nComponent)
|
||
{
|
||
//This function returns component by number
|
||
//if succeed. Otherwise NULL will be returned.
|
||
//NOTE: If this function returns non-NULL the
|
||
//caller is responsible for freeing memory by operator delete.
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
|
||
LPCOMPONENT pComp=new COMPONENT;
|
||
::ZeroMemory(pComp,sizeof(COMPONENT));
|
||
pComp->dwSize=sizeof(COMPONENT);
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->GetDesktopItem(nComponent,
|
||
pComp,NULL);
|
||
|
||
if (FAILED(hRslt))
|
||
delete pComp;
|
||
|
||
OX_ACTDESK_CHECK_ERROR(NULL)
|
||
|
||
return pComp;
|
||
|
||
}
|
||
|
||
int COXActiveDesktop::GetItemCount()
|
||
{
|
||
//This function returns number of items in
|
||
//the Active Desktop
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
|
||
int nRet=0;
|
||
HRESULT hRslt=m_pActiveDesktop->GetDesktopItemCount(&nRet,NULL);
|
||
|
||
OX_ACTDESK_CHECK_ERROR(-1)
|
||
|
||
return nRet;
|
||
}
|
||
|
||
BOOL COXActiveDesktop::IsDesktopEnabled(BOOL* pEnable)
|
||
{
|
||
//This function returns TRUE if succeed,
|
||
//FALSE otherwise. If the function succeeed,
|
||
//on out pEnable will have enable state of
|
||
//the Active Desktop
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
*pEnable=FALSE;
|
||
|
||
COMPONENTSOPT Opt;
|
||
Opt.dwSize=sizeof(Opt);
|
||
HRESULT hRslt=m_pActiveDesktop->GetDesktopItemOptions(&Opt,
|
||
NULL);
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
|
||
*pEnable=Opt.fActiveDesktop;
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXActiveDesktop::IsComponentsEnabled(BOOL* pEnable)
|
||
{
|
||
//This function returns TRUE if succeed,
|
||
//FALSE otherwise. If the function succeeed,
|
||
//on out pEnable will have enable state of
|
||
//the Active Desktop components
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
|
||
COMPONENTSOPT Opt;
|
||
Opt.dwSize=sizeof(Opt);
|
||
HRESULT hRslt=m_pActiveDesktop->GetDesktopItemOptions(&Opt,
|
||
NULL);
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
*pEnable=Opt.fEnableComponents;
|
||
return TRUE;
|
||
|
||
}
|
||
|
||
BOOL COXActiveDesktop::GetPattern(CString& sPattern)
|
||
{
|
||
//This function on out in sPattern will have
|
||
//decimal representation of the Active Desktop
|
||
//pattern. If no pattern has been specified,
|
||
//string "None" will be returned.
|
||
//If function failed it returnes FALSE, if
|
||
//succeed - TRUE
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
sPattern=_T("");
|
||
|
||
WCHAR* szPattern=new WCHAR[_MAX_PATH];
|
||
::ZeroMemory(szPattern,_MAX_PATH*sizeof(TCHAR));
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->GetPattern(szPattern,_MAX_PATH,NULL);
|
||
if (FAILED(hRslt))
|
||
{
|
||
delete []szPattern;
|
||
m_nError=HRESULT_CODE(hRslt);
|
||
return FALSE;
|
||
}
|
||
|
||
ASSERT(lstrlenW(szPattern)<_MAX_PATH);
|
||
|
||
LPTSTR lpszPattern=GetTcharString(szPattern);
|
||
if (lpszPattern)
|
||
{
|
||
sPattern=lpszPattern;
|
||
}
|
||
delete []szPattern;
|
||
if (lpszPattern)
|
||
delete []lpszPattern;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXActiveDesktop::GetWallpaper(CString& sWallpaper)
|
||
{
|
||
//The function returns TRUE if succeed,
|
||
//FALSE otherwise. If the function succeed
|
||
//sWallpaper will have filename of the wallpaper
|
||
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
sWallpaper=_T("");
|
||
|
||
WCHAR* szWallpaper=new WCHAR[_MAX_PATH];
|
||
::ZeroMemory(szWallpaper,_MAX_PATH*sizeof(TCHAR));
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->GetWallpaper(szWallpaper, _MAX_PATH,
|
||
NULL);
|
||
if (FAILED(hRslt))
|
||
{
|
||
delete []szWallpaper;
|
||
m_nError=HRESULT_CODE(hRslt);
|
||
return FALSE;
|
||
}
|
||
LPTSTR lpszWallpaper=GetTcharString(szWallpaper);
|
||
if (lpszWallpaper)
|
||
{
|
||
sWallpaper=lpszWallpaper;
|
||
delete []lpszWallpaper;
|
||
}
|
||
delete []szWallpaper;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
int COXActiveDesktop::GetWallpaperStyle()
|
||
{
|
||
//This function returns styles of the wallpaper
|
||
//that maybe any of WPSTYLE_CENTER, WPSTYLE_TILE,
|
||
//WPSTYLE_STRETCH, WPSTYLE_MAX on success or -1 if failed
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
|
||
WALLPAPEROPT Opt;
|
||
::ZeroMemory(&Opt, sizeof(Opt));
|
||
Opt.dwSize=sizeof(Opt);
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->GetWallpaperOptions(&Opt,NULL);
|
||
|
||
OX_ACTDESK_CHECK_ERROR(-1)
|
||
|
||
return Opt.dwStyle;
|
||
}
|
||
|
||
BOOL COXActiveDesktop::ModifyItem(LPCOMPONENT pComp, DWORD dwFlags, BOOL bApply)
|
||
{
|
||
//This function modifies supplied item
|
||
//and returns TRUE on succeed or FALSE otherwise
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
ASSERT(pComp);
|
||
m_nError=NULL;
|
||
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->ModifyDesktopItem(pComp,dwFlags);
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
|
||
if (bApply)
|
||
return ApplyChanges();
|
||
else
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXActiveDesktop::RemoveItem(LPCOMPONENT pComp, BOOL bApply)
|
||
{
|
||
//This function removes supplied item
|
||
//and returns TRUE on succes or FALSE otherwise
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
ASSERT(pComp);
|
||
m_nError=NULL;
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->RemoveDesktopItem(pComp,NULL);
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
|
||
if (bApply)
|
||
return ApplyChanges();
|
||
else
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXActiveDesktop::SetComponentsEnable(BOOL bEnable)
|
||
{
|
||
//This function enables/disables components
|
||
//on the ActiveDesktop and returns TRUE if succeed
|
||
//or FALSE otherwise
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
|
||
COMPONENTSOPT Opt;
|
||
::ZeroMemory(&Opt, sizeof(Opt));
|
||
Opt.dwSize=sizeof(Opt);
|
||
|
||
Opt.fEnableComponents=bEnable;
|
||
if (!IsDesktopEnabled(&Opt.fActiveDesktop))
|
||
return FALSE;
|
||
HRESULT hRslt=m_pActiveDesktop->SetDesktopItemOptions(&Opt,NULL);
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXActiveDesktop::SetDesktopEnable(BOOL bEnable)
|
||
{
|
||
//This function enables/disables ActiveDesktop
|
||
//and returns TRUE if succeed or FALSE otherwise
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
|
||
COMPONENTSOPT Opt;
|
||
::ZeroMemory(&Opt, sizeof(Opt));
|
||
Opt.dwSize=sizeof(Opt);
|
||
|
||
Opt.fActiveDesktop=bEnable;
|
||
if (!IsComponentsEnabled(&Opt.fEnableComponents))
|
||
return FALSE;
|
||
HRESULT hRslt=m_pActiveDesktop->SetDesktopItemOptions(&Opt,NULL);
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXActiveDesktop::SetPattern(CString sPattern)
|
||
{
|
||
//This function sets new pattern
|
||
//on the Active Desktop. Returns TRUE
|
||
//if succeed or FALSE otherwise
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
|
||
LPWSTR lpszwPattern=NULL;
|
||
if (!sPattern.IsEmpty())
|
||
{
|
||
lpszwPattern=GetWcharString((LPCTSTR) sPattern);
|
||
}
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->SetPattern(lpszwPattern, NULL);
|
||
if (lpszwPattern)
|
||
delete []lpszwPattern;
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXActiveDesktop::SetWallpaper(CString sWallpaper)
|
||
{
|
||
//This function sets new pattern
|
||
//on the Active Desktop. Returns TRUE
|
||
//if succeed or FALSE otherwise
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
|
||
LPWSTR lpszwWallpaper=NULL;
|
||
if (!sWallpaper.IsEmpty())
|
||
{
|
||
lpszwWallpaper=GetWcharString((LPCTSTR) sWallpaper);
|
||
}
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->SetWallpaper(lpszwWallpaper, NULL);
|
||
if (lpszwWallpaper)
|
||
delete []lpszwWallpaper;
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXActiveDesktop::SetWallpaperStyle(DWORD dwStyle)
|
||
{
|
||
//This function sets styles of the wallpaper
|
||
//that maybe any of WPSTYLE_CENTER, WPSTYLE_TILE,
|
||
//WPSTYLE_STRETCH, WPSTYLE_MAX.
|
||
//Returns TRUE on success or FALSE otherwise
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
|
||
WALLPAPEROPT Opt;
|
||
::ZeroMemory(&Opt, sizeof(Opt));
|
||
Opt.dwSize=sizeof(Opt);
|
||
Opt.dwStyle=dwStyle;
|
||
HRESULT hRslt=m_pActiveDesktop->SetWallpaperOptions(&Opt,NULL);
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE)
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
BOOL COXActiveDesktop::ApplyChanges(DWORD dwFlags)
|
||
{
|
||
//This function applies changes
|
||
//to the Active Desktop. The dwFlags
|
||
//variable may contain any of AD_APPLY_SAVE,
|
||
//AD_APPLY_HTMLGEN, AD_APPLY_REFRESH,
|
||
//AD_APPLY_ALL or AD_APPLY_FORCE. The function returns TRUE
|
||
//on success or FALSE otherwise
|
||
|
||
ASSERT(m_pActiveDesktop);
|
||
m_nError=NULL;
|
||
|
||
HRESULT hRslt=m_pActiveDesktop->ApplyChanges(dwFlags);
|
||
|
||
OX_ACTDESK_CHECK_ERROR(FALSE);
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
|
||
|
||
BOOL COXActiveDesktop::GetPattern(BYTE* pBuffer)
|
||
{
|
||
//This function returns BYTE representation of the
|
||
//pattern. Buffer has to be allocated prior to
|
||
//call to this function and his size must be at least
|
||
//8 bytes.
|
||
|
||
ASSERT(pBuffer);
|
||
CString sPattern;
|
||
if (!GetPattern(sPattern))
|
||
return FALSE;
|
||
|
||
::ZeroMemory(pBuffer,8);
|
||
|
||
if (sPattern.Find(_T("None"))!=-1)
|
||
return TRUE;
|
||
|
||
for (int i=0; i<8; i++)
|
||
{
|
||
int nFind=sPattern.Find(_T(" "));
|
||
int n=_ttoi((LPCTSTR) sPattern);
|
||
*(pBuffer+i)=(BYTE) n;
|
||
if (nFind!=-1)
|
||
sPattern=sPattern.Right(sPattern.GetLength()-nFind);
|
||
sPattern.TrimLeft();
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXActiveDesktop::SetPattern(BYTE *pBuffer)
|
||
{
|
||
//This function sets the pattern for
|
||
//the Active Desktop. Pattern represented by
|
||
//pBuffer and must be of 8 bytes.
|
||
|
||
ASSERT(pBuffer);
|
||
|
||
CString sPattern;
|
||
TCHAR szBuffer[8];
|
||
|
||
for (int i=0; i<8; i++)
|
||
{
|
||
UTBStr::itot(*(pBuffer+i), (LPTSTR) &szBuffer, 8, 10);
|
||
sPattern+=(LPCTSTR) &szBuffer;
|
||
sPattern+=_T(" ");
|
||
}
|
||
sPattern.TrimRight();
|
||
|
||
return SetPattern(sPattern);
|
||
}
|
||
|
||
BOOL COXActiveDesktop::Refresh()
|
||
{
|
||
ASSERT(m_pActiveDesktop);
|
||
m_pActiveDesktop->Release();
|
||
m_pActiveDesktop=NULL;
|
||
return Init();
|
||
}
|