435 lines
12 KiB
C++
435 lines
12 KiB
C++
// OXCustomizeSplashWindowPage.cpp : implementation file
|
|
//
|
|
// Version: 9.3
|
|
|
|
|
|
#include "stdafx.h"
|
|
#include "OXCustomizeSplashWindowPage.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COXCustomizeSplashWindowPage dialog
|
|
|
|
IMPLEMENT_DYNCREATE(COXCustomizeSplashWindowPage, COXCustomizePage)
|
|
|
|
|
|
COXCustomizeSplashWindowPage::COXCustomizeSplashWindowPage()
|
|
{
|
|
//{{AFX_DATA_INIT(COXCustomizeSplashWindowPage)
|
|
m_bInterruptable = FALSE;
|
|
m_bDisplaySplashWindow = TRUE;
|
|
m_nShowDelay = 0;
|
|
m_nXCoord = 0;
|
|
m_nYCoord = 0;
|
|
m_nTransparentColorType = 2;
|
|
m_nImageSourceType = 0;
|
|
m_nDelayType = 1;
|
|
m_sSplashImageFileName = _T("");
|
|
m_nTolerance = 0;
|
|
//}}AFX_DATA_INIT
|
|
m_clrTransparent=::GetSysColor(COLOR_WINDOW);
|
|
|
|
m_nDefaultBitmapID=NULL;
|
|
m_bUseDefaultImage=TRUE;
|
|
m_bShowInfinitely=TRUE;
|
|
|
|
m_nDialogID=IDD;
|
|
m_sProfileName.Empty();
|
|
}
|
|
|
|
|
|
COXCustomizeSplashWindowPage::~COXCustomizeSplashWindowPage()
|
|
{
|
|
}
|
|
|
|
|
|
BOOL COXCustomizeSplashWindowPage::
|
|
InitializeSplashWindow(UINT nBitmapResourceID, BOOL bShowSplashWnd/*=TRUE*/,
|
|
int nDisplayFor/*=-1*/, BOOL bUserCanCancel/*=FALSE*/,
|
|
COLORREF clrTransparent/*=CLR_DEFAULT*/,
|
|
LPPOINT pColorPoint/*=NULL*/, BYTE nTolerance/*=0*/,
|
|
LPCTSTR lpszProfileName/*=_T("CustomizeSplashWindow")*/)
|
|
{
|
|
ASSERT(nBitmapResourceID!=NULL);
|
|
|
|
#ifdef _DEBUG
|
|
HINSTANCE hBitmapResourceInstance=
|
|
AfxFindResourceHandle(MAKEINTRESOURCE(nBitmapResourceID),RT_BITMAP);
|
|
ASSERT(hBitmapResourceInstance!=NULL);
|
|
#endif // _DEBUG
|
|
|
|
m_nDefaultBitmapID=nBitmapResourceID;
|
|
m_bDisplaySplashWindow=bShowSplashWnd;
|
|
m_bUseDefaultImage=TRUE;
|
|
m_bShowInfinitely=(nDisplayFor==-1);
|
|
m_bInterruptable=bUserCanCancel;
|
|
m_nShowDelay=(nDisplayFor>=0 ? nDisplayFor : 0);
|
|
if(pColorPoint==NULL)
|
|
{
|
|
m_nXCoord=0;
|
|
m_nYCoord=0;
|
|
}
|
|
else
|
|
{
|
|
m_nXCoord=pColorPoint->x;
|
|
m_nYCoord=pColorPoint->y;
|
|
}
|
|
|
|
if(clrTransparent==CLR_DEFAULT)
|
|
{
|
|
m_nTransparentColorType=2;
|
|
}
|
|
else if(clrTransparent==CLR_NONE)
|
|
{
|
|
m_nTransparentColorType=1;
|
|
}
|
|
else
|
|
{
|
|
m_clrTransparent=clrTransparent;
|
|
m_nTransparentColorType=0;
|
|
}
|
|
|
|
m_nTolerance=nTolerance;
|
|
|
|
m_sSplashImageFileName.Empty();
|
|
|
|
|
|
if(lpszProfileName!=NULL)
|
|
{
|
|
m_sProfileName=lpszProfileName;
|
|
|
|
CWinApp* pApp=AfxGetApp();
|
|
ASSERT(pApp!=NULL);
|
|
|
|
m_bDisplaySplashWindow=pApp->GetProfileInt(m_sProfileName,
|
|
_T("DisplaySplashWindow"),m_bDisplaySplashWindow);
|
|
m_bInterruptable=pApp->GetProfileInt(m_sProfileName,
|
|
_T("SplashWindow_Interruptable"),m_bInterruptable);
|
|
m_nShowDelay=pApp->GetProfileInt(m_sProfileName,
|
|
_T("SplashWindowShowDelay"),m_nShowDelay);
|
|
m_nXCoord=pApp->GetProfileInt(m_sProfileName,
|
|
_T("TransparentColorPoint_CoordX"),m_nXCoord);
|
|
m_nYCoord=pApp->GetProfileInt(m_sProfileName,
|
|
_T("TransparentColorPoint_CoordY"),m_nYCoord);
|
|
m_nTransparentColorType=pApp->GetProfileInt(m_sProfileName,
|
|
_T("TransparentColorType"),m_nTransparentColorType);
|
|
m_bUseDefaultImage=pApp->GetProfileInt(m_sProfileName,
|
|
_T("UseDefaultImage"),m_bUseDefaultImage);
|
|
m_bShowInfinitely=pApp->GetProfileInt(m_sProfileName,
|
|
_T("SplashWindowShowInfinitely"),m_bShowInfinitely);
|
|
m_sSplashImageFileName=pApp->GetProfileString(m_sProfileName,
|
|
_T("SplashImageFileName"),m_sSplashImageFileName);
|
|
m_clrTransparent=pApp->GetProfileInt(m_sProfileName,
|
|
_T("TransparentColor"),m_clrTransparent);
|
|
m_nTolerance=pApp->GetProfileInt(m_sProfileName,
|
|
_T("ColorTolerance"),m_nTolerance);
|
|
}
|
|
|
|
m_nImageSourceType=(m_bUseDefaultImage ? 0 : 1);
|
|
m_nDelayType=(m_bShowInfinitely ? 1 : 0);
|
|
|
|
if(m_bDisplaySplashWindow)
|
|
ShowSplashWindow(&m_splashWindow);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL COXCustomizeSplashWindowPage::OnCloseManager(BOOL bIsOk)
|
|
{
|
|
if(bIsOk)
|
|
{
|
|
if(!ApplyChanges())
|
|
return FALSE;
|
|
if(!m_sProfileName.IsEmpty())
|
|
{
|
|
CWinApp* pApp=AfxGetApp();
|
|
ASSERT(pApp!=NULL);
|
|
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("DisplaySplashWindow"),m_bDisplaySplashWindow);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("SplashWindow_Interruptable"),m_bInterruptable);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("SplashWindowShowDelay"),m_nShowDelay);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("TransparentColorPoint_CoordX"),m_nXCoord);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("TransparentColorPoint_CoordY"),m_nYCoord);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("TransparentColorType"),m_nTransparentColorType);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("UseDefaultImage"),m_bUseDefaultImage);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("SplashWindowShowInfinitely"),m_bShowInfinitely);
|
|
pApp->WriteProfileString(m_sProfileName,
|
|
_T("SplashImageFileName"),m_sSplashImageFileName);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("TransparentColor"),m_clrTransparent);
|
|
pApp->WriteProfileInt(m_sProfileName,
|
|
_T("ColorTolerance"),m_nTolerance);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(!m_sProfileName.IsEmpty())
|
|
{
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void COXCustomizeSplashWindowPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
COXCustomizePage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(COXCustomizeSplashWindowPage)
|
|
DDX_Control(pDX, IDC_OX_SPIN_COLOR_TOLERANCE, m_spinTolerance);
|
|
DDX_Control(pDX, IDC_OX_COMBO_IMAGESOURCE_FILENAME, m_comboSplashImageFileName);
|
|
DDX_Control(pDX, IDC_OX_SPIN_SHOW_FOR, m_spinShowFor);
|
|
DDX_Control(pDX, IDC_OX_SEPARATOR_TRANSPARENT_COLOR, m_sepTransparentColor);
|
|
DDX_Control(pDX, IDC_OX_SEPARATOR_PREVIEW, m_sepPreview);
|
|
DDX_Control(pDX, IDC_OX_SEPARATOR_OPEN_IMAGE, m_sepOpenImage);
|
|
DDX_Control(pDX, IDC_OX_SEPARATOR_DISPLAY_SETTINGS, m_sepDisplaySettings);
|
|
DDX_Control(pDX, IDC_OX_BUTTON_TRANSPARENT_COLOR, m_btnTransparentColor);
|
|
DDX_Check(pDX, IDC_OX_CHECK_INTERRUPTABLE, m_bInterruptable);
|
|
DDX_Check(pDX, IDC_OX_CHECK_DISPLAY_SPLASHWINDOW, m_bDisplaySplashWindow);
|
|
DDX_Text(pDX, IDC_OX_EDIT_SHOW_FOR, m_nShowDelay);
|
|
DDX_Text(pDX, IDC_OX_EDIT_XCOORD, m_nXCoord);
|
|
DDX_Text(pDX, IDC_OX_EDIT_YCOORD, m_nYCoord);
|
|
DDX_Radio(pDX, IDC_OX_RADIO_COLOR, m_nTransparentColorType);
|
|
DDX_Radio(pDX, IDC_OX_RADIO_IMAGE_SOURCE_DEFAULT, m_nImageSourceType);
|
|
DDX_Radio(pDX, IDC_OX_RADIO_SHOW_FOR, m_nDelayType);
|
|
DDX_CBString(pDX, IDC_OX_COMBO_IMAGESOURCE_FILENAME, m_sSplashImageFileName);
|
|
DDX_Text(pDX, IDC_OX_EDIT_COLOR_TOLERANCE, m_nTolerance);
|
|
DDV_MinMaxUInt(pDX, m_nTolerance, 0, 255);
|
|
//}}AFX_DATA_MAP
|
|
DDX_ColorPicker(pDX, IDC_OX_BUTTON_TRANSPARENT_COLOR, m_clrTransparent);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(COXCustomizeSplashWindowPage, COXCustomizePage)
|
|
//{{AFX_MSG_MAP(COXCustomizeSplashWindowPage)
|
|
ON_BN_CLICKED(IDC_OX_BUTTON_PREVIEW, OnButtonPreview)
|
|
ON_BN_CLICKED(IDC_OX_RADIO_COLOR, OnRadioColor)
|
|
ON_BN_CLICKED(IDC_OX_RADIO_COLOR_NONE, OnRadioColorNone)
|
|
ON_BN_CLICKED(IDC_OX_RADIO_COLORATPOINT, OnRadioColoratpoint)
|
|
ON_BN_CLICKED(IDC_OX_RADIO_IMAGE_SOURCE_DEFAULT, OnRadioImageSourceDefault)
|
|
ON_BN_CLICKED(IDC_OX_RADIO_IMAGE_SOURCE_FILE, OnRadioImageSourceFile)
|
|
ON_BN_CLICKED(IDC_OX_RADIO_SHOW_FOR, OnRadioShowFor)
|
|
ON_BN_CLICKED(IDC_OX_RADIO_SHOW_INFINITELY, OnRadioShowInfinitely)
|
|
//}}AFX_MSG_MAP
|
|
ON_MESSAGE(WM_KICKIDLE, OnKickIdle)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COXCustomizeSplashWindowPage message handlers
|
|
|
|
BOOL COXCustomizeSplashWindowPage::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 COXCustomizeSplashWindowPage::Unload()
|
|
{
|
|
// add here code for cleaning up all objects created by demo
|
|
//
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
COXCustomizePage::Unload();
|
|
}
|
|
|
|
void COXCustomizeSplashWindowPage::OnInitDialog()
|
|
{
|
|
// must call default implementation
|
|
COXCustomizePage::OnInitDialog();
|
|
|
|
// add here initialization code for your demo dialog. Treat it as a
|
|
// normal CDialog::OnInitDialog function
|
|
|
|
m_comboSplashImageFileName.
|
|
SetAutoPersistent(_T("CustomizeSplashWindow_ImageFileName"));
|
|
for(int nIndex=4; nIndex<OX_HISTORY_COMBO_MAX_TOOLBUTTONS; nIndex++)
|
|
{
|
|
m_comboSplashImageFileName.ShowButton(nIndex,FALSE);
|
|
}
|
|
CToolBar* pToolbar=m_comboSplashImageFileName.GetToolBar();
|
|
pToolbar->ModifyStyle(NULL,TBSTYLE_FLAT);
|
|
m_comboSplashImageFileName.RefreshToolbar();
|
|
|
|
m_btnTransparentColor.SetToolTip(TRUE);
|
|
m_btnTransparentColor.SetDefaultColor(::GetSysColor(COLOR_BTNFACE));
|
|
|
|
m_nImageSourceType=(m_bUseDefaultImage ? 0 : 1);
|
|
m_nDelayType=(m_bShowInfinitely ? 1 : 0);
|
|
|
|
m_spinShowFor.SetRange(0,32000);
|
|
m_spinTolerance.SetRange(0,255);
|
|
|
|
// layout
|
|
//
|
|
m_LayoutManager.TieChild(&m_sepDisplaySettings,
|
|
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(&m_sepOpenImage,
|
|
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(&m_sepPreview,
|
|
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(&m_sepTransparentColor,
|
|
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
|
|
|
|
m_LayoutManager.TieChild(IDC_OX_BUTTON_PREVIEW,
|
|
OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(&m_comboSplashImageFileName,
|
|
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
|
|
//
|
|
///////////////////////////////////////
|
|
|
|
m_bInitialized=TRUE;
|
|
|
|
UpdateData(FALSE);
|
|
ShowVars();
|
|
}
|
|
|
|
|
|
BOOL COXCustomizeSplashWindowPage::ApplyChanges()
|
|
{
|
|
if(!UpdateData(TRUE))
|
|
return FALSE;
|
|
|
|
m_bUseDefaultImage=(m_nImageSourceType==0);
|
|
m_bShowInfinitely=(m_nDelayType==1);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void COXCustomizeSplashWindowPage::ShowVars()
|
|
{
|
|
if(!m_bInitialized)
|
|
return;
|
|
|
|
if(!UpdateData(TRUE))
|
|
return;
|
|
|
|
GetDlgItem(IDC_OX_EDIT_SHOW_FOR)->EnableWindow(m_nDelayType==0);
|
|
GetDlgItem(IDC_OX_SPIN_SHOW_FOR)->EnableWindow(m_nDelayType==0);
|
|
|
|
m_comboSplashImageFileName.EnableWindow(m_nImageSourceType==1);
|
|
m_comboSplashImageFileName.RefreshToolbar();
|
|
|
|
m_btnTransparentColor.EnableWindow(m_nTransparentColorType==0);
|
|
GetDlgItem(IDC_OX_EDIT_XCOORD)->EnableWindow(m_nTransparentColorType==2);
|
|
GetDlgItem(IDC_OX_EDIT_YCOORD)->EnableWindow(m_nTransparentColorType==2);
|
|
GetDlgItem(IDC_OX_EDIT_COLOR_TOLERANCE)->EnableWindow(m_nTransparentColorType!=1);
|
|
GetDlgItem(IDC_OX_SPIN_COLOR_TOLERANCE)->EnableWindow(m_nTransparentColorType!=1);
|
|
}
|
|
|
|
|
|
LRESULT COXCustomizeSplashWindowPage::OnKickIdle(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
UNREFERENCED_PARAMETER(wParam);
|
|
UNREFERENCED_PARAMETER(lParam);
|
|
|
|
// Update the context list
|
|
m_comboSplashImageFileName.OnIdle();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void COXCustomizeSplashWindowPage::OnButtonPreview()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
if(!UpdateData(TRUE))
|
|
return;
|
|
|
|
ShowSplashWindow(&m_splashWindowTest,TRUE);
|
|
}
|
|
|
|
void COXCustomizeSplashWindowPage::OnRadioColor()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
ShowVars();
|
|
}
|
|
|
|
void COXCustomizeSplashWindowPage::OnRadioColorNone()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
ShowVars();
|
|
}
|
|
|
|
void COXCustomizeSplashWindowPage::OnRadioColoratpoint()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
ShowVars();
|
|
}
|
|
|
|
void COXCustomizeSplashWindowPage::OnRadioImageSourceDefault()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
ShowVars();
|
|
|
|
m_sSplashImageFileName = _T("");
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void COXCustomizeSplashWindowPage::OnRadioImageSourceFile()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
ShowVars();
|
|
}
|
|
|
|
void COXCustomizeSplashWindowPage::OnRadioShowFor()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
ShowVars();
|
|
}
|
|
|
|
void COXCustomizeSplashWindowPage::OnRadioShowInfinitely()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
ShowVars();
|
|
}
|
|
|
|
|
|
void COXCustomizeSplashWindowPage::ShowSplashWindow(COXSplashWnd* pSplashWindow,
|
|
BOOL bForceUserCancel/*=FALSE*/)
|
|
{
|
|
ASSERT(pSplashWindow!=NULL);
|
|
|
|
COLORREF clr=(m_nTransparentColorType==0 ?
|
|
m_clrTransparent : (m_nTransparentColorType==1 ? CLR_NONE : CLR_DEFAULT));
|
|
CPoint point(m_nXCoord,m_nYCoord);
|
|
if(m_nImageSourceType==0)
|
|
{
|
|
VERIFY(pSplashWindow->LoadBitmap(m_nDefaultBitmapID,
|
|
clr,&point,(BYTE)m_nTolerance));
|
|
}
|
|
else
|
|
{
|
|
if(!pSplashWindow->LoadBitmapFile(m_sSplashImageFileName,
|
|
clr,&point,(BYTE)m_nTolerance))
|
|
{
|
|
TRACE(_T("Failed to load %s bitmap file"),m_sSplashImageFileName);
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
pSplashWindow->SetUserCancel(m_bInterruptable || bForceUserCancel);
|
|
pSplashWindow->Show((m_nDelayType==0 ? m_nShowDelay : SPLASH_NOTIMER),NULL);
|
|
}
|