Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

221 lines
4.7 KiB

//Copyright (c) 1997-2000 Microsoft Corporation
#include "pch.hxx" // pch
#pragma hdrstop
#include "resource.h"
#include "pgLokPrv.h"
CLookPreviewPg::CLookPreviewPg(
LPPROPSHEETPAGE ppsp,
int dwPageId,
int nIdTitle,
int nIdSubTitle,
int nIdValueString
) : WizardPage(ppsp, nIdTitle, nIdSubTitle)
{
m_dwPageId = dwPageId;
ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId);
m_nIdValueString = nIdValueString;
m_nCountValues = 0;
m_nCurValueIndex = 0;
m_nOrigValueIndex = 0;
m_hwndSlider = 0;
m_hwndListBox = 0;
}
CLookPreviewPg::~CLookPreviewPg(
VOID
)
{
}
#include "LookPrev.h"
void PASCAL Look_RebuildSysStuff(BOOL fInit);
void SetMyNonClientMetrics(LPNONCLIENTMETRICS lpncm);
LRESULT
CLookPreviewPg::OnInitDialog(
HWND hwnd,
WPARAM wParam,
LPARAM lParam
)
{
SendMessage(GetDlgItem(m_hwnd, IDC_LOOKPREV), LPM_RECALC, 0, 0);
SendMessage(GetDlgItem(m_hwnd, IDC_LOOKPREV), LPM_REPAINT, 0, 0);
LoadValueArray();
m_hwndListBox = GetDlgItem(m_hwnd, IDC_PREVLIST);
// Get the initial value for the type of preview we are doing
int nCurrentSize = GetCurrentValue(NULL/*&g_Options.m_schemePreview.m_ncm*/);
// Find next larger
for(int i=m_nCountValues - 1;i>=0;i--)
{
if(m_rgnValues[i] >= nCurrentSize)
m_nCurValueIndex = i;
else break;
}
m_nOrigValueIndex = m_nCurValueIndex;
// Initialize the high contrast colors listbox
for(i=0;i<m_nCountValues;i++)
{
TCHAR sz[100];
GetValueItemText(i, sz, ARRAYSIZE(sz));
ListBox_AddString(m_hwndListBox, sz);
}
ListBox_SetCurSel(m_hwndListBox, m_nCurValueIndex);
UpdateControls();
return 1;
}
void CLookPreviewPg::LoadValueArray()
{
LoadArrayFromStringTable(m_nIdValueString, m_rgnValues, &m_nCountValues);
}
void CLookPreviewPg::UpdateControls()
{
}
LRESULT
CLookPreviewPg::OnCommand(
HWND hwnd,
WPARAM wParam,
LPARAM lParam
)
{
LRESULT lResult = 1;
WORD wNotifyCode = HIWORD(wParam);
WORD wCtlID = LOWORD(wParam);
HWND hwndCtl = (HWND)lParam;
switch(wCtlID)
{
case IDC_PREVLIST:
switch(wNotifyCode)
{
case LBN_SELCHANGE:
UpdatePreview(wCtlID);
break;
default:
break;
}
break;
default:
break;
}
return lResult;
}
void CLookPreviewPg::ResetColors()
{
if(0 != m_nCurValueIndex)
{
int nCount = GetScheme(m_nCurValueIndex-1).nColorsUsed;
for(int i=0;i<nCount;i++)
{
g_Options.m_schemePreview.m_rgb[i] = GetScheme(m_nCurValueIndex-1).rgb[i];
}
}
else
{
// Use scheme that we came in here with
g_Options.RestoreOriginalColorsToPreview();
}
Look_RebuildSysStuff(TRUE);
SendMessage(GetDlgItem(m_hwnd, IDC_LOOKPREV), LPM_REPAINT, 0, 0);
}
LRESULT
CLookPreviewPg::HandleMsg(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
return 0;
}
void CLookPreviewPg::UpdatePreview(int nActionCtl)
{
// Calculate new index based on the control that generated this event
switch(nActionCtl)
{
case IDC_PREVLIST:
m_nCurValueIndex = ListBox_GetCurSel(m_hwndListBox);
break;
default:
break;
}
// Make sure we are withing range
m_nCurValueIndex = max(m_nCurValueIndex, 0);
m_nCurValueIndex = min(m_nCurValueIndex, m_nCountValues - 1);
// Modify the ncm structure
// JMC: The wizard currently does not muck with m_ncm any more - we only change the colors
// Therefore, we can call ModifyMyNonClientMetrics() with a dummy variable
NONCLIENTMETRICS ncmDummy;
ModifyMyNonClientMetrics(ncmDummy/*g_Options.m_schemePreview.m_ncm*/);
if (m_nCurValueIndex == 0)
{
// If we are here the user is going "back" and we revert to "Windows Classic" (Why?)
LoadString(g_hInstDll, IDS_SCHEME_CURRENTCOLORSCHEME+100, g_Options.m_schemePreview.m_szSelectedStyle, MAX_NUM_SZ);
}
else
{
lstrcpy(g_Options.m_schemePreview.m_szSelectedStyle, GetScheme(m_nCurValueIndex-1).szNameIndexId);
}
Look_RebuildSysStuff(TRUE);
SendMessage(GetDlgItem(m_hwnd, IDC_LOOKPREV), LPM_RECALC, 0, 0);
SendMessage(GetDlgItem(m_hwnd, IDC_LOOKPREV), LPM_REPAINT, 0, 0);
}
LRESULT
CLookPreviewPg::OnPSN_WizNext(
HWND hwnd,
INT idCtl,
LPPSHNOTIFY pnmh
)
{
if (m_nOrigValueIndex != m_nCurValueIndex)
{
// we are applying the preview; clear theme and wallpaper
// so visual style gets turned off before we make the change.
if (m_nCurValueIndex)
{
g_Options.m_schemePreview.ClearTheme();
g_Options.m_schemePreview.ClearWallpaper();
}
else
{
memcpy(&g_Options.m_schemePreview, &g_Options.m_schemeOriginal, sizeof(WIZSCHEME));
}
g_Options.ApplyPreview();
m_nOrigValueIndex = m_nCurValueIndex;
}
return WizardPage::OnPSN_WizNext(hwnd, idCtl, pnmh);
}