|
|
/*****************************************************************************\
FILE: EffectsAdvPg.cpp
DESCRIPTION: This code will display the Effect tab in the Advanced Display Control panel.
BryanSt 4/13/2000 Updated and Converted to C++
Copyright (C) Microsoft Corp 2000-2000. All rights reserved. \*****************************************************************************/
#include "precomp.hxx"
#pragma hdrstop
#include "EffectsAdvPg.h"
typedef struct { DWORD dwControlID; DWORD dwHelpContextID; }POPUP_HELP_ARRAY;
POPUP_HELP_ARRAY phaMainDisplay[] = { { (DWORD)IDC_ICONS, (DWORD)IDH_DISPLAY_EFFECTS_DESKTOP_ICONS }, { (DWORD)IDC_CHANGEICON, (DWORD)IDH_DISPLAY_EFFECTS_CHANGE_ICON_BUTTON }, { (DWORD)IDC_LARGEICONS, (DWORD)IDH_DISPLAY_EFFECTS_LARGE_ICONS_CHECKBOX }, { (DWORD)IDC_ICONHIGHCOLOR, (DWORD)IDH_DISPLAY_EFFECTS_ALL_COLORS_CHECKBOX }, { (DWORD)IDC_ICONDEFAULT, (DWORD)IDH_DISPLAY_EFFECTS_DEFAULT_ICON_BUTTON }, { (DWORD)IDC_MENUANIMATION, (DWORD)IDH_DISPLAY_EFFECTS_ANIMATE_WINDOWS }, { (DWORD)IDC_FONTSMOOTH, (DWORD)IDH_DISPLAY_EFFECTS_SMOOTH_FONTS_CHECKBOX }, { (DWORD)IDC_SHOWDRAG, (DWORD)IDH_DISPLAY_EFFECTS_DRAG_WINDOW_CHECKBOX }, { (DWORD)IDC_KEYBOARDINDICATORS, (DWORD)IDH_DISPLAY_EFFECTS_HIDE_KEYBOARD_INDICATORS }, { (DWORD)IDC_GRPBOX_1, (DWORD)IDH_COMM_GROUPBOX }, { (DWORD)IDC_GRPBOX_2, (DWORD)IDH_COMM_GROUPBOX }, { (DWORD)IDC_COMBOEFFECT, (DWORD)IDH_DISPLAY_EFFECTS_ANIMATE_LISTBOX }, { (DWORD)IDC_COMBOFSMOOTH, (DWORD)IDH_DISPLAY_EFFECTS_SMOOTH_FONTS_LISTBOX }, { (DWORD)0, (DWORD)0 }, { (DWORD)0, (DWORD)0 }, // double-null terminator NECESSARY!
};
/* Not using this table for win9x after win2k backport -- jonburs
POPUP_HELP_ARRAY phaMainWinPlus[] = { { (DWORD)IDC_ICONS, (DWORD)IDH_PLUS_PLUSPACK_LIST }, { (DWORD)IDC_CHANGEICON, (DWORD)IDH_PLUS_PLUSPACK_CHANGEICON }, { (DWORD)IDC_LARGEICONS, (DWORD)IDH_PLUS_PLUSPACK_LARGEICONS }, { (DWORD)IDC_ICONHIGHCOLOR, (DWORD)IDH_PLUS_PLUSPACK_ALLCOLORS }, { (DWORD)IDC_GRPBOX_1, (DWORD)IDH_COMM_GROUPBOX }, { (DWORD)IDC_GRPBOX_2, (DWORD)IDH_COMM_GROUPBOX }, { (DWORD)0, (DWORD)0 }, { (DWORD)0, (DWORD)0 }, // double-null terminator NECESSARY!
}; */
POPUP_HELP_ARRAY * g_phaHelp = NULL; TCHAR g_szHelpFile[32]; BOOL g_fCoInitDone = FALSE; // track state of OLE CoInitialize()
HWND g_hWndList; // handle to the list view window
HIMAGELIST g_hIconList; // handles to image lists for large icons
ULONG g_ulFontInformation, g_ulNewFontInformation;
typedef struct tagDefIcons { int iIndex; UINT uPath; TCHAR szFile[16]; }DEFICONS;
DEFICONS sDefaultIcons[NUM_ICONS] = { { 0,PATH_WIN ,TEXT("\\EXPLORER.EXE")}, // "My Computer" default icon
{ 0,PATH_SYS ,TEXT("\\mydocs.dll")}, // "My Documents" default icon
#ifdef INET_EXP_ICON
{ 0,PATH_IEXP,TEXT("\\iexplore.exe")}, // "Internet Explorer" default icon
#endif
{17,PATH_SYS, TEXT("\\shell32.dll")}, // "Net Neighbourhood" default icon
{32,PATH_SYS, TEXT("\\shell32.dll")}, // "Trash full" default icon
{31,PATH_SYS, TEXT("\\shell32.dll")}, // "Trash empty" default icon
#ifdef DIRECTORY_ICON
{ 0,PATH_SYS, TEXT("\\dsfolder.dll")}, // "Directory" default icon
#endif
};
//need to be L"..." since SHGetRestriction takes only LPCWSTR and this file is compiled as ANSI
#define POLICY_KEY_EXPLORER L"Explorer"
#define POLICY_VALUE_ANIMATION L"NoChangeAnimation"
#define POLICY_VALUE_KEYBOARDNAV L"NoChangeKeyboardNavigationIndicators"
#ifdef CLEARTYPECOMBO
BOOL RegisterTextEdgeClass(void); INT_PTR CALLBACK TextEdgeDlgProc( HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam ); BOOL DisplayFontSmoothingDetails(HWND hWnd, BOOL* pfFontSmoothing, DWORD *pdwSmoothingType); static void EnableDlgItem(HWND dlg, int idkid, BOOL val); void ShowTextRedraw(HWND hDlg); #endif // CLEARTYPECOMBO
//===========================
// *** Class Internals & Helpers ***
//===========================
STDAPI SHPropertyBag_WriteByRef(IN IPropertyBag * pPropertyPage, IN LPCWSTR pwzPropName, IN void * p) { HRESULT hr = E_INVALIDARG;
if (pPropertyPage && pwzPropName && p) { VARIANT va;
va.vt = VT_BYREF; va.byref = p; hr = pPropertyPage->Write(pwzPropName, &va); }
return hr; }
STDAPI SHPropertyBag_ReadByRef(IN IPropertyBag * pPropertyPage, IN LPCWSTR pwzPropName, IN void * p, IN SIZE_T cbSize) { HRESULT hr = E_INVALIDARG;
if (pPropertyPage && pwzPropName && p) { VARIANT va;
hr = pPropertyPage->Read(pwzPropName, &va, NULL); if (SUCCEEDED(hr)) { if ((VT_BYREF == va.vt) && va.byref) { CopyMemory(p, va.byref, cbSize); } else { hr = E_FAIL; } } }
return hr; }
// ExtractPlusColorIcon
//
// Extract Icon from a file in proper Hi or Lo color for current system display
//
// from FrancisH on 6/22/95 with mods by TimBragg
HRESULT ExtractPlusColorIcon( LPCTSTR szPath, int nIndex, HICON *phIcon, UINT uSizeLarge, UINT uSizeSmall) { IShellLink *psl; HRESULT hres; HICON hIcons[2]; // MUST! - provide for TWO return icons
if (!g_fCoInitDone) { if (SUCCEEDED(CoInitialize(NULL))) g_fCoInitDone = TRUE; }
*phIcon = NULL; if (SUCCEEDED(hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&psl))) { if (SUCCEEDED(hres = psl->SetIconLocation(szPath, nIndex))) { IExtractIcon *pei; if (SUCCEEDED(hres = psl->QueryInterface(IID_IExtractIcon, (void**)&pei))) { if (SUCCEEDED(hres = pei->Extract(szPath, nIndex, &hIcons[0], &hIcons[1], (UINT)MAKEWPARAM((WORD)uSizeLarge, (WORD)uSizeSmall)))) { *phIcon = hIcons[0]; // Return first icon to caller
}
pei->Release(); } }
psl->Release(); }
return hres; } // end ExtractPlusColorIcon()
BOOL FadeEffectAvailable() { BOOL fFade = FALSE, fTestFade = FALSE; SystemParametersInfo( SPI_GETMENUFADE, 0, (PVOID)&fFade, 0 ); if (fFade) return TRUE; SystemParametersInfo( SPI_SETMENUFADE, 0, (PVOID)1, 0); SystemParametersInfo( SPI_GETMENUFADE, 0, (PVOID)&fTestFade, 0 ); SystemParametersInfo( SPI_SETMENUFADE, 0, IntToPtr(fFade), 0);
return (fTestFade); }
HRESULT CEffectsPage::_OnApply(HWND hDlg) { HRESULT hr = S_OK;
// Full Color Icons
if (m_pEffectsState && (m_pEffectsState->_nOldHighIconColor != m_pEffectsState->_nHighIconColor)) { if ((GetBitsPerPixel() < 16) && (m_pEffectsState->_nHighIconColor == 16)) // Display mode won't support icon high colors
{ TCHAR szTemp1[512]; TCHAR szTemp2[256];
LoadString(g_hInst, IDS_256COLORPROBLEM, szTemp1, ARRAYSIZE(szTemp1)); LoadString(g_hInst, IDS_ICONCOLORWONTWORK, szTemp2, ARRAYSIZE(szTemp2)); StrCatBuff(szTemp1, szTemp2, ARRAYSIZE(szTemp1)); LoadString(g_hInst, IDS_EFFECTS, szTemp2, ARRAYSIZE(szTemp2));
MessageBox(hDlg, szTemp1, szTemp2, MB_OK|MB_ICONINFORMATION); } }
return hr; }
HRESULT CEffectsPage::_OnInit(HWND hDlg) { HRESULT hr = S_OK; TCHAR szRes[100];
if (!m_pEffectsState) { return E_INVALIDARG; }
//////////////////////////////////////////////////////////////////////////
// Load the state from persisted form (registry) to the state struct
//////////////////////////////////////////////////////////////////////////
m_nIndex = 0;
g_bMirroredOS = IS_MIRRORING_ENABLED();
// Create our list view and fill it with the system icons
_CreateListView(hDlg);
// Get the name of our help file. For Memphis, it's
// IDS_HELPFILE_PLUS for NT it's IDS_HELPFILE.
// g_phaHelp = phaMainWinPlus;
// Running Win2k shellport, want Win2k helpfile and resources
g_phaHelp = phaMainDisplay;
LoadString(g_hInst, IDS_HELPFILE, g_szHelpFile, 32);
//////////////////////////////////////////////////////////////////////////
// Update UI based on the state struct
//////////////////////////////////////////////////////////////////////////
if (m_pEffectsState->_nLargeIcon == ICON_INDETERMINATE) { HWND hItem = GetDlgItem(hDlg, IDC_LARGEICONS); SendMessage(hItem, BM_SETSTYLE, (WPARAM)LOWORD(BS_AUTO3STATE), MAKELPARAM(FALSE,0)); }
// Set CheckBoxes
SendMessage((HWND)GetDlgItem(hDlg, IDC_LARGEICONS), BM_SETCHECK, (WPARAM)m_pEffectsState->_nLargeIcon, 0); SendMessage((HWND)GetDlgItem(hDlg, IDC_MENUSHADOWS), BM_SETCHECK, (WPARAM)m_pEffectsState->_fMenuShadows, 0); SendMessage((HWND)GetDlgItem(hDlg, IDC_ICONHIGHCOLOR ), BM_SETCHECK, (WPARAM)(BOOL)(m_pEffectsState->_nHighIconColor == 16), 0); SendMessage((HWND)GetDlgItem(hDlg, IDC_MENUANIMATION), BM_SETCHECK, (WPARAM)m_pEffectsState->_wpMenuAnimation, 0); SendMessage((HWND)GetDlgItem(hDlg, IDC_FONTSMOOTH), BM_SETCHECK, (WPARAM)m_pEffectsState->_fFontSmoothing, 0); SendMessage((HWND)GetDlgItem(hDlg, IDC_SHOWDRAG), BM_SETCHECK, (WPARAM)m_pEffectsState->_fDragWindow, 0); SendMessage((HWND)GetDlgItem(hDlg, IDC_KEYBOARDINDICATORS), BM_SETCHECK, (WPARAM)(m_pEffectsState->_fKeyboardIndicators ? BST_UNCHECKED : BST_CHECKED), 0);
// Set Effects Drop Down
HWND hwndCombo = GetDlgItem(hDlg,IDC_COMBOEFFECT); ComboBox_ResetContent(hwndCombo); LoadString(g_hInst, IDS_FADEEFFECT, szRes, ARRAYSIZE(szRes) ); ComboBox_AddString(hwndCombo, szRes); LoadString(g_hInst, IDS_SCROLLEFFECT, szRes, ARRAYSIZE(szRes) ); ComboBox_AddString(hwndCombo, szRes); ComboBox_SetCurSel(hwndCombo, (MENU_EFFECT_FADE == m_pEffectsState->_dwAnimationEffect) ? 0 : 1); EnableWindow(hwndCombo, (UINT)m_pEffectsState->_wpMenuAnimation);
if (!FadeEffectAvailable()) { ShowWindow(GetDlgItem(hDlg, IDC_COMBOEFFECT), SW_HIDE); }
if (0 != SHGetRestriction(NULL,POLICY_KEY_EXPLORER,POLICY_VALUE_ANIMATION)) { //disable
//0= enable
//non-0= disable
//relies on the fact that if the key does not exist it returns 0 as well
EnableWindow((HWND)GetDlgItem(hDlg, IDC_MENUANIMATION), FALSE); EnableWindow((HWND)GetDlgItem(hDlg, IDC_COMBOEFFECT), FALSE); }
hwndCombo = GetDlgItem(hDlg,IDC_COMBOFSMOOTH); #ifdef CLEARTYPECOMBO
ComboBox_ResetContent(hwndCombo); LoadString(g_hInst, IDS_STANDARDSMOOTHING, szRes, ARRAYSIZE(szRes)); ComboBox_AddString(hwndCombo, szRes); LoadString(g_hInst, IDS_CLEARTYPE, szRes, ARRAYSIZE(szRes)); ComboBox_AddString(hwndCombo, szRes);
BOOL fTemp; ComboBox_SetCurSel(hwndCombo, m_pEffectsState->_dwFontSmoothingType-1); if (SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, (PVOID)&fTemp, 0)) { EnableWindow((HWND)hwndCombo, m_pEffectsState->_fFontSmoothing); } else { ShowWindow(hwndCombo, SW_HIDE); ShowWindow(GetDlgItem(hDlg, IDC_SHOWME), SW_HIDE); } #else
ShowWindow(hwndCombo, SW_HIDE); ShowWindow(GetDlgItem(hDlg, IDC_SHOWME), SW_HIDE); #endif //CLEARTYPECOMBO
if (0 != SHGetRestriction(NULL,POLICY_KEY_EXPLORER,POLICY_VALUE_KEYBOARDNAV)) { //disable, see comment for animation
EnableWindow((HWND)GetDlgItem(hDlg, IDC_KEYBOARDINDICATORS), FALSE); }
//disable and uncheck things if we are on terminal server
BOOL bEffectsEnabled; if (!SystemParametersInfo(SPI_GETUIEFFECTS, 0, (PVOID) &bEffectsEnabled, 0)) { // This flag is only available on Win2k and later. We're depending
// on the call returning false if the flag doesn't exist...
bEffectsEnabled = TRUE; } if (!bEffectsEnabled || SHGetMachineInfo(GMI_TSCLIENT)) { EnableWindow((HWND)GetDlgItem( hDlg, IDC_MENUANIMATION), FALSE); EnableWindow((HWND)GetDlgItem(hDlg, IDC_ICONHIGHCOLOR), FALSE); EnableWindow((HWND)GetDlgItem(hDlg, IDC_KEYBOARDINDICATORS), FALSE); EnableWindow((HWND)GetDlgItem(hDlg, IDC_FONTSMOOTH), FALSE); ShowWindow(GetDlgItem( hDlg, IDC_COMBOEFFECT ), SW_HIDE); SendDlgItemMessage(hDlg, IDC_MENUANIMATION, BM_SETCHECK, 0, 0); SendDlgItemMessage(hDlg, IDC_ICONHIGHCOLOR, BM_SETCHECK, 0, 0); SendDlgItemMessage(hDlg, IDC_KEYBOARDINDICATORS, BM_SETCHECK, 0, 0); SendDlgItemMessage(hDlg, IDC_FONTSMOOTH, BM_SETCHECK, 0, 0); }
// We remove the Keyboard indicators check box on non-NT platform since User32
// does not provide the functionality to implement the feature.
if (!g_RunningOnNT) { HWND hwndSWC = GetDlgItem(hDlg, IDC_SHOWDRAG); HWND hwndKI = GetDlgItem(hDlg, IDC_KEYBOARDINDICATORS); HWND hwndGroup = GetDlgItem(hDlg, IDC_GRPBOX_2);
// Hide the Hide keyboard cues check box on non-NT platform
ShowWindow(hwndKI, SW_HIDE);
// Calculate the bottom margin
RECT rect; RECT rectGroup; GetWindowRect(hwndKI, &rect); GetWindowRect(hwndGroup, &rectGroup); int margin = rectGroup.bottom - rect.bottom;
GetWindowRect(hwndSWC, &rect); SetWindowPos(hwndGroup, HWND_TOP, 0, 0, rectGroup.right - rectGroup.left, rect.bottom - rectGroup.top + margin, SWP_NOMOVE | SWP_NOZORDER); }
return hr; }
HRESULT CEffectsPage::_OnCommand(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { BOOL fHandled = 1; // Not handled (WM_COMMAND seems to be different)
WORD idCtrl = GET_WM_COMMAND_ID(wParam, lParam); WORD wEvent = GET_WM_COMMAND_CMD(wParam, lParam); BOOL bDorked = FALSE;
switch (idCtrl) { case IDOK: EndDialog(hDlg, IDOK); break;
case IDCANCEL: EndDialog(hDlg, IDCANCEL); break;
case IDC_LARGEICONS: if (m_pEffectsState) { m_pEffectsState->_nLargeIcon = (int)SendMessage ( (HWND)lParam, BM_GETCHECK, 0, 0 ); bDorked = TRUE; } break;
case IDC_MENUSHADOWS: if (m_pEffectsState) { m_pEffectsState->_fMenuShadows = (int)SendMessage ( (HWND)lParam, BM_GETCHECK, 0, 0 ); bDorked = TRUE; } break;
case IDC_ICONHIGHCOLOR: if (m_pEffectsState) { m_pEffectsState->_nHighIconColor = 4; if (SendMessage((HWND)lParam, BM_GETCHECK, 0, 0) == TRUE) { m_pEffectsState->_nHighIconColor = 16; } bDorked = TRUE; } break;
case IDC_SHOWDRAG: if (m_pEffectsState) { m_pEffectsState->_fDragWindow = (SendMessage( (HWND)lParam, BM_GETCHECK, 0, 0 ) == BST_CHECKED); bDorked = TRUE; } break;
case IDC_MENUANIMATION: if (m_pEffectsState) { switch (m_pEffectsState->_wpMenuAnimation) { case BST_UNCHECKED: m_pEffectsState->_wpMenuAnimation = BST_CHECKED; break;
case BST_CHECKED: m_pEffectsState->_wpMenuAnimation = BST_UNCHECKED; break;
case BST_INDETERMINATE: m_pEffectsState->_wpMenuAnimation = BST_UNCHECKED; break; } SendMessage( (HWND)lParam, BM_SETCHECK, (WPARAM)m_pEffectsState->_wpMenuAnimation, 0 ); EnableWindow((HWND)GetDlgItem( hDlg, IDC_COMBOEFFECT), (BST_CHECKED == m_pEffectsState->_wpMenuAnimation)); bDorked = TRUE; } break;
case IDC_COMBOEFFECT: if ((wEvent == CBN_SELCHANGE) && m_pEffectsState) { m_pEffectsState->_dwAnimationEffect = (DWORD)ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_COMBOEFFECT)) + 1; bDorked = TRUE; } break; #ifdef CLEARTYPECOMBO
case IDC_COMBOFSMOOTH: if ((wEvent == CBN_SELCHANGE) && m_pEffectsState) { m_pEffectsState->_dwFontSmoothingType = (DWORD)ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_COMBOFSMOOTH)) + 1; bDorked = TRUE; } break; #endif
case IDC_FONTSMOOTH: if (m_pEffectsState) { m_pEffectsState->_fFontSmoothing = (SendMessage( (HWND)lParam, BM_GETCHECK, 0, 0 ) == BST_CHECKED); #ifdef CLEARTYPECOMBO
EnableWindow((HWND)GetDlgItem( hDlg, IDC_COMBOFSMOOTH), m_pEffectsState->_fFontSmoothing); if (m_pEffectsState->_fFontSmoothing) m_pEffectsState->_dwFontSmoothingType = ((DWORD)ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_COMBOFSMOOTH)) + 1); #endif
bDorked = TRUE; } break;
case IDC_CHANGEICON: if (m_pEffectsState) { INT i = m_pEffectsState->_IconData[m_nIndex].iOldIndex; WCHAR szTemp[ MAX_PATH ]; TCHAR szExp[ MAX_PATH ];
ExpandEnvironmentStrings(m_pEffectsState->_IconData[m_nIndex].szOldFile, szExp, ARRAYSIZE(szExp));
if (g_RunningOnNT) { SHTCharToUnicode(szExp, szTemp, ARRAYSIZE(szTemp)); } else { SHTCharToAnsi(szExp, (LPSTR)szTemp, ARRAYSIZE(szTemp)); }
if (PickIconDlg(hDlg, (LPTSTR)szTemp, ARRAYSIZE(szTemp), &i) == TRUE) { HICON hIcon;
if (g_RunningOnNT) { SHUnicodeToTChar(szTemp, m_pEffectsState->_IconData[m_nIndex].szNewFile, ARRAYSIZE(m_pEffectsState->_IconData[m_nIndex].szNewFile)); } else { SHAnsiToTChar((LPSTR)szTemp, m_pEffectsState->_IconData[m_nIndex].szNewFile, ARRAYSIZE(m_pEffectsState->_IconData[m_nIndex].szNewFile)); } m_pEffectsState->_IconData[m_nIndex].iNewIndex = i; ExtractPlusColorIcon(m_pEffectsState->_IconData[m_nIndex].szNewFile, m_pEffectsState->_IconData[m_nIndex].iNewIndex, &hIcon, 0, 0);
ImageList_ReplaceIcon(g_hIconList, m_nIndex, hIcon); ListView_RedrawItems(g_hWndList, m_nIndex, m_nIndex); bDorked = TRUE; } SetFocus(g_hWndList); } break;
case IDC_ICONDEFAULT: { TCHAR szTemp[_MAX_PATH]; HICON hIcon;
switch( sDefaultIcons[m_nIndex].uPath ) { case PATH_WIN: GetWindowsDirectory( szTemp, ARRAYSIZE(szTemp) ); break;
#ifdef INET_EXP_ICON
case PATH_IEXP: if (g_RunningOnNT) { StrCpyN(szTemp, TEXT("%SystemDrive%"), ARRAYSIZE(szTemp)); } else { GetWindowsDirectory( szTemp, ARRAYSIZE(szTemp) );
// Clear out path after drive, ie: C:
szTemp[ 2 ] = 0; } StrCatBuff(szTemp, c_szIEXP, ARRAYSIZE(szTemp)); break; #endif
case PATH_SYS: default: GetSystemDirectory( szTemp, ARRAYSIZE(szTemp) ); break; }
if (m_pEffectsState) { StrCatBuff(szTemp, sDefaultIcons[m_nIndex].szFile, ARRAYSIZE(szTemp)); StrCpyN(m_pEffectsState->_IconData[m_nIndex].szNewFile, szTemp, ARRAYSIZE(m_pEffectsState->_IconData[m_nIndex].szNewFile)); m_pEffectsState->_IconData[m_nIndex].iNewIndex = sDefaultIcons[m_nIndex].iIndex;
ExtractPlusColorIcon(m_pEffectsState->_IconData[m_nIndex].szNewFile, m_pEffectsState->_IconData[m_nIndex].iNewIndex, &hIcon, 0, 0);
ImageList_ReplaceIcon(g_hIconList, m_nIndex, hIcon); ListView_RedrawItems(g_hWndList, m_nIndex, m_nIndex); bDorked = TRUE; SetFocus(g_hWndList); } } break;
case IDC_KEYBOARDINDICATORS: if (m_pEffectsState) { m_pEffectsState->_fKeyboardIndicators = ((SendMessage((HWND)lParam, BM_GETCHECK, 0, 0) == BST_CHECKED) ? FALSE : TRUE); bDorked = TRUE; } break;
default: break; }
// If the user dorked with a setting, tell the property manager we
// have outstanding changes. This will enable the "Apply Now" button...
if (bDorked) { SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L); }
return fHandled; }
INT_PTR CALLBACK PropertySheetDlgProc(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam) { CEffectsPage * pThis = (CEffectsPage *)GetWindowLongPtr(hDlg, DWLP_USER);
if (WM_INITDIALOG == wMsg) { pThis = (CEffectsPage *) lParam;
if (pThis) { SetWindowLongPtr(hDlg, DWLP_USER, lParam); } }
if (pThis) return pThis->_PropertySheetDlgProc(hDlg, wMsg, wParam, lParam);
return DefWindowProc(hDlg, wMsg, wParam, lParam); }
//---------------------------------------------------------------------------
//
// PropertySheetDlgProc()
//
// The dialog procedure for the "PlusPack" property sheet page.
//
//---------------------------------------------------------------------------
INT_PTR CEffectsPage::_PropertySheetDlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam) { BOOL bDorked = FALSE;
switch( uMessage ) { case WM_INITDIALOG: _OnInit(hDlg); break;
case WM_DESTROY: if (g_fCoInitDone) { CoUninitialize(); g_fCoInitDone = FALSE; } if (g_hmodShell32) { FreeLibrary(g_hmodShell32); g_hmodShell32 = NULL; } break;
case WM_COMMAND: _OnCommand(hDlg, uMessage, wParam, lParam); break;
case WM_NOTIFY: switch( ((NMHDR *)lParam)->code ) { #ifdef CLEARTYPECOMBO
case NM_CLICK: switch (wParam) { case IDC_SHOWME: if (m_pEffectsState) { DWORD dwSmoothingType = m_pEffectsState->_dwFontSmoothingType; BOOL fFontSmoothing = m_pEffectsState->_fFontSmoothing; if (DisplayFontSmoothingDetails(hDlg, &fFontSmoothing, &dwSmoothingType) && ((m_pEffectsState->_dwFontSmoothingType != dwSmoothingType) || (m_pEffectsState->_fFontSmoothing != fFontSmoothing))) { m_pEffectsState->_dwFontSmoothingType = dwSmoothingType; m_pEffectsState->_fFontSmoothing = fFontSmoothing; bDorked = TRUE; SendMessage( GetParent( hDlg ), PSM_CHANGED, (WPARAM)hDlg, 0L );
ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_COMBOFSMOOTH), dwSmoothingType - 1);
if (fFontSmoothing) { EnableWindow(GetDlgItem(hDlg,IDC_COMBOFSMOOTH), TRUE); } else { EnableWindow(GetDlgItem(hDlg,IDC_COMBOFSMOOTH), FALSE); }
SendMessage( (HWND)GetDlgItem( hDlg, IDC_FONTSMOOTH ), BM_SETCHECK, (WPARAM) fFontSmoothing, 0 ); } } break; } break; #endif
case LVN_ITEMCHANGED: // The selection changed in our listview
if( wParam == IDC_ICONS ) { // Find out who's selected now
for( m_nIndex = 0; m_nIndex < NUM_ICONS;m_nIndex++ ) { if( ListView_GetItemState(g_hWndList, m_nIndex, LVIS_SELECTED)) { break; } }
} break;
default: break; } break;
case WM_HELP: { LPHELPINFO lphi = (LPHELPINFO)lParam;
if( lphi->iContextType == HELPINFO_WINDOW ) { WinHelp( (HWND)lphi->hItemHandle, (LPTSTR)g_szHelpFile, HELP_WM_HELP, (DWORD_PTR)((POPUP_HELP_ARRAY FAR *)g_phaHelp)); } } break;
case WM_CONTEXTMENU: // first check for dlg window
if( (HWND)wParam == hDlg ) { // let the def dlg proc decide whether to respond or ignore;
// necessary for title bar sys menu on right click
return FALSE; // didn't process message EXIT
} else { // else go for the controls
WinHelp( (HWND)wParam, (LPTSTR)g_szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)((POPUP_HELP_ARRAY FAR *)g_phaHelp)); } break;
default: return FALSE; } return(TRUE); }
/****************************************************************************
* * FUNCTION: CreateListView(HWND) * * PURPOSE: Creates the list view window and initializes it * ****************************************************************************/ HWND CEffectsPage::_CreateListView(HWND hWndParent) { LV_ITEM lvI; // List view item structure
TCHAR szTemp[MAX_PATH]; BOOL bEnable = FALSE; #ifdef JIGGLE_FIX
RECT rc; #endif
UINT flags = ILC_MASK | ILC_COLOR24; // Create a device independant size and location
LONG lWndunits = GetDialogBaseUnits(); int iWndx = LOWORD(lWndunits); int iWndy = HIWORD(lWndunits); int iX = ((11 * iWndx) / 4); int iY = ((15 * iWndy) / 8); int iWidth = ((163 * iWndx) / 4); int iHeight = ((40 * iWndy) / 8);
// Ensure that the common control DLL is loaded.
InitCommonControls();
// Get the list view window
g_hWndList = GetDlgItem(hWndParent, IDC_ICONS); if(g_hWndList == NULL) return NULL; if(IS_WINDOW_RTL_MIRRORED(hWndParent)) { flags |= ILC_MIRROR; } // initialize the list view window
// First, initialize the image lists we will need
g_hIconList = ImageList_Create( 32, 32, flags, NUM_ICONS, 0 ); // create an image list for the icons
// load the icons and add them to the image lists
// get the icon files and indexes from the registry, including for the Default recycle bin
for (iX = 0; iX < ARRAYSIZE(m_pEffectsState->_IconData); iX++) { HICON hIcon;
ExtractPlusColorIcon(m_pEffectsState->_IconData[iX].szNewFile, m_pEffectsState->_IconData[iX].iNewIndex, &hIcon, 0, 0);
// Added this "if" to fix bug 2831. We want to use SHELL32.DLL
// icon 0 if there is no icon in the file specified in the
// registry (or if the registry didn't specify a file).
if(hIcon == NULL) { GetSystemDirectory(szTemp, ARRAYSIZE(szTemp)); PathAppend(szTemp, TEXT("shell32.dll")); StrCpyN(m_pEffectsState->_IconData[iX].szOldFile, szTemp, ARRAYSIZE(m_pEffectsState->_IconData[iX].szNewFile)); StrCpyN(m_pEffectsState->_IconData[iX].szNewFile, szTemp, ARRAYSIZE(m_pEffectsState->_IconData[iX].szNewFile)); m_pEffectsState->_IconData[iX].iOldIndex = m_pEffectsState->_IconData[iX].iNewIndex = 0;
ExtractPlusColorIcon(szTemp, 0, &hIcon, 0, 0); }
if (ImageList_AddIcon(g_hIconList, hIcon) == -1) { return NULL; } }
// Make sure that all of the icons were added
if( ImageList_GetImageCount(g_hIconList) < NUM_ICONS ) return FALSE;
ListView_SetImageList(g_hWndList, g_hIconList, LVSIL_NORMAL);
// Make sure the listview has WS_HSCROLL set on it.
DWORD dwStyle = GetWindowLong(g_hWndList, GWL_STYLE); SetWindowLong(g_hWndList, GWL_STYLE, (dwStyle & (~WS_VSCROLL)) | WS_HSCROLL);
// Finally, let's add the actual items to the control. Fill in the LV_ITEM
// structure for each of the items to add to the list. The mask specifies
// the the .pszText, .iImage, and .state members of the LV_ITEM structure are valid.
lvI.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE; lvI.state = 0; lvI.stateMask = 0;
for( iX = 0; iX < NUM_ICONS; iX++ ) { TCHAR szAppend[64]; BOOL bRet;
bRet = IconGetRegValueString(c_aIconRegKeys[iX].pclsid, NULL, NULL, szTemp, ARRAYSIZE(szTemp));
// if the title string was in the registry, else we have to use the default in our resources
if( (bRet) && (lstrlen(szTemp) > 0)) { if( LoadString(g_hInst, c_aIconRegKeys[iX].iTitleResource, szAppend, 64) != 0) { StrCatBuff(szTemp, szAppend, ARRAYSIZE(szTemp)); } } else { LoadString(g_hInst, c_aIconRegKeys[iX].iDefaultTitleResource, szTemp, ARRAYSIZE(szTemp)); }
lvI.iItem = iX; lvI.iSubItem = 0; lvI.pszText = szTemp; lvI.iImage = iX;
if(ListView_InsertItem(g_hWndList, &lvI) == -1) return NULL;
} #ifdef JIGGLE_FIX
// To fix long standing listview bug, we need to "jiggle" the listview
// window size so that it will do a recompute and realize that we need a
// scroll bar...
GetWindowRect(g_hWndList, &rc); MapWindowPoints( NULL, hWndParent, (LPPOINT)&rc, 2 ); MoveWindow(g_hWndList, rc.left, rc.top, rc.right - rc.left+1, rc.bottom - rc.top, FALSE ); MoveWindow(g_hWndList, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, FALSE ); #endif
// Set First item to selected
ListView_SetItemState (g_hWndList, 0, LVIS_SELECTED, LVIS_SELECTED);
// Get Selected item
for (m_nIndex = 0; m_nIndex < NUM_ICONS; m_nIndex++) { if (ListView_GetItemState(g_hWndList, m_nIndex, LVIS_SELECTED)) { bEnable = TRUE; break; } }
EnableWindow( GetDlgItem( hWndParent, IDC_CHANGEICON ), bEnable ); EnableWindow( GetDlgItem( hWndParent, IDC_ICONDEFAULT ), bEnable );
return g_hWndList; }
HRESULT CEffectsPage::_IsDirty(IN BOOL * pIsDirty) { HRESULT hr = E_INVALIDARG;
if (pIsDirty && m_pEffectsState) { // Ask state if it's dirty
*pIsDirty = m_pEffectsState->IsDirty(); hr = S_OK; }
return hr; }
//===========================
// *** IAdvancedDialog Interface ***
//===========================
HRESULT CEffectsPage::DisplayAdvancedDialog(IN HWND hwndParent, IN IPropertyBag * pBasePage, IN BOOL * pfEnableApply) { HRESULT hr = E_INVALIDARG;
if (hwndParent && pBasePage && pfEnableApply) { // Load State Into Advanced Dialog
if (m_pEffectsState) { delete m_pEffectsState; m_pEffectsState = NULL; }
*pfEnableApply = FALSE; CEffectState * pEffectClone;
hr = SHPropertyBag_ReadByRef(pBasePage, SZ_PBPROP_EFFECTSSTATE, (void *)&pEffectClone, sizeof(pEffectClone)); if (SUCCEEDED(hr)) { // We want a copy of their state
hr = pEffectClone->Clone(&m_pEffectsState); if (SUCCEEDED(hr)) { LinkWindow_RegisterClass();
// Display Advanced Dialog
if (IDOK == DialogBoxParam(g_hInst, MAKEINTRESOURCE(PROP_SHEET_DLG), hwndParent, PropertySheetDlgProc, (LPARAM)this)) { // The user clicked OK, so merge modified state back into base dialog
_IsDirty(pfEnableApply);
// The user clicked Okay in the dialog so merge the dirty state from the
// advanced dialog into the base dialog.
hr = SHPropertyBag_WriteByRef(pBasePage, SZ_PBPROP_EFFECTSSTATE, (void *)m_pEffectsState); m_pEffectsState = NULL; } }
LinkWindow_UnregisterClass(g_hInst); } }
return hr; }
//===========================
// *** IUnknown Interface ***
//===========================
ULONG CEffectsPage::AddRef() { m_cRef++; return m_cRef; }
ULONG CEffectsPage::Release() { Assert(m_cRef > 0); m_cRef--;
if (m_cRef > 0) return m_cRef;
delete this; return 0; }
HRESULT CEffectsPage::QueryInterface(REFIID riid, void **ppvObj) { HRESULT hr = E_NOINTERFACE;
static const QITAB qit[] = { QITABENT(CEffectsPage, IObjectWithSite), QITABENT(CEffectsPage, IAdvancedDialog), { 0 }, };
return QISearch(this, qit, riid, ppvObj); }
//===========================
// *** Class Methods ***
//===========================
CEffectsPage::CEffectsPage() : m_cRef(1) { // This needs to be allocated in Zero Inited Memory.
// Assert that all Member Variables are inited to Zero.
m_fDirty = FALSE; }
CEffectsPage::~CEffectsPage() { if (m_pEffectsState) { delete m_pEffectsState; } }
HRESULT CEffectsPage_CreateInstance(OUT IAdvancedDialog ** ppAdvDialog) { HRESULT hr = E_INVALIDARG;
if (ppAdvDialog) { CEffectsPage * pThis = new CEffectsPage();
if (pThis) { hr = pThis->QueryInterface(IID_PPV_ARG(IAdvancedDialog, ppAdvDialog)); pThis->Release(); } else { *ppAdvDialog = NULL; hr = E_OUTOFMEMORY; } }
return hr; }
#ifdef CLEARTYPECOMBO
static void EnableDlgChild( HWND dlg, HWND kid, BOOL val ) { if( !val && ( kid == GetFocus() ) ) { // give prev tabstop focus
SendMessage( dlg, WM_NEXTDLGCTL, 1, 0L ); }
EnableWindow( kid, val ); }
static void EnableDlgItem( HWND dlg, int idkid, BOOL val ) { EnableDlgChild( dlg, GetDlgItem( dlg, idkid ), val ); }
#define TEXTEDGE_CLASS TEXT("TextEdge")
#define SZ_SAMPLETEXT TEXT("The quick brown fox jumps over the lazy dog")
void ShowTextRedraw(HWND hDlg) { HWND hWnd;
hWnd = GetDlgItem(hDlg, IDC_TEXTSAMPLE);
InvalidateRgn (hWnd, NULL, TRUE); }
// Handle to the DLL
extern HINSTANCE g_hInst;
void GetFontInfo(HWND hDlg) { BOOL bOldSF = FALSE; BOOL bOldCT = FALSE; CheckDlgButton(hDlg, IDC_MONOTEXT, FALSE); CheckDlgButton(hDlg, IDC_AATEXT, FALSE); CheckDlgButton(hDlg, IDC_CTTEXT, FALSE);
if (g_ulFontInformation) { if (g_ulFontInformation == FONT_SMOOTHING_AA) { CheckDlgButton(hDlg, IDC_AATEXT, TRUE); } else if (g_ulFontInformation == FONT_SMOOTHING_CT) { CheckDlgButton(hDlg, IDC_CTTEXT, TRUE); }
CheckDlgButton(hDlg, IDC_MONOTEXT, TRUE); } else { CheckDlgButton(hDlg, IDC_MONOTEXT, FALSE); EnableDlgItem(hDlg,IDC_AATEXT,FALSE); EnableDlgItem(hDlg,IDC_CTTEXT,FALSE); EnableDlgItem(hDlg,IDC_AASHOW,FALSE); EnableDlgItem(hDlg,IDC_CTSHOW,FALSE); }
g_ulNewFontInformation = g_ulFontInformation; }
HRESULT Text_OnCommand(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { BOOL fHandled = 1; // Not handled (WM_COMMAND seems to be different)
WORD idCtrl = GET_WM_COMMAND_ID(wParam, lParam); WORD wEvent = GET_WM_COMMAND_CMD(wParam, lParam); BOOL bDorked = FALSE;
switch (idCtrl) { case IDC_MONOTEXT: if (wEvent == BN_CLICKED) { if (IsDlgButtonChecked(hDlg, IDC_MONOTEXT)) { EnableDlgItem(hDlg, IDC_AATEXT,TRUE); EnableDlgItem(hDlg, IDC_CTTEXT,TRUE); EnableDlgItem(hDlg, IDC_AASHOW,TRUE); EnableDlgItem(hDlg, IDC_CTSHOW,TRUE);
CheckDlgButton(hDlg, IDC_AATEXT, FALSE); CheckDlgButton(hDlg, IDC_CTTEXT, FALSE);
if (g_ulFontInformation == FONT_SMOOTHING_AA) { CheckDlgButton(hDlg, IDC_AATEXT, TRUE); g_ulNewFontInformation = FONT_SMOOTHING_AA; } else if (g_ulFontInformation == FONT_SMOOTHING_CT) { CheckDlgButton(hDlg, IDC_CTTEXT, TRUE); g_ulNewFontInformation = FONT_SMOOTHING_CT; } else { CheckDlgButton(hDlg, IDC_AATEXT, TRUE); g_ulNewFontInformation = FONT_SMOOTHING_AA; } } else { EnableDlgItem(hDlg,IDC_AATEXT,FALSE); EnableDlgItem(hDlg,IDC_CTTEXT,FALSE); EnableDlgItem(hDlg,IDC_AASHOW,FALSE); EnableDlgItem(hDlg,IDC_CTSHOW,FALSE); g_ulNewFontInformation = 0; }
bDorked = TRUE; } break; case IDC_AATEXT: case IDC_CTTEXT: if (wEvent == BN_CLICKED) { ULONG ulFontInformation;
ulFontInformation = 0; if ( LOWORD(wParam) == IDC_AATEXT) ulFontInformation = FONT_SMOOTHING_AA; else if ( LOWORD(wParam) == IDC_CTTEXT) ulFontInformation = FONT_SMOOTHING_CT; if (ulFontInformation != g_ulNewFontInformation) { g_ulNewFontInformation = ulFontInformation; bDorked = TRUE; } } break; default: break; }
// If the user dorked with a setting, tell the property manager we
// have outstanding changes. This will enable the "Apply Now" button...
if (bDorked) { ShowTextRedraw(hDlg); SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L); bDorked = FALSE; }
return fHandled; }
//---------------------------------------------------------------------------
//
// TextEdgeDlgProc()
//
// The dialog procedure for the "TextEdge" property sheet page.
//
//---------------------------------------------------------------------------
INT_PTR CALLBACK TextEdgeDlgProc( HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam ) { LPPROPSHEETPAGE psp = (LPPROPSHEETPAGE)GetWindowLongPtr( hDlg, DWLP_USER ); static int iIndex, iX; static TCHAR szHelpFile[32];
switch( uMessage ) { case WM_INITDIALOG: // Need to add some code for help, but it is later.
GetFontInfo(hDlg); break;
case WM_DESTROY: break;
case WM_COMMAND: Text_OnCommand(hDlg, uMessage, wParam, lParam); break;
case WM_NOTIFY: switch( ((NMHDR *)lParam)->code ) { case PSN_APPLY: // OK or Apply clicked
{ HDC hDC = GetDC( NULL );
break; } case PSN_RESET: g_ulNewFontInformation = g_ulFontInformation; break; default: break; } break;
default: return FALSE; } return(TRUE); }
void ShowTextSample(HWND hWnd) { HFONT hfont; HFONT hfontT; RECT rc; LOGFONT lf; HDC hdc; SIZE TextExtent; INT yPos; INT i, j, k, tmp; INT LogPixelY; INT yHeight;
hdc = GetDC(hWnd);
GetWindowRect(hWnd, &rc);
yHeight = (rc.bottom - rc.top) / 2;
ZeroMemory (&lf, sizeof(LOGFONT));
LogPixelY = GetDeviceCaps(hdc, LOGPIXELSY);
// This code can put on WM_CREATE
SetTextAlign(hdc, TA_LEFT| TA_TOP);
lf.lfPitchAndFamily = FF_ROMAN | VARIABLE_PITCH; lstrcpy(lf.lfFaceName, TEXT("Times New Roman"));
i = (8 * LogPixelY + 36) / 72; // initial ppem size
j = (4 * LogPixelY + 36) / 72; // pixel size increment
if (g_ulNewFontInformation == FONT_SMOOTHING_AA) { lf.lfQuality = ANTIALIASED_QUALITY; } else if (g_ulNewFontInformation == FONT_SMOOTHING_CT) { lf.lfQuality = CLEARTYPE_QUALITY; } else { lf.lfQuality = NONANTIALIASED_QUALITY ; }
yPos = 2; tmp = i;
for (k = 0; k < 4; k++, i=i+j) { INT yNext;
lf.lfHeight = -i; hfont = CreateFontIndirect(&lf); hfontT = (HFONT)SelectObject(hdc, hfont); GetTextExtentPoint(hdc, SZ_SAMPLETEXT, lstrlen(SZ_SAMPLETEXT), &TextExtent); yNext = yPos + TextExtent.cy;
if (yNext > yHeight) { break; } ExtTextOut(hdc, 2, yPos, 0, &rc, SZ_SAMPLETEXT, lstrlen(SZ_SAMPLETEXT), NULL); yPos = yNext; SelectObject(hdc, hfontT); DeleteObject(hfont); }
yPos = yHeight + 2;
yHeight = (rc.bottom - rc.top);
i = tmp;
lf.lfItalic = TRUE;
for (k = 0; k < 4; k++, i=i+j) { INT yNext;
lf.lfHeight = -i; hfont = CreateFontIndirect(&lf); hfontT = (HFONT)SelectObject(hdc, hfont); GetTextExtentPoint(hdc, SZ_SAMPLETEXT, lstrlen(SZ_SAMPLETEXT), &TextExtent); yNext = yPos + TextExtent.cy;
if (yNext > yHeight) { break; }
ExtTextOut(hdc, 2, yPos, 0, &rc, SZ_SAMPLETEXT, lstrlen(SZ_SAMPLETEXT), NULL); yPos = yNext; SelectObject(hdc, hfontT); DeleteObject(hfont); }
ReleaseDC(hWnd, hdc); }
LRESULT CALLBACK TextEdgeWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps;
switch(message) { case WM_CREATE: break;
case WM_DESTROY: break;
case WM_PALETTECHANGED: break; //fallthru
case WM_QUERYNEWPALETTE: break;
case WM_PAINT: BeginPaint(hWnd,&ps); ShowTextSample(hWnd); EndPaint(hWnd,&ps); return 0; } return DefWindowProc(hWnd,message,wParam,lParam); }
BOOL RegisterTextEdgeClass(void) { WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = TextEdgeWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = g_hInst; wc.hIcon = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = TEXTEDGE_CLASS;
if (!RegisterClass(&wc)) return FALSE;
return TRUE; }
BOOL DisplayFontSmoothingDetails(HWND hWnd, BOOL* pfFontSmoothing, DWORD *pdwSmoothingType) { BOOL bRet = TRUE;
PROPSHEETPAGE apsp[1]; PROPSHEETHEADER psh;
RegisterTextEdgeClass();
psh.nStartPage = 0;
psh.dwSize = sizeof(psh);
//
// Disable Apply button
//
psh.dwFlags = PSH_PROPTITLE | PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW;
psh.hwndParent = hWnd; psh.hInstance = g_hInst; psh.pszIcon = NULL;
//
// psh.nStartPage is set above.
//
psh.pszCaption = MAKEINTRESOURCE(IDS_TEXTPROP); psh.nPages = 1; psh.ppsp = apsp;
apsp[0].dwSize = sizeof(PROPSHEETPAGE); apsp[0].dwFlags = PSP_DEFAULT; apsp[0].hInstance = g_hInst; apsp[0].pszTemplate = MAKEINTRESOURCE(DLG_TEXTEDGE); apsp[0].pfnDlgProc = TextEdgeDlgProc; apsp[0].lParam = 0;
if (*pfFontSmoothing) { g_ulFontInformation = *pdwSmoothingType; } else { g_ulFontInformation = 0; }
if (psh.nStartPage >= psh.nPages) { psh.nStartPage = 0; }
if (PropertySheet(&psh) != -1) bRet = FALSE;
if (g_ulNewFontInformation == 0) { *pfFontSmoothing = FALSE; } else { *pfFontSmoothing = TRUE; *pdwSmoothingType = (DWORD) g_ulNewFontInformation; }
return TRUE; } #endif // CLEARTYPECOMBO
#include "..\common\propsext.cpp"
|