//+-------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1994 - 1999. // // File: AdvDep.cpp // // Contents: addvanced deployment settings dialog // // Classes: // // Functions: // // History: 01-28-1999 stevebl Created // //--------------------------------------------------------------------------- #include "precomp.hxx" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAdvDep dialog CAdvDep::CAdvDep(CWnd* pParent /*=NULL*/) : CDialog(CAdvDep::IDD, pParent) { //{{AFX_DATA_INIT(CAdvDep) m_fIgnoreLCID = FALSE; m_fInstallOnAlpha = FALSE; m_f32On64 = FALSE; m_szProductCode = _T(""); m_szDeploymentCount = _T(""); m_szScriptName = _T(""); m_fIncludeOLEInfo = FALSE; //}}AFX_DATA_INIT } void CAdvDep::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAdvDep) DDX_Check(pDX, IDC_CHECK1, m_fIgnoreLCID); DDX_Check(pDX, IDC_CHECK3, m_fUninstallUnmanaged); DDX_Check(pDX, IDC_CHECK4, m_fIncludeOLEInfo); DDX_Check(pDX, IDC_CHECK2, m_f32On64); DDX_Text(pDX, IDC_STATIC1, m_szProductCode); DDX_Text(pDX, IDC_STATIC2, m_szDeploymentCount); DDX_Text(pDX, IDC_STATIC3, m_szScriptName); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAdvDep, CDialog) //{{AFX_MSG_MAP(CAdvDep) ON_WM_CONTEXTMENU() //}}AFX_MSG_MAP END_MESSAGE_MAP() int FindBreak(CString &sz) { int iReturn = sz.ReverseFind(L'\\'); int i2 = sz.ReverseFind(L' '); if (i2 > iReturn) { iReturn = i2; } return iReturn; } BOOL CAdvDep::OnInitDialog() { BOOL fIntel = FALSE; GetDlgItem(IDC_CHECK4)->EnableWindow(FALSE); // // The include COM information flag is not supported by RSoP // so in RSoP mode, we will hide this control // if ( m_pDeploy->m_fRSOP ) { GetDlgItem( IDC_CHECK4 )->ShowWindow( SW_HIDE ); } #if 0 if (m_pDeploy->m_pData->m_pDetails->pInstallInfo->PathType != SetupNamePath) { // this is NOT a legacy app #endif if (m_pDeploy->m_fPreDeploy) { // and we're in pre-deploy mode - enable the extensions only field GetDlgItem(IDC_CHECK4)->EnableWindow(TRUE); } #if 0 } #endif // search for an Intel processor code int nPlatforms = m_pDeploy->m_pData->m_pDetails->pPlatformInfo->cPlatforms; while (nPlatforms--) { if (m_pDeploy->m_pData->m_pDetails->pPlatformInfo-> prgPlatform[nPlatforms].dwProcessorArch == PROCESSOR_ARCHITECTURE_INTEL) { fIntel = TRUE; } } // GetDlgItem(IDC_CHECK2)->EnableWindow(fIntel); CString sz; if (m_pDeploy->m_fMachine) { sz.LoadString(IDS_ADVANCEDMACHINES); } else { sz.LoadString(IDS_ADVANCEDUSERS); } if (m_pDeploy->m_pData->Is64Bit()) { GetDlgItem(IDC_CHECK2)->EnableWindow(FALSE); GetDlgItem(IDC_CHECK2)->ShowWindow(SW_HIDE); } else { GetDlgItem(IDC_CHECK2)->EnableWindow(TRUE); GetDlgItem(IDC_CHECK2)->ShowWindow(SW_SHOW); } // // In the past, we allowed administrators to optionally specify // that unmanaged installs should be removed for per-user non-admin // installs. Due to security issues, it is clear that the // behavior should not be configurable, that the client // should transparently make the decision. For this reason, // we hide this option in the ui below, and note that // we leave the resource in the executable so that // test code will not be broken by a resource change at this // stage in the project -- this resource should be removed altogether // in the next release // GetDlgItem(IDC_CHECK3)->EnableWindow(FALSE); GetDlgItem(IDC_CHECK3)->ShowWindow(SW_HIDE); if (m_pDeploy->m_fRSOP) { // disable EVERYTHING GetDlgItem(IDC_CHECK1)->EnableWindow(FALSE); GetDlgItem(IDC_CHECK3)->EnableWindow(FALSE); GetDlgItem(IDC_CHECK2)->EnableWindow(FALSE); GetDlgItem(IDC_CHECK4)->EnableWindow(FALSE); } #if 0 // Insert spaces after each directory in the script path to allow the // static control to split the path over multiple lines. // (Without whitespace the control won't split the path up and it // will be unreadable.) CString szPath = m_szScriptName; int ich; m_szScriptName = ""; while (0 <= (ich = szPath.FindOneOf(TEXT("\\/")))) { m_szScriptName += szPath.Left(ich+1); if (ich > 0) { m_szScriptName += " "; } szPath = szPath.Mid(ich+1); } m_szScriptName += szPath; #else // split the path so it will fit in the control RECT rect; CWnd * pwndStatic = GetDlgItem(IDC_STATIC3); pwndStatic->GetClientRect(&rect); DWORD dwControl = rect.right-rect.left; CString szPath = m_szScriptName; m_szScriptName = ""; CDC * pDC = pwndStatic->GetDC(); CSize size = pDC->GetTextExtent(szPath); pDC->LPtoDP(&size); int ich; while (size.cx >= dwControl) { ich = FindBreak(szPath); if (ich <= 0) { // there's no where else to break this string break; } else { // break off the front of the string CString szFront; do { szFront = szPath.Left(ich); size = pDC->GetTextExtent(szFront); pDC->LPtoDP(&size); ich = FindBreak(szFront); } while (ich > 0 && size.cx >= dwControl); m_szScriptName += szFront; m_szScriptName += L'\n'; szPath = szPath.Mid(szFront.GetLength()); } size = pDC->GetTextExtent(szPath); pDC->LPtoDP(&size); } m_szScriptName += szPath; pwndStatic->ReleaseDC(pDC); #endif CDialog::OnInitDialog(); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CAdvDep message handlers void CAdvDep::OnContextMenu(CWnd* pWnd, CPoint point) { StandardContextMenu(pWnd->m_hWnd, IDD_ADVDEP); } LRESULT CAdvDep::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_HELP: StandardHelp((HWND)((LPHELPINFO) lParam)->hItemHandle, IDD); return 0; default: return CDialog::WindowProc(message, wParam, lParam); } }