632 lines
No EOL
37 KiB
C++
632 lines
No EOL
37 KiB
C++
// OXCustomizeBackgroundPage.cpp : implementation file
|
||
//
|
||
// Version: 9.3
|
||
|
||
|
||
#include "stdafx.h"
|
||
#include "OXCustomizeBackgroundPage.h"
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// COXCustomizeBackgroundPage dialog
|
||
|
||
IMPLEMENT_DYNCREATE(COXCustomizeBackgroundPage, COXCustomizePage)
|
||
|
||
COXCustomizeBackgroundPage::COXCustomizeBackgroundPage()
|
||
{
|
||
//{{AFX_DATA_INIT(COXCustomizeBackgroundPage)
|
||
m_pHelpWnd=NULL;
|
||
m_nAlign = -1;
|
||
m_sFilename = _T("");
|
||
m_bOnlyClientArea = TRUE;
|
||
m_bPaintBackground = TRUE;
|
||
m_nImageSourceType = 0;
|
||
//}}AFX_DATA_INIT
|
||
m_clrBack=::GetSysColor(COLOR_WINDOW);
|
||
|
||
m_bUseDefaultImage=TRUE;
|
||
|
||
m_nDialogID=IDD;
|
||
m_sProfileName.Empty();
|
||
}
|
||
|
||
|
||
COXCustomizeBackgroundPage::~COXCustomizeBackgroundPage()
|
||
{
|
||
if(m_pHelpWnd != NULL)
|
||
{
|
||
m_pHelpWnd->Detach();
|
||
delete m_pHelpWnd;
|
||
}
|
||
}
|
||
|
||
|
||
BOOL COXCustomizeBackgroundPage::
|
||
InitializeBackgroundPainter(const BOOL bPaintBackground,
|
||
const BOOL bOnlyClientArea,
|
||
LPCTSTR lpszDIBResourceName,
|
||
const PaintType paintType/*=Tile*/,
|
||
const COLORREF clrBk/*=CLR_DEFAULT*/,
|
||
LPCTSTR lpszProfileName/*=_T("CustomizeBackgroundPainter")*/)
|
||
{
|
||
COXDIB dib;
|
||
if(lpszDIBResourceName!=NULL)
|
||
if(!dib.LoadResource(lpszDIBResourceName))
|
||
return FALSE;
|
||
return InitializeBackgroundPainter(bPaintBackground,bOnlyClientArea,
|
||
&dib,paintType,clrBk,lpszProfileName);
|
||
}
|
||
|
||
BOOL COXCustomizeBackgroundPage::
|
||
InitializeBackgroundPainter(const BOOL bPaintBackground,
|
||
const BOOL bOnlyClientArea,
|
||
const UINT nDIBResourceID,
|
||
const PaintType paintType/*=Tile*/,
|
||
const COLORREF clrBk/*=CLR_DEFAULT*/,
|
||
LPCTSTR lpszProfileName/*=_T("CustomizeBackgroundPainter")*/)
|
||
{
|
||
return InitializeBackgroundPainter(bPaintBackground,bOnlyClientArea,
|
||
MAKEINTRESOURCE(nDIBResourceID),paintType,clrBk,lpszProfileName);
|
||
}
|
||
|
||
|
||
BOOL COXCustomizeBackgroundPage::
|
||
InitializeBackgroundPainter(const BOOL bPaintBackground,
|
||
const BOOL bOnlyClientArea,
|
||
const CString& sDIBFileName,
|
||
const PaintType paintType/*=Tile*/,
|
||
const COLORREF clrBk/*=CLR_DEFAULT*/,
|
||
LPCTSTR lpszProfileName/*=_T("CustomizeBackgroundPainter")*/)
|
||
{
|
||
COXDIB dib;
|
||
if(!sDIBFileName.IsEmpty())
|
||
if(!dib.Read(sDIBFileName))
|
||
return FALSE;
|
||
m_sFilename=sDIBFileName;
|
||
return InitializeBackgroundPainter(bPaintBackground,bOnlyClientArea,
|
||
&dib,paintType,clrBk,lpszProfileName);
|
||
}
|
||
|
||
|
||
BOOL COXCustomizeBackgroundPage::
|
||
InitializeBackgroundPainter(const BOOL bPaintBackground,
|
||
const BOOL bOnlyClientArea,
|
||
const COXDIB* pDIB,
|
||
const PaintType paintType/*=Tile*/,
|
||
const COLORREF clrBk/*=CLR_DEFAULT*/,
|
||
LPCTSTR lpszProfileName/*=_T("CustomizeBackgroundPainter")*/)
|
||
{
|
||
m_bPaintBackground=bPaintBackground;
|
||
m_bOnlyClientArea=bOnlyClientArea;
|
||
m_bUseDefaultImage=TRUE;
|
||
|
||
if(lpszProfileName!=NULL)
|
||
{
|
||
m_sProfileName=lpszProfileName;
|
||
|
||
CWinApp* pApp=AfxGetApp();
|
||
ASSERT(pApp!=NULL);
|
||
|
||
m_bPaintBackground=pApp->GetProfileInt(m_sProfileName,
|
||
_T("PaintBackground"),m_bPaintBackground);
|
||
m_bOnlyClientArea=pApp->GetProfileInt(m_sProfileName,
|
||
_T("OnlyClientArea"),m_bOnlyClientArea);
|
||
m_sFilename=pApp->GetProfileString(m_sProfileName,
|
||
_T("ImageFileName"),m_sFilename);
|
||
m_nAlign=(int)pApp->GetProfileInt(lpszProfileName,
|
||
_T("PaintType"),(int)paintType);
|
||
m_clrBack=pApp->GetProfileInt(lpszProfileName,_T("BackgroundColor"),clrBk);
|
||
m_bUseDefaultImage=pApp->GetProfileInt(m_sProfileName,
|
||
_T("UseDefaultImage"),m_bUseDefaultImage);
|
||
}
|
||
|
||
if(pDIB!=NULL)
|
||
m_dibDefault=*pDIB;
|
||
else
|
||
m_dibDefault.Empty();
|
||
|
||
SetupBackgroundPainting();
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
BOOL COXCustomizeBackgroundPage::OnCloseManager(BOOL bIsOk)
|
||
{
|
||
CWinApp* pApp=AfxGetApp();
|
||
ASSERT(pApp!=NULL);
|
||
|
||
if(bIsOk)
|
||
{
|
||
if(!ApplyChanges())
|
||
return FALSE;
|
||
if(!m_sProfileName.IsEmpty())
|
||
{
|
||
pApp->WriteProfileInt(m_sProfileName,_T("PaintBackground"),
|
||
m_bPaintBackground);
|
||
pApp->WriteProfileInt(m_sProfileName,_T("OnlyClientArea"),
|
||
m_bOnlyClientArea);
|
||
pApp->WriteProfileString(m_sProfileName,_T("ImageFileName"),
|
||
m_sFilename);
|
||
pApp->WriteProfileInt(m_sProfileName,_T("PaintType"),m_nAlign);
|
||
pApp->WriteProfileInt(m_sProfileName,_T("BackgroundColor"),m_clrBack);
|
||
pApp->WriteProfileInt(m_sProfileName,_T("UseDefaultImage"),
|
||
m_bUseDefaultImage);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(!m_sProfileName.IsEmpty())
|
||
{
|
||
m_bPaintBackground=pApp->GetProfileInt(m_sProfileName,
|
||
_T("PaintBackground"),m_bPaintBackground);
|
||
m_bOnlyClientArea=pApp->GetProfileInt(m_sProfileName,
|
||
_T("OnlyClientArea"),m_bOnlyClientArea);
|
||
m_sFilename=pApp->GetProfileString(m_sProfileName,
|
||
_T("ImageFileName"),m_sFilename);
|
||
m_nAlign=(int)pApp->GetProfileInt(m_sProfileName,
|
||
_T("PaintType"),m_nAlign);
|
||
m_clrBack=pApp->GetProfileInt(m_sProfileName,
|
||
_T("BackgroundColor"),m_clrBack);
|
||
m_bUseDefaultImage=pApp->GetProfileInt(m_sProfileName,
|
||
_T("UseDefaultImage"),m_bUseDefaultImage);
|
||
|
||
SetupBackgroundPainting();
|
||
}
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
void COXCustomizeBackgroundPage::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
COXCustomizePage::DoDataExchange(pDX);
|
||
//{{AFX_DATA_MAP(COXCustomizeBackgroundPage)
|
||
DDX_Control(pDX, IDC_OX_SEPARATOR2, m_ctlSeparator2);
|
||
DDX_Control(pDX, IDC_OX_SEPARATOR1, m_ctlSeparator1);
|
||
DDX_Control(pDX, IDC_OX_FILENAME, m_cmbFilename);
|
||
DDX_Control(pDX, IDC_OX_BACK_COLOR, m_btnBackColor);
|
||
DDX_Radio(pDX, IDC_OX_ALIGN_TILE, m_nAlign);
|
||
DDX_CBString(pDX, IDC_OX_FILENAME, m_sFilename);
|
||
DDX_Check(pDX, IDC_OX_CHECK_ONLYCLIENT, m_bOnlyClientArea);
|
||
DDX_Check(pDX, IDC_OX_CHECK_PAINT_BACKGROUND, m_bPaintBackground);
|
||
DDX_Radio(pDX, IDC_OX_RADIO_BCKGND_IMG_SOURCE_DEFAULT, m_nImageSourceType);
|
||
//}}AFX_DATA_MAP
|
||
DDX_ColorPicker(pDX, IDC_OX_BACK_COLOR, m_clrBack);
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(COXCustomizeBackgroundPage, COXCustomizePage)
|
||
//{{AFX_MSG_MAP(COXCustomizeBackgroundPage)
|
||
ON_BN_CLICKED(IDC_OX_ALIGN_BOTTOMCENTER, OnAlign)
|
||
ON_BN_CLICKED(IDC_OX_BACK_COLOR, OnBackColor)
|
||
ON_CBN_EDITCHANGE(IDC_OX_FILENAME, OnEditchangeFilename)
|
||
ON_CBN_SELCHANGE(IDC_OX_FILENAME, OnSelchangeFilename)
|
||
ON_WM_PALETTECHANGED()
|
||
ON_WM_QUERYNEWPALETTE()
|
||
ON_BN_CLICKED(IDC_OX_CHECK_PAINT_BACKGROUND, OnEnable)
|
||
ON_BN_CLICKED(IDC_OX_ALIGN_BOTTOMLEFT, OnAlign)
|
||
ON_BN_CLICKED(IDC_OX_ALIGN_BOTTOMRIGHT, OnAlign)
|
||
ON_BN_CLICKED(IDC_OX_ALIGN_CENTER, OnAlign)
|
||
ON_BN_CLICKED(IDC_OX_ALIGN_CENTERLEFT, OnAlign)
|
||
ON_BN_CLICKED(IDC_OX_ALIGN_CENTERRIGHT, OnAlign)
|
||
ON_BN_CLICKED(IDC_OX_ALIGN_STRETCH, OnAlign)
|
||
ON_BN_CLICKED(IDC_OX_ALIGN_TILE, OnAlign)
|
||
ON_BN_CLICKED(IDC_OX_ALIGN_TOPCENTER, OnAlign)
|
||
ON_BN_CLICKED(IDC_OX_ALIGN_TOPLEFT, OnAlign)
|
||
ON_BN_CLICKED(IDC_OX_ALIGN_TOPRIGHT, OnAlign)
|
||
ON_BN_CLICKED(IDC_OX_RADIO_BCKGND_IMG_SOURCE_DEFAULT, OnRadioBackgroundImageSourceDefault)
|
||
ON_BN_CLICKED(IDC_OX_RADIO_BCKGND_IMG_SOURCE_FILENAME, OnRadioBackgroundImageSourceFilename)
|
||
//}}AFX_MSG_MAP
|
||
ON_MESSAGE(WM_KICKIDLE, OnKickIdle)
|
||
END_MESSAGE_MAP()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// COXCustomizeBackgroundPage message handlers
|
||
|
||
BOOL COXCustomizeBackgroundPage::Load(const COXCustomizeManager* pCustomizeManager)
|
||
{
|
||
// Call default implementation. It will load this demo dialog as the first
|
||
// page and will create About and CodeSample pages if specified.
|
||
if(!COXCustomizePage::Load(pCustomizeManager))
|
||
return FALSE;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
void COXCustomizeBackgroundPage::Unload()
|
||
{
|
||
// add here code for cleaning up all objects created by demo
|
||
//
|
||
//
|
||
//////////////////////////////////////////////////////////////////////////
|
||
|
||
COXCustomizePage::Unload();
|
||
}
|
||
|
||
void COXCustomizeBackgroundPage::OnInitDialog()
|
||
{
|
||
// must call default implementation
|
||
COXCustomizePage::OnInitDialog();
|
||
|
||
// add here initialization code for your demo dialog. Treat it as a
|
||
// normal CDialog::OnInitDialog function
|
||
|
||
m_cmbFilename.
|
||
SetAutoPersistent(_T("CustomizeBackgroundPainter_ImageFileName"));
|
||
for(int nIndex=4; nIndex<OX_HISTORY_COMBO_MAX_TOOLBUTTONS; nIndex++)
|
||
{
|
||
m_cmbFilename.ShowButton(nIndex,FALSE);
|
||
}
|
||
CToolBar* pToolbar=m_cmbFilename.GetToolBar();
|
||
pToolbar->ModifyStyle(NULL,TBSTYLE_FLAT);
|
||
m_cmbFilename.RefreshToolbar();
|
||
|
||
m_btnBackColor.SetToolTip(TRUE);
|
||
m_btnBackColor.SetDefaultColor(::GetSysColor(COLOR_BTNFACE));
|
||
|
||
CWnd* pCtrl=GetDlgItem(IDC_OX_IMAGE);
|
||
ASSERT(pCtrl!=NULL);
|
||
|
||
CRect rect;
|
||
pCtrl->GetWindowRect(rect);
|
||
pCtrl->DestroyWindow();
|
||
ScreenToClient(rect);
|
||
m_pictureWnd.Create(NULL,NULL,WS_CHILD|WS_VISIBLE,rect,this,IDC_OX_IMAGE);
|
||
|
||
if(!m_sFilename.IsEmpty() && !m_bUseDefaultImage)
|
||
{
|
||
VERIFY(m_backgroundPainterOrganizer.Attach(&m_pictureWnd,
|
||
m_sFilename,(PaintType)m_nAlign,m_clrBack));
|
||
}
|
||
else
|
||
{
|
||
VERIFY(m_backgroundPainterOrganizer.Attach(&m_pictureWnd,
|
||
&m_dibDefault,(PaintType)m_nAlign,m_clrBack));
|
||
}
|
||
|
||
m_pictureWnd.ModifyStyleEx(NULL,WS_EX_CLIENTEDGE,SWP_DRAWFRAME);
|
||
m_pictureWnd.RedrawWindow();
|
||
|
||
m_nImageSourceType=(m_bUseDefaultImage ? 0 : 1);
|
||
|
||
// layout
|
||
//
|
||
m_LayoutManager.TieChild(&m_ctlSeparator1,
|
||
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
|
||
m_LayoutManager.TieChild(&m_ctlSeparator2,
|
||
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
|
||
m_LayoutManager.TieChild(&m_cmbFilename,
|
||
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
|
||
|
||
m_LayoutManager.TieChild(IDC_OX_GROUP_PAINT_TYPE,
|
||
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
|
||
m_LayoutManager.TieChild(IDC_OX_ALIGN_STRETCH,OX_LMS_RIGHT,OX_LMT_SAME);
|
||
m_LayoutManager.TieChild(IDC_OX_ALIGN_TOPRIGHT,OX_LMS_RIGHT,OX_LMT_SAME);
|
||
m_LayoutManager.TieChild(IDC_OX_ALIGN_CENTERRIGHT,OX_LMS_RIGHT,OX_LMT_SAME);
|
||
m_LayoutManager.TieChild(IDC_OX_ALIGN_BOTTOMRIGHT,OX_LMS_RIGHT,OX_LMT_SAME);
|
||
|
||
m_LayoutManager.TieChild(IDC_OX_STATIC_BACKGROUND_COLOR,OX_LMS_RIGHT,OX_LMT_SAME);
|
||
m_LayoutManager.TieChild(&m_btnBackColor,OX_LMS_RIGHT,OX_LMT_SAME);
|
||
|
||
m_LayoutManager.TieChild(IDC_OX_IMAGE,OX_LMS_ANY,OX_LMT_SAME);
|
||
//
|
||
///////////////////////////////////////
|
||
|
||
if (m_bUseDefaultImage)
|
||
m_sFilename = _T("");
|
||
|
||
UpdateData(FALSE);
|
||
|
||
OnEnable();
|
||
|
||
m_bInitialized=TRUE;
|
||
}
|
||
|
||
|
||
void COXCustomizeBackgroundPage::OnAlign()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
|
||
if(!m_bInitialized)
|
||
return;
|
||
|
||
UpdateData(TRUE);
|
||
m_backgroundPainterOrganizer.SetPaintType(&m_pictureWnd,(PaintType)m_nAlign);
|
||
}
|
||
|
||
void COXCustomizeBackgroundPage::OnBackColor()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
|
||
if(!m_bInitialized)
|
||
return;
|
||
|
||
UpdateData(TRUE);
|
||
|
||
m_backgroundPainterOrganizer.SetBkColor(&m_pictureWnd,m_clrBack);
|
||
}
|
||
|
||
void COXCustomizeBackgroundPage::OnEditchangeFilename()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
|
||
if(!m_bInitialized)
|
||
return;
|
||
|
||
UpdateData(TRUE);
|
||
m_backgroundPainterOrganizer.SetWallpaper(&m_pictureWnd,m_sFilename);
|
||
}
|
||
|
||
void COXCustomizeBackgroundPage::OnSelchangeFilename()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
|
||
if(!m_bInitialized)
|
||
return;
|
||
|
||
if(m_cmbFilename.GetCurSel()!=CB_ERR)
|
||
{
|
||
m_cmbFilename.GetLBText(m_cmbFilename.GetCurSel(),m_sFilename);
|
||
m_backgroundPainterOrganizer.SetWallpaper(&m_pictureWnd,m_sFilename);
|
||
}
|
||
}
|
||
|
||
void COXCustomizeBackgroundPage::OnPaletteChanged(CWnd* pFocusWnd)
|
||
{
|
||
COXCustomizePage::OnPaletteChanged(pFocusWnd);
|
||
|
||
// TODO: Add your message handler code here
|
||
SendMessageToDescendants(WM_PALETTECHANGED,(WPARAM)((HWND)*pFocusWnd),NULL);
|
||
}
|
||
|
||
BOOL COXCustomizeBackgroundPage::OnQueryNewPalette()
|
||
{
|
||
// TODO: Add your message handler code here and/or call default
|
||
|
||
SendMessageToDescendants(WM_QUERYNEWPALETTE,NULL,NULL);
|
||
return COXCustomizePage::OnQueryNewPalette();
|
||
}
|
||
|
||
LRESULT COXCustomizeBackgroundPage::OnKickIdle(WPARAM wParam, LPARAM lParam)
|
||
{
|
||
UNREFERENCED_PARAMETER(wParam);
|
||
UNREFERENCED_PARAMETER(lParam);
|
||
|
||
// Update the context list
|
||
m_cmbFilename.OnIdle();
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL COXCustomizeBackgroundPage::ApplyChanges()
|
||
{
|
||
if(!UpdateData(TRUE))
|
||
return FALSE;
|
||
|
||
m_bUseDefaultImage=(m_nImageSourceType==0);
|
||
|
||
SetupBackgroundPainting();
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
void COXCustomizeBackgroundPage::SetupBackgroundPainting()
|
||
{
|
||
CWnd* pWnd=AfxGetMainWnd();
|
||
ASSERT(pWnd!=NULL && ::IsWindow(pWnd->GetSafeHwnd()));
|
||
|
||
CRect rect;
|
||
pWnd->GetWindowRect(&rect);
|
||
pWnd->InvalidateRect(&rect);
|
||
pWnd->SendMessage(WM_ERASEBKGND);
|
||
|
||
|
||
POSITION pos=NULL;
|
||
COXBackgroundPainter* pBackgroundPainter=
|
||
m_backgroundPainterOrganizer.GetFirstPainter(pos);
|
||
|
||
COXDIB dib=((pBackgroundPainter!=NULL && !m_bUseDefaultImage) ?
|
||
*pBackgroundPainter->GetWallpaperImage() : m_dibDefault);
|
||
|
||
if(!m_bPaintBackground)
|
||
{
|
||
if(m_backgroundPainterOrganizer.IsAttachedFrame())
|
||
VERIFY(m_backgroundPainterOrganizer.DetachFrame());
|
||
else
|
||
VERIFY(m_backgroundPainterOrganizer.Detach(NULL));
|
||
|
||
// restore the state of the "Preview" window
|
||
if(::IsWindow(m_pictureWnd.GetSafeHwnd()))
|
||
{
|
||
VERIFY(m_backgroundPainterOrganizer.Attach(&m_pictureWnd,&dib,
|
||
(PaintType)m_nAlign,m_clrBack));
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
if(m_bOnlyClientArea && m_backgroundPainterOrganizer.IsAttachedFrame())
|
||
{
|
||
ASSERT_KINDOF(CFrameWnd,pWnd);
|
||
|
||
VERIFY(m_backgroundPainterOrganizer.DetachFrame());
|
||
|
||
// restore the state of the "Preview" window
|
||
if(::IsWindow(m_pictureWnd.GetSafeHwnd()))
|
||
{
|
||
VERIFY(m_backgroundPainterOrganizer.Attach(&m_pictureWnd,&dib,
|
||
(PaintType)m_nAlign,m_clrBack));
|
||
}
|
||
|
||
if(pWnd->IsKindOf(RUNTIME_CLASS(CMDIFrameWnd)))
|
||
{
|
||
CWnd* pMDIClient=CWnd::FromHandlePermanent(((CMDIFrameWnd*)pWnd)->
|
||
m_hWndMDIClient);
|
||
ASSERT(pMDIClient!=NULL);
|
||
// hook MDIClient window
|
||
VERIFY(m_backgroundPainterOrganizer.Attach(pMDIClient,&dib,
|
||
(PaintType)m_nAlign,m_clrBack));
|
||
}
|
||
}
|
||
else if(!m_bOnlyClientArea && !m_backgroundPainterOrganizer.IsAttachedFrame())
|
||
{
|
||
if(pWnd->IsKindOf(RUNTIME_CLASS(CMDIFrameWnd)))
|
||
{
|
||
CWnd* pMDIClient=CWnd::FromHandlePermanent(((CMDIFrameWnd*)pWnd)->
|
||
m_hWndMDIClient);
|
||
ASSERT(pMDIClient!=NULL);
|
||
if(m_backgroundPainterOrganizer.IsAttached(pMDIClient))
|
||
VERIFY(m_backgroundPainterOrganizer.Detach(pMDIClient));
|
||
}
|
||
|
||
VERIFY(m_backgroundPainterOrganizer.AttachFrame((CFrameWnd*)pWnd,&dib,
|
||
(PaintType)m_nAlign,m_clrBack));
|
||
}
|
||
else
|
||
{
|
||
if(pWnd->IsKindOf(RUNTIME_CLASS(CFrameWnd)))
|
||
{
|
||
|
||
if(m_pHelpWnd)
|
||
{
|
||
m_pHelpWnd->Detach();
|
||
delete m_pHelpWnd;
|
||
}
|
||
|
||
m_pHelpWnd = new COXHelperWnd;
|
||
if(m_bOnlyClientArea)
|
||
{
|
||
if(pWnd->IsKindOf(RUNTIME_CLASS(CMDIFrameWnd)))
|
||
{
|
||
// check if MDIClient has already been attached to a CWnd object
|
||
CWnd* pMDIClient=
|
||
CWnd::FromHandlePermanent(((CMDIFrameWnd*)pWnd)->
|
||
m_hWndMDIClient);
|
||
// if MDIClient is not attached yet
|
||
if(pMDIClient==NULL)
|
||
{
|
||
// then attach it
|
||
VERIFY(m_pHelpWnd->Attach(((CMDIFrameWnd*)pWnd)->
|
||
m_hWndMDIClient));
|
||
pMDIClient=m_pHelpWnd;
|
||
}
|
||
if(!m_backgroundPainterOrganizer.IsAttached(pMDIClient))
|
||
{
|
||
// hook MDIClient window
|
||
VERIFY(m_backgroundPainterOrganizer.Attach(pMDIClient,&dib,
|
||
(PaintType)m_nAlign,m_clrBack));
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(pWnd->IsKindOf(RUNTIME_CLASS(CMDIFrameWnd)))
|
||
{
|
||
// check if MDIClient has already been attached to a CWnd object
|
||
CWnd* pMDIClient=
|
||
CWnd::FromHandlePermanent(((CMDIFrameWnd*)pWnd)->
|
||
m_hWndMDIClient);
|
||
// if MDIClient is not attached yet
|
||
if(pMDIClient==NULL)
|
||
{
|
||
if(!m_backgroundPainterOrganizer.IsAttached(pMDIClient))
|
||
{
|
||
// then attach it
|
||
VERIFY(m_pHelpWnd->Attach(((CMDIFrameWnd*)pWnd)->
|
||
m_hWndMDIClient));
|
||
}
|
||
}
|
||
}
|
||
|
||
if(!m_backgroundPainterOrganizer.IsAttachedFrame())
|
||
{
|
||
VERIFY(!m_backgroundPainterOrganizer.
|
||
AttachFrame((CFrameWnd*)pWnd,&dib,
|
||
(PaintType)m_nAlign,m_clrBack));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// restore the state of the "Preview" window
|
||
if(::IsWindow(m_pictureWnd.GetSafeHwnd()))
|
||
{
|
||
VERIFY(m_backgroundPainterOrganizer.
|
||
SetOriginWnd(&m_pictureWnd,NULL));
|
||
}
|
||
|
||
if(!m_sFilename.IsEmpty() && !m_bUseDefaultImage)
|
||
m_backgroundPainterOrganizer.SetWallpaper(NULL,m_sFilename,FALSE);
|
||
else
|
||
m_backgroundPainterOrganizer.SetWallpaper(NULL,&m_dibDefault,FALSE);
|
||
m_backgroundPainterOrganizer.SetBkColor(NULL,m_clrBack,FALSE);
|
||
m_backgroundPainterOrganizer.SetPaintType(NULL,(PaintType)m_nAlign,TRUE);
|
||
}
|
||
|
||
|
||
|
||
void COXCustomizeBackgroundPage::OnRadioBackgroundImageSourceDefault()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
if(!UpdateData(TRUE))
|
||
return;
|
||
|
||
m_cmbFilename.EnableWindow(FALSE);
|
||
m_bUseDefaultImage = TRUE;
|
||
|
||
m_backgroundPainterOrganizer.SetWallpaper(&m_pictureWnd,&m_dibDefault);
|
||
|
||
m_sFilename = _T("");
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void COXCustomizeBackgroundPage::OnRadioBackgroundImageSourceFilename()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
if(!UpdateData(TRUE))
|
||
return;
|
||
|
||
m_cmbFilename.EnableWindow(TRUE);
|
||
m_cmbFilename.RefreshToolbar();
|
||
m_bUseDefaultImage = FALSE;
|
||
m_backgroundPainterOrganizer.SetWallpaper(&m_pictureWnd,m_sFilename);
|
||
}
|
||
|
||
void COXCustomizeBackgroundPage::OnEnable()
|
||
{
|
||
UpdateData(TRUE);
|
||
|
||
GetDlgItem(IDC_OX_GROUP_PAINT_TYPE)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_ALIGN_TILE)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_ALIGN_STRETCH)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_ALIGN_TOPLEFT)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_ALIGN_CENTERLEFT)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_ALIGN_BOTTOMLEFT)->EnableWindow(m_bPaintBackground);
|
||
|
||
GetDlgItem(IDC_OX_CHECK_ONLYCLIENT)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_ALIGN_TOPCENTER)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_ALIGN_CENTER)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_ALIGN_BOTTOMCENTER)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_ALIGN_TOPRIGHT)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_ALIGN_CENTERRIGHT)->EnableWindow(m_bPaintBackground);
|
||
|
||
GetDlgItem(IDC_OX_ALIGN_BOTTOMRIGHT)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_BACK_COLOR)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_RADIO_BCKGND_IMG_SOURCE_DEFAULT)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_RADIO_BCKGND_IMG_SOURCE_FILENAME)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_STATIC_BACKGROUND_COLOR)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_SEPARATOR2)->EnableWindow(m_bPaintBackground);
|
||
GetDlgItem(IDC_OX_IMAGE)->EnableWindow(m_bPaintBackground);
|
||
|
||
m_cmbFilename.EnableWindow(!m_bUseDefaultImage && m_bPaintBackground);
|
||
|
||
} |