|
|
// 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
}
|