//---------------------------------------------------------------------------- // // Copyright (c) 1997-1999 Microsoft Corporation // All rights reserved. // // File Name: // setupmgr.c // // Description: // This file has the setupmgr manager function that gets the wizard going. // //---------------------------------------------------------------------------- #define _SMGR_DECLARE_GLOBALS_ #include #include "setupmgr.h" #include "allres.h" // // Local prototypes // static VOID SetupFonts(IN HINSTANCE hInstance, IN HWND hwnd, IN HFONT *pBigBoldFont, IN HFONT *pBoldFont); static VOID DestroyFonts(IN HFONT hBigBoldFont, IN HFONT hBoldFont); static BOOL VerifyVersion(VOID); //---------------------------------------------------------------------------- // // Function: setupmgr // // Purpose: This is the only export from setupmgr.dll. The stub loader // calls this function iff we're running on Windows Whistler. Note // that DllMain() runs before this function is called. // //---------------------------------------------------------------------------- int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // Zero out the global data. // ZeroMemory(&g_App, sizeof(GAPP)); // This function checks to make sure that we are running the correct OS/Version // if (!VerifyVersion()) return 1; // // Sets the locale to the default, which is the system-default ANSI code // page obtained from the operating system // setlocale(LC_CTYPE, ""); // Set up the hInstance for the application // FixedGlobals.hInstance = hInstance; SetupFonts(FixedGlobals.hInstance, NULL, &FixedGlobals.hBigBoldFont, &FixedGlobals.hBoldFont); InitTheWizard(); StartWizard(hInstance, lpCmdLine); DestroyFonts(FixedGlobals.hBigBoldFont, FixedGlobals.hBoldFont); return 0; } //---------------------------------------------------------------------------- // // Function: SetupFonts // // Purpose: This function creates a BoldFont and a BigBoldFont and saves // handles to these in global vars. // //---------------------------------------------------------------------------- static VOID SetupFonts(IN HINSTANCE hInstance, IN HWND hwnd, IN HFONT *pBigBoldFont, IN HFONT *pBoldFont) { NONCLIENTMETRICS ncm = {0}; LOGFONT BigBoldLogFont = ncm.lfMessageFont; LOGFONT BoldLogFont = ncm.lfMessageFont; TCHAR FontSizeString[MAX_PATH], FontSizeSmallString[MAX_PATH]; INT FontSize, FontSizeSmall; HDC hdc = GetDC( hwnd ); // // Create the fonts we need based on the dialog font // // ISSUE-2002/02/28-stelo- Variable ncm is not being used any where ncm.cbSize = sizeof(ncm); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); // // Create Big Bold Font and Bold Font // BigBoldLogFont.lfWeight = FW_BOLD; BoldLogFont.lfWeight = FW_BOLD; // // Load size and name from resources, since these may change // from locale to locale based on the size of the system font, etc. // if(!LoadString(hInstance,IDS_LARGEFONTNAME,BigBoldLogFont.lfFaceName,LF_FACESIZE)) { lstrcpyn(BigBoldLogFont.lfFaceName,TEXT("MS Shell Dlg"),AS(BigBoldLogFont.lfFaceName)); } if(LoadString(hInstance,IDS_LARGEFONTSIZE,FontSizeString,sizeof(FontSizeString)/sizeof(TCHAR))) { FontSize = _tcstoul( FontSizeString, NULL, 10 ); } else { FontSize = 12; } // Load the smaller sized font settings // if(!LoadString(hInstance,IDS_SMALLFONTNAME,BoldLogFont.lfFaceName,LF_FACESIZE)) { lstrcpyn(BoldLogFont.lfFaceName,TEXT("MS Shell Dlg"),AS(BoldLogFont.lfFaceName)); } if(LoadString(hInstance,IDS_SMALLFONTSIZE,FontSizeSmallString,sizeof(FontSizeSmallString)/sizeof(TCHAR))) { FontSizeSmall = _tcstoul( FontSizeSmallString, NULL, 10 ); } else { FontSizeSmall = 12; } if( hdc ) { BigBoldLogFont.lfHeight = 0 - (GetDeviceCaps(hdc,LOGPIXELSY) * FontSize / 72); BoldLogFont.lfHeight = 0 - (GetDeviceCaps(hdc,LOGPIXELSY) * FontSizeSmall / 72); *pBigBoldFont = CreateFontIndirect(&BigBoldLogFont); *pBoldFont = CreateFontIndirect(&BoldLogFont); ReleaseDC(hwnd,hdc); } } //---------------------------------------------------------------------------- // // Function: DestroyFonts // // Purpose: Frees up the space used by loading the fonts // //---------------------------------------------------------------------------- static VOID DestroyFonts(IN HFONT hBigBoldFont, IN HFONT hBoldFont) { if( hBigBoldFont ) { DeleteObject( hBigBoldFont ); } if( hBoldFont ) { DeleteObject( hBoldFont ); } } //---------------------------------------------------------------------------- // // Function: VerifyVersion // // Purpose: Verifies that we are running on the correct Operating System // If we are not running on a supported OS, this function prompts // the user and returns FALSE // //---------------------------------------------------------------------------- static BOOL VerifyVersion(VOID) { OSVERSIONINFOEXA osVersionInfo; BOOL bResult = FALSE; // Clean up the memory // ZeroMemory(&osVersionInfo, sizeof(osVersionInfo)); osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); // This condition checks for the following: // Are we able to get system information // Are we running on NT // Is our version NT4 and Service Pack 5 or greater // if (GetVersionExA((LPOSVERSIONINFOA) &osVersionInfo)) { if (osVersionInfo.dwPlatformId & VER_PLATFORM_WIN32_NT) { g_App.dwOsVer = MAKELONG(MAKEWORD(LOBYTE(osVersionInfo.wServicePackMajor), LOBYTE(LOWORD(osVersionInfo.dwMinorVersion))), LOWORD(osVersionInfo.dwMajorVersion)); if ( g_App.dwOsVer > OS_NT4_SP5 ) { bResult = TRUE; } else { // The OS is a non-supported NT platform, error out // MsgBox(NULL, IDS_ERROR_VERSION, IDS_APPNAME, MB_ERRORBOX); } } else { // The OS is a 9x platform, we must error out // CHAR szMessage[MAX_PATH], szTitle[MAX_PATH]; LoadStringA(NULL, IDS_ERROR_VERSION, szMessage, STRSIZE(szMessage)); LoadStringA(NULL, IDS_APPNAME, szTitle, STRSIZE(szTitle)); MessageBoxA(NULL, szMessage, szTitle, MB_ERRORBOX); } } return bResult; }