windows-nt/Source/XPSP1/NT/shell/osshell/accessib/accwiz/pgwelcom.cpp
2020-09-26 16:20:57 +08:00

204 lines
5 KiB
C++

// Copyright (c) 1997-2000 Microsoft Corporation
#include "pch.hxx" // pch
#pragma hdrstop
#include "resource.h"
#include "pgWelcom.h"
#include "select.h"
extern HPALETTE g_hpal3D;
UINT IDMapT[3][2] = { 0, IDC_TEXT1,
1, IDC_TEXT2,
2, IDC_TEXT3
};
// a-anilk; Re-write to use owner drawn controls: 05/08/99
CWelcomePg::CWelcomePg(
LPPROPSHEETPAGE ppsp
) : WizardPage(ppsp, IDS_TEXTSIZETITLE, IDS_TEXTSIZESUBTITLE)
{
m_dwPageId = IDD_WIZWELCOME;
ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId);
m_nCurrentHilight = 0;
m_nCurValueIndex = 0;
}
CWelcomePg::~CWelcomePg(
VOID
)
{
}
LRESULT
CWelcomePg::OnCommand(
HWND hwnd,
WPARAM wParam,
LPARAM lParam
)
{
LRESULT lResult = 1;
return lResult;
}
LRESULT CWelcomePg::OnInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
SetFocus(GetDlgItem(hwnd, IDC_TEXT1));
LoadString(g_hInstDll, IDS_WELCOMETEXT1, m_szWelcomeText[0], ARRAYSIZE(m_szWelcomeText[0]));
LoadString(g_hInstDll, IDS_WELCOMETEXT2, m_szWelcomeText[1], ARRAYSIZE(m_szWelcomeText[1]));
LoadString(g_hInstDll, IDS_WELCOMETEXT3, m_szWelcomeText[2], ARRAYSIZE(m_szWelcomeText[2]));
LoadString(g_hInstDll, IDS_WELCOMETEXT4, m_szWelcomeText[3], ARRAYSIZE(m_szWelcomeText[3]));
LoadArrayFromStringTable(IDS_LKPREV_WELCOME_MINTEXTSIZES, m_rgnValues, &m_nCountValues);
return 1;
}
void CWelcomePg::InvalidateRects(int PrevHilight)
{
InvalidateRect(GetDlgItem(m_hwnd, IDMapT[PrevHilight][1]), NULL, TRUE);
}
// These is to set the Focus and sync the painting
LRESULT CWelcomePg::OnPSN_SetActive(HWND hwnd, INT idCtl, LPPSHNOTIFY pnmh)
{
syncInit = FALSE;
uIDEvent = SetTimer(hwnd, NULL, 100, NULL);
m_nCurrentHilight = m_nCurValueIndex = 0;
// Localization taken care... 9,11,15 in JPN
if ( g_Options.m_nMinimalFontSize <=9 )
m_nCurrentHilight = 0;
else if (g_Options.m_nMinimalFontSize <=12 )
m_nCurrentHilight = 1;
else if (g_Options.m_nMinimalFontSize <=16 )
m_nCurrentHilight = 2;
m_nCurValueIndex = m_nCurrentHilight;
return 0;
}
LRESULT CWelcomePg::OnTimer( HWND hwnd, WPARAM wParam, LPARAM lParam )
{
KillTimer(hwnd, uIDEvent);
syncInit = TRUE;
return 1;
}
// Sets the focus to the current item in OnInitDialog.
void CWelcomePg::SetFocussedItem(int m_nCurrentHilight)
{
SetFocus(GetDlgItem(m_hwnd, IDMapT[m_nCurrentHilight][1]));
}
LRESULT CWelcomePg::OnDrawItem(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
UINT idCtrl = (UINT) wParam;
LPDRAWITEMSTRUCT lpDrawItemStruct = (LPDRAWITEMSTRUCT) lParam;
int index;
if ( !syncInit)
SetFocussedItem(m_nCurrentHilight);
switch(idCtrl)
{
case IDC_TEXT1:
index = 0;
break;
case IDC_TEXT2:
index = 1;
break;
case IDC_TEXT3:
index = 2;
break;
default:
_ASSERTE(FALSE);
return 1; // Prefix #113778 (this should never happen; only three controls on dialog)
break;
}
// For each button, Check the state, And if the button is selected,
// means that it has current focus, So Re-paint the previously hilighted and
// the current selected buttons....
// Make sure we ignore the initial events so that we minimize the flicker...
if ( (lpDrawItemStruct->itemState & ODS_FOCUS) && (m_nCurrentHilight != index))
{
if ( syncInit )
{
// Erase the previous one...
InvalidateRects(m_nCurrentHilight);
Sleep(100);
m_nCurrentHilight= m_nCurValueIndex = index;
}
}
Draw( lpDrawItemStruct, index );
return 1;
}
void CWelcomePg::Draw(LPDRAWITEMSTRUCT ldi, int i)
{
int nOldBkMode = SetBkMode(ldi->hDC, TRANSPARENT);
HDC hdc = ldi->hDC;
RECT rcOriginal = ldi->rcItem;
HFONT hFontOld = (HFONT)SelectObject(hdc, g_Options.GetClosestMSSansSerif(m_rgnValues[i], (m_nCurrentHilight == i)));
TextOut(hdc, rcOriginal.left + 10 , rcOriginal.top + 10 - i, m_szWelcomeText[i], lstrlen(m_szWelcomeText[i]));
SelectObject(hdc, hFontOld);
SetBkMode(ldi->hDC, nOldBkMode);
//If current hi-lighted item, Then draw the bounding rectangle.
if ( m_nCurrentHilight == i)
{
DrawHilight(m_hwnd, ldi);
}
}
LRESULT
CWelcomePg::OnPSN_WizNext(
HWND hwnd,
INT idCtl,
LPPSHNOTIFY pnmh
)
{
// Tell the second page that we've done something
g_Options.m_bWelcomePageTouched = TRUE;
// In addition to knowing the actual font size we need to know if it's normal,
// large or extra large so we can update display CPL on what's happened.
g_Options.m_nMinimalFontSize = m_rgnValues[m_nCurValueIndex];
g_Options.m_schemePreview.m_nSelectedSize = m_nCurValueIndex;
return WizardPage::OnPSN_WizNext(hwnd, idCtl, pnmh);
#if 0
// We are going to allow people to 'back' to this page
// As a HACK, we want this page to come out only once.
// If we try to remove ourselves, and the call the
// default OnPSN_WizNext(), we'll get an assert when
// that function tries to find the 'next' page. Instead
// we manually do the things from OnPSN_WizNext()
// Remove ourself from the wizard after we select a size.
DWORD dwTemp = IDD_WIZWELCOME;
sm_WizPageOrder.RemovePages(&dwTemp, 1);
SetWindowLong(hwnd, DWL_MSGRESULT, IDD_WIZWELCOME2);
return TRUE;
#endif
}