//------------------------------------------------------------------- // // FILE: Config.cpp // // Summary; // This file contains the dialog proc for IDD_CPADLG_LCACONF // // History; // Feb-06-95 ChandanS Created // Mar-14-95 MikeMi Added F1 Message Filter and PWM_HELP message // Mar-30-95 MikeMi Added Replication Help Context // Dec-15-95 JeffParh Disallowed local server as own enterprise server. // Feb-28-96 JeffParh Moved from private cpArrow window class to // Up-Down common ctrl, in the process fixing the // multi-colored background problems // Apr-17-96 JeffParh Imported variable definitions that were in the // config.hpp header file. // //------------------------------------------------------------------- #include #include #include "resource.h" #include #include #include #include #include "liccpa.hpp" #include "config.hpp" extern "C" { #include #include INT_PTR CALLBACK dlgprocLICCPACONFIG( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); } static BOOL OnEnSetFocus( HWND hwndDlg, short nID ); static BOOL OnDeltaPosSpinTime( HWND hwndDlg, NM_UPDOWN * pnmud ); static HBRUSH OnCtlColorStatic( HWND hwndDlg, HDC hDC, HWND hwndStatic ); DWORD HOUR_MIN = HOUR_MIN_24; DWORD HOUR_MAX = HOUR_MAX_24; DWORD HOUR_PAGE = HOUR_PAGE_24; SERVICEPARAMS ServParams; static PSERVICEPARAMS pServParams = &ServParams; // JBP 96/04/17 : This #ifdef should not be necessary; the default is only used // in the event that GetLocalInfo() fails. // // #ifdef JAPAN // INTLSTRUCT IntlDefault = { 1, // 0, // TEXT(""), // TEXT(""), // TEXT(":") // }; // #else INTLSTRUCT IntlDefault = { 0, 0, TEXT("AM"), TEXT("PM"), TEXT(":") }; // #endif INTLSTRUCT IntlCurrent; //------------------------------------------------------------------- // Function: GetLocaleValue // // Summary: // // In: // lcid : // lcType : // pszStr : // size : // pszDefault : // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- int GetLocaleValue( LCID lcid, LCTYPE lcType, WCHAR *pszStr, int size, LPWSTR pszDefault ) { /* * Initialize the output buffer. */ *pszStr = (WCHAR) 0; /* * Get the locale information. */ if (!GetLocaleInfo ( lcid, lcType, pszStr, size )) { /* * Couldn't get info from GetLocaleInfo. */ if (pszDefault) { /* * Return the default info. */ lstrcpy (pszStr, pszDefault); } else { /* * Return error. */ return (-1); } } /* * Convert the string to an integer and return the result. * This will only be used by the caller of this routine when * appropriate. */ return ( _wtoi(pszStr) ); } //------------------------------------------------------------------- // Function: TimeInit // // Summary: // // In: // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- VOID TimeInit() { WCHAR szTemp[128]; GetLocaleValue (0, LOCALE_STIME, IntlCurrent.szTime, sizeof(IntlCurrent.szTime), IntlDefault.szTime); GetLocaleValue (0, LOCALE_ITLZERO, szTemp, sizeof(szTemp)/sizeof(TCHAR), TEXT("0")); IntlCurrent.iTLZero = _wtoi(szTemp); GetLocaleValue (0, LOCALE_ITIME, szTemp, sizeof(szTemp)/sizeof(TCHAR), TEXT("0")); IntlCurrent.iTime = _wtoi(szTemp); if (!IntlCurrent.iTime) { GetLocaleValue (0, LOCALE_S1159, IntlCurrent.sz1159, sizeof(IntlCurrent.sz1159), IntlDefault.sz1159); GetLocaleValue (0, LOCALE_S2359, IntlCurrent.sz2359, sizeof(IntlCurrent.sz2359), IntlDefault.sz2359); HOUR_MIN = HOUR_MIN_12; HOUR_MAX = HOUR_MAX_12; HOUR_PAGE = HOUR_PAGE_12; } } //------------------------------------------------------------------- // Function: ReadRegistry // // Summary: // Opens the registry & reads in the key values // // In: // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- LONG ReadRegistry() { DWORD dwDisposition; LONG lrt; BOOL fNew; HKEY hKey; fNew = FALSE; lrt = ::RegCreateKeyEx( HKEY_LOCAL_MACHINE, szLicenseKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition ); if ((ERROR_SUCCESS == lrt) && (REG_CREATED_NEW_KEY == dwDisposition) ) { fNew = TRUE; // Set normal values // lrt = ::RegSetValueEx( hKey, szUseEnterprise, 0, REG_DWORD, (PBYTE)&dwUseEnterprise, sizeof( DWORD ) ); if (ERROR_SUCCESS == lrt) { lrt = ::RegSetValueEx( hKey, szReplicationType, 0, REG_DWORD, (PBYTE)&dwReplicationType, sizeof( DWORD ) ); if (ERROR_SUCCESS == lrt) { lrt = ::RegSetValueEx( hKey, szReplicationTime, 0, REG_DWORD, (PBYTE)&dwReplicationTimeInSec, // In seconds sizeof( DWORD ) ); if (ERROR_SUCCESS == lrt) { WCHAR szNull[] = L""; lrt = ::RegSetValueEx( hKey, szEnterpriseServer, 0, REG_SZ, (PBYTE)szNull, sizeof(WCHAR)); } } } } if (ERROR_SUCCESS == lrt) { // read values into pServParams DWORD dwSize = sizeof( DWORD ); DWORD dwRegType = REG_DWORD; lrt = ::RegQueryValueEx( hKey, (LPWSTR)szUseEnterprise, 0, &dwRegType, (PBYTE)&(pServParams->dwUseEnterprise), &dwSize ); if (lrt == REG_OPENED_EXISTING_KEY) { lrt = ::RegSetValueEx( hKey, szUseEnterprise, 0, REG_DWORD, (PBYTE)&dwUseEnterprise, sizeof( DWORD ) ); pServParams->dwUseEnterprise = dwUseEnterprise; } else if ((dwRegType != REG_DWORD) || (dwSize != sizeof( DWORD )) ) { lrt = ERROR_BADDB; } if (!lrt ) { dwSize = sizeof( DWORD ); dwRegType = REG_DWORD; lrt = ::RegQueryValueEx( hKey, (LPWSTR)szReplicationType, 0, &dwRegType, (PBYTE)&(pServParams->dwReplicationType), &dwSize ); if (lrt == REG_OPENED_EXISTING_KEY) { lrt = ::RegSetValueEx( hKey, szReplicationType, 0, REG_DWORD, (PBYTE)&dwReplicationType, sizeof(DWORD)); pServParams->dwReplicationType = dwReplicationType; } else if ( lrt || (dwRegType != REG_DWORD) || (dwSize != sizeof( DWORD )) ) { lrt = ERROR_BADDB; } if (!lrt) { dwSize = sizeof( DWORD ); dwRegType = REG_DWORD; lrt = ::RegQueryValueEx( hKey, (LPWSTR)szReplicationTime, 0, &dwRegType, (PBYTE)&(pServParams->dwReplicationTime), &dwSize ); if (lrt == REG_OPENED_EXISTING_KEY) { lrt = ::RegSetValueEx( hKey, szReplicationTime, 0, REG_DWORD, (PBYTE)&dwReplicationTimeInSec, sizeof(DWORD)); pServParams->dwReplicationTime = dwReplicationTimeInSec; } else if ( (dwRegType != REG_DWORD) || (dwSize != sizeof( DWORD )) ) { lrt = ERROR_BADDB; } if (!lrt) { dwRegType = REG_SZ; lrt = RegQueryValueEx( hKey, (LPWSTR)szEnterpriseServer, 0, &dwRegType, (PBYTE)NULL, //request for size &dwSize ); if (lrt == REG_OPENED_EXISTING_KEY) { WCHAR szNull[] = L""; lrt = ::RegSetValueEx( hKey, szEnterpriseServer, 0, REG_SZ, (PBYTE)szNull, sizeof(WCHAR)); pServParams->pszEnterpriseServer = (LPWSTR)GlobalAlloc(GPTR, (wcslen(szNull) + 1) * sizeof(WCHAR)); wcscpy(pServParams->pszEnterpriseServer, szNull); } else if (dwRegType != REG_SZ) { lrt = ERROR_BADDB; } else { pServParams->pszEnterpriseServer = (LPWSTR) GlobalAlloc(GPTR, dwSize); if (pServParams->pszEnterpriseServer) { lrt = ::RegQueryValueEx( hKey, (LPWSTR)szEnterpriseServer, 0, &dwRegType, (PBYTE)(pServParams->pszEnterpriseServer), &dwSize ); if ( (dwRegType != REG_SZ) || (dwSize != (wcslen(pServParams->pszEnterpriseServer ) + 1) * sizeof(WCHAR))) { lrt = ERROR_BADDB; } } else { lrt = ERROR_BADDB; } } } } } } if (hKey && lrt == ERROR_SUCCESS) { // Init the globals if (pServParams->dwReplicationType) { DWORD dwTemp = pServParams->dwReplicationTime; pServParams->dwHour = dwTemp / (60 * 60); pServParams->dwMinute = (dwTemp - (pServParams->dwHour * 60 * 60)) / 60; pServParams->dwSecond = dwTemp - (pServParams->dwHour * 60 * 60) - (pServParams->dwMinute * 60); if (!IntlCurrent.iTime) { // it's in 12 hour format if (pServParams->dwHour > 12) { pServParams->fPM = TRUE; pServParams->dwHour -= 12; } else if (pServParams->dwHour == 12) { pServParams->fPM = TRUE; } else { if (pServParams->dwHour == 0) pServParams->dwHour = HOUR_MAX; pServParams->fPM = FALSE; } } } else { pServParams->dwReplicationTime = pServParams->dwReplicationTime / (60 * 60); if (!IntlCurrent.iTime) // it's in 12 hour format pServParams->dwHour = HOUR_MAX; else pServParams->dwHour = HOUR_MIN; pServParams->dwMinute = MINUTE_MIN; pServParams->dwSecond = SECOND_MIN; pServParams->fPM = FALSE; } return (RegCloseKey(hKey)); } else if (hKey) RegCloseKey(hKey); return( lrt ); } //------------------------------------------------------------------- // Function: ConfigAccessOk // // Summary: // Checks access rights form reg call and raise dialog as needed // // In: // hDlg - Handle to working dialog to raise error dlgs with // lrc - the return status from a reg call // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- inline BOOL ConfigAccessOk( HWND hDlg, LONG lrc ) { BOOL frt = TRUE; if (ERROR_SUCCESS != lrc) { WCHAR szText[TEMPSTR_SIZE]; WCHAR szTitle[TEMPSTR_SIZE]; UINT wId; if (ERROR_ACCESS_DENIED == lrc) { wId = IDS_NOACCESS; } else { wId = IDS_BADREG; } LoadString(g_hinst, IDS_CPCAPTION, szTitle, TEMPSTR_SIZE); LoadString(g_hinst, wId, szText, TEMPSTR_SIZE); MessageBox (hDlg, szText, szTitle, MB_OK|MB_ICONSTOP); frt = FALSE; } return( frt ); } //------------------------------------------------------------------- // Function: ConfigInitUserEdit // // Summary: // Initializes and defines user count edit control behaviour // // In: // hwndDlg - Parent dialog of user count edit dialog // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- void ConfigInitUserEdit( HWND hwndDlg ) { HWND hwndCount = GetDlgItem( hwndDlg, IDC_HOURS); SendMessage( hwndCount, EM_LIMITTEXT, cchEDITLIMIT, 0 ); hwndCount = GetDlgItem( hwndDlg, IDC_HOUR); SendMessage( hwndCount, EM_LIMITTEXT, cchEDITLIMIT, 0 ); hwndCount = GetDlgItem( hwndDlg, IDC_MINUTE); SendMessage( hwndCount, EM_LIMITTEXT, cchEDITLIMIT, 0 ); hwndCount = GetDlgItem( hwndDlg, IDC_SECOND); SendMessage( hwndCount, EM_LIMITTEXT, cchEDITLIMIT, 0 ); hwndCount = GetDlgItem( hwndDlg, IDC_AMPM); SendMessage( hwndCount, EM_LIMITTEXT, max(wcslen(IntlCurrent.sz1159), wcslen(IntlCurrent.sz2359)), 0 ); SetDlgItemText (hwndDlg, IDC_TIMESEP1, IntlCurrent.szTime); SetDlgItemText (hwndDlg, IDC_TIMESEP2, IntlCurrent.szTime); } //------------------------------------------------------------------- // Function: ConfigInitDialogForService // // Summary: // Initialize dialog controls to the service state // // In: // hwndDlg - Parent dialog to init controls in // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created // Feb-28-96 JeffParh Added range set for interval spin ctrl //------------------------------------------------------------------- void ConfigInitDialogForService( HWND hwndDlg, DWORD dwGroup ) { HWND hwndHour = GetDlgItem( hwndDlg, IDC_HOUR); HWND hwndMinute = GetDlgItem( hwndDlg, IDC_MINUTE); HWND hwndSecond = GetDlgItem( hwndDlg, IDC_SECOND); HWND hwndAMPM = GetDlgItem( hwndDlg, IDC_AMPM); HWND hwndInterval = GetDlgItem( hwndDlg, IDC_HOURS); HWND hwndIntervalSpin = GetDlgItem( hwndDlg, IDC_HOURARROW ); HWND hwndTimeSpin = GetDlgItem( hwndDlg, IDC_TIMEARROW ); BOOL fEnterprise = (pServParams->dwUseEnterprise); BOOL fReplAtTime = (pServParams->dwReplicationType); if (dwGroup == ATINIT || dwGroup == FORTIME) { if (fReplAtTime) { WCHAR szTemp[3]; CheckDlgButton( hwndDlg, IDC_REPL_TIME, fReplAtTime); CheckDlgButton( hwndDlg, IDC_REPL_INT, !fReplAtTime); if (IntlCurrent.iTLZero) { wsprintf(szTemp,TEXT("%02u"), pServParams->dwHour); szTemp[2] = UNICODE_NULL; SetDlgItemText( hwndDlg, IDC_HOUR, szTemp); } else { SetDlgItemInt( hwndDlg, IDC_HOUR, pServParams->dwHour, FALSE ); } wsprintf(szTemp,TEXT("%02u"), pServParams->dwMinute); szTemp[2] = UNICODE_NULL; SetDlgItemText( hwndDlg, IDC_MINUTE, szTemp); wsprintf(szTemp,TEXT("%02u"), pServParams->dwSecond); szTemp[2] = UNICODE_NULL; SetDlgItemText( hwndDlg, IDC_SECOND, szTemp); if (pServParams->fPM) SetDlgItemText( hwndDlg, IDC_AMPM, IntlCurrent.sz2359); else SetDlgItemText( hwndDlg, IDC_AMPM, IntlCurrent.sz1159); SetDlgItemText( hwndDlg, IDC_HOURS, L""); SetFocus(GetDlgItem(hwndDlg, IDC_REPL_TIME)); } else { CheckDlgButton( hwndDlg, IDC_REPL_INT, !fReplAtTime); CheckDlgButton( hwndDlg, IDC_REPL_TIME, fReplAtTime); SetDlgItemInt( hwndDlg, IDC_HOURS, pServParams->dwReplicationTime, FALSE); SetDlgItemText( hwndDlg, IDC_HOUR, L""); SetDlgItemText( hwndDlg, IDC_MINUTE, L""); SetDlgItemText( hwndDlg, IDC_SECOND, L""); SetDlgItemText( hwndDlg, IDC_AMPM, L""); SetFocus(GetDlgItem(hwndDlg, IDC_REPL_INT)); } EnableWindow( hwndTimeSpin, fReplAtTime); EnableWindow( hwndHour, fReplAtTime); EnableWindow( hwndMinute, fReplAtTime); EnableWindow( hwndSecond, fReplAtTime); if ( IntlCurrent.iTime ) { ShowWindow( hwndAMPM, SW_HIDE ); } else { EnableWindow( hwndAMPM, fReplAtTime ); } EnableWindow( hwndInterval, !fReplAtTime); EnableWindow( hwndIntervalSpin, !fReplAtTime); SendMessage( hwndIntervalSpin, UDM_SETRANGE, 0, (LPARAM) MAKELONG( (short) INTERVAL_MAX, (short) INTERVAL_MIN ) ); } } //------------------------------------------------------------------- // Function: ConfigFreeServiceEntry // // Summary: // Free all allocated memory when a service structure is created // // In: // pServParams - The Service structure to free // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- void ConfigFreeServiceEntry( ) { if (pServParams->pszEnterpriseServer) GlobalFree( pServParams->pszEnterpriseServer ); } //------------------------------------------------------------------- // Function: ConfigSaveServiceToReg // // Summary: // Save the given Service structure to the registry // // In: // pServParams - Service structure to save // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- void ConfigSaveServiceToReg( ) { DWORD dwDisposition; LONG lrt; HKEY hKey; if (!pServParams->dwReplicationType) pServParams->dwReplicationTime = pServParams->dwReplicationTime * 60 *60; lrt = RegCreateKeyEx( HKEY_LOCAL_MACHINE, szLicenseKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition ); if (ERROR_SUCCESS == lrt) { lrt = RegSetValueEx( hKey, szUseEnterprise, 0, REG_DWORD, (PBYTE)&(pServParams->dwUseEnterprise), sizeof( DWORD ) ); if (ERROR_SUCCESS == lrt) { lrt = RegSetValueEx( hKey, szEnterpriseServer, 0, REG_SZ, (PBYTE)pServParams->pszEnterpriseServer, (wcslen (pServParams->pszEnterpriseServer) + 1) * sizeof(WCHAR)); if (ERROR_SUCCESS == lrt) { lrt = RegSetValueEx( hKey, szReplicationTime, 0, REG_DWORD, (PBYTE)&(pServParams->dwReplicationTime), sizeof( DWORD ) ); if (ERROR_SUCCESS == lrt) { lrt = ::RegSetValueEx( hKey, szReplicationType, 0, REG_DWORD, (PBYTE)&(pServParams->dwReplicationType), sizeof( DWORD ) ); } } } } if (hKey && lrt == ERROR_SUCCESS) lrt = RegCloseKey(hKey); else if (hKey) lrt = RegCloseKey(hKey); } //------------------------------------------------------------------- // Function: ConfigEditInvalidDlg // // Summary: // Display Dialog when user count edit control value is invalid // // In: // hwndDlg - hwnd of dialog // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- void ConfigEditInvalidDlg( HWND hwndDlg, short nID, BOOL fBeep) { HWND hwnd = GetDlgItem( hwndDlg, nID); if (fBeep) //If we've already put up a MessageBox, we shouldn't beep MessageBeep( MB_VALUELIMIT ); SetFocus(hwnd); SendMessage(hwnd, EM_SETSEL, 0, -1 ); } //------------------------------------------------------------------- // Function: ConfigEditValidate // // Summary: // Handle when the value within the user count edit control changes // // In: // hwndDlg - hwnd of dialog // pserv - currently selected service // Out: // Returns: FALSE if Edit Value is not valid, TRUE if it is // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- BOOL ConfigEditValidate( HWND hwndDlg, short *pnID, BOOL *pfBeep) { UINT nValue; BOOL fValid = FALSE; WCHAR szTemp[MAX_PATH + 1]; DWORD NumberOfHours, SecondsinHours; WCHAR szText[TEMPSTR_SIZE]; WCHAR szTitle[TEMPSTR_SIZE]; *pfBeep = TRUE; // only do this if license info is replicated to an ES do { if (IsDlgButtonChecked(hwndDlg, IDC_REPL_INT)) { nValue = GetDlgItemInt( hwndDlg, IDC_HOURS, &fValid, FALSE); *pnID = IDC_HOURS; if (fValid) { if (nValue < INTERVAL_MIN) { fValid = FALSE; pServParams->dwReplicationTime = INTERVAL_MIN; SetDlgItemInt(hwndDlg, IDC_HOURS, INTERVAL_MIN, FALSE); break; } else if (nValue > INTERVAL_MAX) { fValid = FALSE; pServParams->dwReplicationTime = INTERVAL_MAX; SetDlgItemInt(hwndDlg, IDC_HOURS, INTERVAL_MAX, FALSE); break; } else pServParams->dwReplicationTime = nValue; } else { fValid = FALSE; break; } pServParams->dwReplicationType = FALSE; } else { nValue = GetDlgItemInt( hwndDlg, IDC_HOUR, &fValid, FALSE); if (fValid) pServParams->dwHour = nValue; else { *pnID = IDC_HOUR; break; } nValue = GetDlgItemInt( hwndDlg, IDC_MINUTE, &fValid, FALSE); if (fValid) pServParams->dwMinute = nValue; else { *pnID = IDC_MINUTE; break; } nValue = GetDlgItemInt( hwndDlg, IDC_SECOND, &fValid, FALSE); if (fValid) pServParams->dwSecond = nValue; else { *pnID = IDC_SECOND; break; } if (!IntlCurrent.iTime) { *pnID = IDC_AMPM; nValue = GetDlgItemText( hwndDlg, IDC_AMPM, szTemp, MAX_PATH); if (nValue == 0) { fValid = FALSE; break; } szTemp[nValue] = UNICODE_NULL; if (!_wcsicmp(szTemp, IntlCurrent.sz1159)) { pServParams->fPM = FALSE; } else if (!_wcsicmp(szTemp, IntlCurrent.sz2359)) { pServParams->fPM = TRUE; } else { fValid = FALSE; break; } } if (!IntlCurrent.iTime) { // It's in 12 hour format if (pServParams->fPM) { NumberOfHours = 12 + pServParams->dwHour - ((pServParams->dwHour / 12) * 12); } else { NumberOfHours = pServParams->dwHour - ((pServParams->dwHour / 12) * 12); } } else { // It's in 24 hour format NumberOfHours = pServParams->dwHour; } SecondsinHours = NumberOfHours * 60 * 60; pServParams->dwReplicationTime = SecondsinHours + (pServParams->dwMinute * 60) + pServParams->dwSecond; pServParams->dwReplicationType = TRUE; } } while(FALSE); return( fValid ); } //------------------------------------------------------------------- // Function: OnCpaConfigClose // // Summary: // Do work needed when the Control Panel applet is closed. // Free all Service structures alloced and possible save. // // In: // hwndDlg - Dialog close was requested on // fSave - Save Services to Registry // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- void OnCpaConfigClose( HWND hwndDlg, BOOL fSave , WPARAM wParam) { short nID; BOOL fBeep = TRUE; if (fSave) { if ( ConfigEditValidate(hwndDlg, &nID, &fBeep)) { ConfigSaveServiceToReg( ); ConfigFreeServiceEntry( ); EndDialog( hwndDlg, fSave ); } else { ConfigEditInvalidDlg(hwndDlg, nID, fBeep); } } else { ConfigFreeServiceEntry( ); EndDialog( hwndDlg, fSave ); } } //------------------------------------------------------------------- // Function: OnSetReplicationTime // // Summary: // Handle the users request to change replication time // // In: // hwndDlg - hwnd of dialog // idCtrl - the control id that was pressed to make this request // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created // Feb-28-96 JeffParh Added code to modify time bg color //------------------------------------------------------------------- void OnSetReplicationTime( HWND hwndDlg, WORD idCtrl ) { if (idCtrl == IDC_REPL_INT) { pServParams->dwReplicationType = dwReplicationType; } else { pServParams->dwReplicationType = !dwReplicationType; } // Edit control within this IDC_TIMEEDIT_BORDER should be subclassed and // use some other backgroup brush to repaint the background. // following code works but... // change the background color of the time edit control HWND hwndTimeEdit = GetDlgItem( hwndDlg, IDC_TIMEEDIT_BORDER ); InvalidateRect( hwndTimeEdit, NULL, TRUE ); UpdateWindow( hwndTimeEdit ); HWND hwndTimeSep1 = GetDlgItem( hwndDlg, IDC_TIMESEP1 ); InvalidateRect( hwndTimeSep1, NULL, TRUE ); UpdateWindow( hwndTimeSep1 ); HWND hwndTimeSep2 = GetDlgItem( hwndDlg, IDC_TIMESEP2 ); InvalidateRect( hwndTimeSep2, NULL, TRUE ); UpdateWindow( hwndTimeSep2 ); InvalidateRect( GetDlgItem(hwndDlg, IDC_TIMEARROW), NULL, FALSE ); UpdateWindow( GetDlgItem(hwndDlg, IDC_TIMEARROW) ); ConfigInitDialogForService( hwndDlg, FORTIME); } //------------------------------------------------------------------- // Function: OnCpaConfigInitDialog // // Summary: // Handle the initialization of the Control Panel Applet Dialog // // In: // hwndDlg - the dialog to initialize // Out: // iSel - the current service selected // pServParams - the current service // Returns: // TRUE if succesful, otherwise false // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- BOOL OnCpaConfigInitDialog( HWND hwndDlg) { BOOL frt; LONG lrt; TimeInit(); // Do Registry stuff lrt = ReadRegistry(); frt = ConfigAccessOk( hwndDlg, lrt ); if (frt) { CenterDialogToScreen( hwndDlg ); // Set edit text chars limit ConfigInitUserEdit( hwndDlg ); ConfigInitDialogForService( hwndDlg, ATINIT); if (pServParams->dwReplicationType) SetFocus(GetDlgItem(hwndDlg, IDC_HOUR)); else SetFocus(GetDlgItem(hwndDlg, IDC_HOURS)); } else { EndDialog( hwndDlg, -1 ); } return( frt ); } //------------------------------------------------------------------- // Function: CheckNum // // Summary: // // In: // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- BOOL CheckNum (HWND hDlg, WORD nID) { short i; WCHAR szNum[4]; BOOL bReturn; INT iVal; UINT nValue; bReturn = TRUE; // JonN 5/15/00: PREFIX 112120 ::ZeroMemory( szNum, sizeof(szNum) ); nValue = GetDlgItemText (hDlg, nID, szNum, 3); for (i = 0; szNum[i]; i++) if (!_istdigit (szNum[i])) return (FALSE); iVal = _wtoi(szNum); switch (nID) { case IDC_HOURS: if (!nValue) { pServParams->dwReplicationTime = dwReplicationTime; break; } if (iVal < 9) { pServParams->dwReplicationTime = (DWORD)iVal; break; } if ((iVal < INTERVAL_MIN) || (iVal > INTERVAL_MAX)) bReturn = FALSE; else pServParams->dwReplicationTime = (DWORD)iVal; break; case IDC_HOUR: if (!nValue) { if (IntlCurrent.iTime) { // 24 hour format pServParams->dwHour = 0; pServParams->fPM = FALSE; } else { // 12 hour format pServParams->dwHour = HOUR_MAX; pServParams->fPM = FALSE; } break; } if ((iVal < (int)HOUR_MIN) || (iVal > (int)HOUR_MAX)) bReturn = FALSE; break; case IDC_MINUTE: if (!nValue) { pServParams->dwMinute = MINUTE_MIN; break; } if ((iVal < MINUTE_MIN) || (iVal > MINUTE_MAX)) bReturn = FALSE; break; case IDC_SECOND: if (!nValue) { pServParams->dwSecond = SECOND_MIN; break; } if ((iVal < SECOND_MIN) || (iVal > SECOND_MAX)) bReturn = FALSE; break; } return (bReturn); } //------------------------------------------------------------------- // Function: CheckAMPM // // Summary: // // In: // Out: // Returns: // // Caveats: // // History: // Feb-07-95 ChandanS Created //------------------------------------------------------------------- BOOL CheckAMPM(HWND hDlg, WORD nID) { WCHAR szName[TIMESUF_LEN + 1]; UINT nValue; nValue = GetDlgItemText (hDlg, nID, szName, TIMESUF_LEN); szName[nValue] = UNICODE_NULL; switch (nID) { case IDC_AMPM: if (!nValue) { pServParams->fPM = FALSE; // default return TRUE; } if (_wcsnicmp(szName, IntlCurrent.sz1159, nValue) && _wcsnicmp(szName, IntlCurrent.sz2359, nValue)) { return FALSE; } else { // One of them may match fully if (!_wcsicmp (szName, IntlCurrent.sz1159)) { pServParams->fPM = FALSE; } else if (!_wcsicmp(szName, IntlCurrent.sz2359)) { pServParams->fPM = TRUE; } } break; } return TRUE; } //------------------------------------------------------------------- // Function: dlgprocLICCPACONFIG // // Summary: // The dialog procedure for the main Control Panel Applet Dialog // // In: // hwndDlg - handle of Dialog window // uMsg - message // lParam1 - first message parameter // lParam2 - second message parameter // Out: // Returns: // message dependant // // Caveats: // // History: // Feb-07-95 ChandanS Created // Mar-14-95 MikeMi Added F1 PWM_HELP message // Mar-30-95 MikeMi Added Replication Help Context // Feb-28-96 JeffParh Added handling of UDN_DELTAPOS and EN_SETFOCUS, // removed WM_VSCROLL (switched from private // cpArrow class to Up-Down common ctrl) // //------------------------------------------------------------------- INT_PTR CALLBACK dlgprocLICCPACONFIG( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { LRESULT frt = FALSE; short nID; switch (uMsg) { case WM_INITDIALOG: OnCpaConfigInitDialog( hwndDlg ); return( (LRESULT)TRUE ); // use default keyboard focus break; case WM_COMMAND: switch (HIWORD( wParam )) { case EN_UPDATE: switch (LOWORD( wParam )) { case IDC_AMPM: if (!CheckAMPM (hwndDlg, LOWORD(wParam))) SendMessage ((HWND) lParam, EM_UNDO, 0, 0L); break; case IDC_HOURS: case IDC_HOUR: case IDC_MINUTE: case IDC_SECOND: if (!CheckNum (hwndDlg, LOWORD(wParam))) SendMessage ((HWND) lParam, EM_UNDO, 0, 0L); break; default: break; } break; case EN_SETFOCUS: frt = (LRESULT)OnEnSetFocus( hwndDlg, LOWORD( wParam ) ); break; case BN_CLICKED: switch (LOWORD( wParam )) { case IDOK: frt = (LRESULT)TRUE; // use as save flag // intentional no break case IDCANCEL: OnCpaConfigClose( hwndDlg, !!frt , wParam); frt = (LRESULT)FALSE; break; case IDC_REPL_INT: case IDC_REPL_TIME: OnSetReplicationTime( hwndDlg, LOWORD(wParam) ); break; case IDC_BUTTONHELP: PostMessage( hwndDlg, PWM_HELP, 0, 0 ); break; default: break; } break; default: break; } break; case WM_NOTIFY: nID = (short) wParam; if ( IDC_TIMEARROW == nID ) { frt = (LRESULT)OnDeltaPosSpinTime( hwndDlg, (NM_UPDOWN*) lParam ); } else { frt = (LRESULT)FALSE; } break; case WM_CTLCOLORSTATIC: frt = (LRESULT) OnCtlColorStatic( hwndDlg, (HDC) wParam, (HWND) lParam ); break; default: if (PWM_HELP == uMsg) { ::HtmlHelp( hwndDlg, LICCPA_HTMLHELPFILE, HH_DISPLAY_TOPIC,0); } break; } return( frt ); } //------------------------------------------------------------------- // Function: OnEnSetFocus // // Summary: // // In: // Out: // Returns: // // Caveats: // // History: // Feb-28-96 JeffParh Created //------------------------------------------------------------------- static BOOL OnEnSetFocus( HWND hwndDlg, short nID ) { BOOL fSetNewRange = TRUE; HWND hwndSpinCtrl; int nMax; int nMin; switch ( nID ) { case IDC_AMPM: nMin = 0; nMax = 1; break; case IDC_HOUR: nMin = HOUR_MIN; nMax = HOUR_MAX; break; case IDC_MINUTE: nMin = MINUTE_MIN; nMax = MINUTE_MAX; break; case IDC_SECOND: nMin = SECOND_MIN; nMax = SECOND_MAX; break; default: fSetNewRange = FALSE; break; } if ( fSetNewRange ) { hwndSpinCtrl = GetDlgItem( hwndDlg, IDC_TIMEARROW ); SendMessage( hwndSpinCtrl, UDM_SETRANGE, 0, (LPARAM) MAKELONG( (short) nMax, (short) nMin ) ); } return FALSE; } //------------------------------------------------------------------- // Function: OnDeltaPosSpinTime // // Summary: // // In: // Out: // Returns: // // Caveats: // // History: // Feb-28-96 JeffParh Created //------------------------------------------------------------------- static BOOL OnDeltaPosSpinTime( HWND hwndDlg, NM_UPDOWN * pnmud ) { WCHAR szTemp[ 16 ] = TEXT( "" ); HWND hwndEdit; short nID; int nValue; LRESULT lRange; short nRangeHigh; short nRangeLow; BOOL frt; hwndEdit = GetFocus(); nID = (short) GetWindowLong( hwndEdit, GWL_ID ); if ( ( IDC_HOUR == nID ) || ( IDC_MINUTE == nID ) || ( IDC_SECOND == nID ) || ( IDC_AMPM == nID ) ) { if ( IDC_AMPM == nID ) { // AM/PM GetDlgItemText( hwndDlg, nID, szTemp, sizeof( szTemp ) / sizeof( *szTemp ) ); nValue = _wcsicmp( szTemp, IntlCurrent.sz2359 ); SetDlgItemText( hwndDlg, nID, nValue ? IntlCurrent.sz2359 : IntlCurrent.sz1159 ); } else { lRange = SendMessage( pnmud->hdr.hwndFrom, UDM_GETRANGE, 0, 0 ); nRangeHigh = LOWORD( lRange ); nRangeLow = HIWORD( lRange ); nValue = GetDlgItemInt( hwndDlg, nID, NULL, FALSE ); nValue += pnmud->iDelta; if ( nValue < nRangeLow ) { nValue = nRangeLow; } else if ( nValue > nRangeHigh ) { nValue = nRangeHigh; } if ( ( IDC_HOUR == nID ) && !IntlCurrent.iTLZero ) { // set value w/o leading 0 SetDlgItemInt( hwndDlg, nID, nValue, FALSE ); } else { // set value w/ leading 0 wsprintf( szTemp, TEXT("%02u"), nValue ); SetDlgItemText( hwndDlg, nID, szTemp ); } } SetFocus( hwndEdit ); SendMessage( hwndEdit, EM_SETSEL, 0, -1 ); // handled frt = TRUE; } else { // not handled frt = FALSE; } return frt; } //------------------------------------------------------------------- // Function: OnCtlColorStatic // // Summary: // // In: // Out: // Returns: // // Caveats: // // History: // Feb-28-96 JeffParh Created //------------------------------------------------------------------- static HBRUSH OnCtlColorStatic( HWND hwndDlg, HDC hDC, HWND hwndStatic ) { LONG nID; HBRUSH hBrush; nID = GetWindowLong( hwndStatic, GWL_ID ); if ( pServParams->dwReplicationType && ( ( IDC_TIMESEP1 == nID ) || ( IDC_TIMESEP2 == nID ) || ( IDC_TIMEEDIT_BORDER == nID ) ) ) { hBrush = (HBRUSH) DefWindowProc( hwndDlg, WM_CTLCOLOREDIT, (WPARAM) hDC, (LPARAM) hwndStatic ); } else { hBrush = (HBRUSH) DefWindowProc( hwndDlg, WM_CTLCOLORSTATIC, (WPARAM) hDC, (LPARAM) hwndStatic ); } return hBrush; }