/** FILE: icur.c *********** Module Header ******************************** * * Control panel applet for International configuration. This file holds * everything to do with the Currency dialog box inside the International * Dialog of Control Panel. * * History: * 12:30 on Tues 23 Apr 1991 -by- Steve Cathcart [stevecat] * Took base code from Win 3.1 source * 10:30 on Tues 04 Feb 1992 -by- Steve Cathcart [stevecat] * Updated code to latest Win 3.1 sources * * Copyright (C) 1990-1992 Microsoft Corporation * *************************************************************************/ //========================================================================== // Include files //========================================================================== // C Runtime #include #include #include // Application specific #include "main.h" //========================================================================== // Local Definitions //========================================================================== //========================================================================== // External Declarations //========================================================================== extern TCHAR *pszCurPat[]; extern TCHAR *pszNegCurPat[]; extern TCHAR *pszSymPlacement[]; //========================================================================== // Local Data Declarations //========================================================================== //========================================================================== // Local Function Prototypes //========================================================================== //========================================================================== // Functions //========================================================================== void SetupPlacementCB( HWND hCB, TCHAR *szSymbol) { TCHAR szFormat[20]; short i; SendMessage (hCB, CB_RESETCONTENT, 0, 0L); for (i = 0; i < NUM_SYM_PAT; i++) { wsprintf ((LPTSTR)szFormat, (LPTSTR)pszSymPlacement[i], (LPTSTR)szSymbol); SendMessage (hCB, CB_ADDSTRING, 0L, (LONG)(LPTSTR)szFormat); } } void SetupNegativeCB( HWND hCB, TCHAR *szSymbol, TCHAR *szDecSep, int nDecimal) { TCHAR szFormat[30]; TCHAR szTemp[20]; TCHAR *pch; TCHAR ch; int i; if (nDecimal > MAX_DEC_DIGITS) { nDecimal = MAX_DEC_DIGITS; } ch = (TCHAR) (TEXT('0') + nDecimal); if (nDecimal) { wsprintf (szTemp, TEXT("123%s"), szDecSep); for (i = 0, pch = szTemp + lstrlen (szTemp); i < nDecimal; i++) { *pch++ = ch; } *pch = TEXT('\0'); } else { lstrcpy (szTemp, TEXT("123")); } SendMessage (hCB, CB_RESETCONTENT, 0, 0L); for (i = 0; i < NUM_NEG_PAT; i++) { // flip the format for these guys if ((i < 4) || (i == 9) || (i == 11) || (i == 12) || (i == 14)) { wsprintf(szFormat, pszNegCurPat[i], (LPTSTR)szSymbol, (LPTSTR)szTemp); } else { wsprintf(szFormat, pszNegCurPat[i], (LPTSTR)szTemp, (LPTSTR)szSymbol); } SendMessage(hCB, CB_ADDSTRING, 0, (LONG)(LPTSTR)szFormat); } return; } BOOL APIENTRY CurIntlDlg( HWND hDlg, UINT message, DWORD wParam, LONG lParam) { HWND hCB; int nDec; short nIndex; BOOL bOK; TCHAR szTemp[20]; TCHAR szDecimal[20]; TCHAR szThousand[20]; static BOOL bSymbolChange; switch (message) { case WM_INITDIALOG: HourGlass (TRUE); SetDlgItemText (hDlg, CUR_SYMBOL, Current.sCurrency); SendDlgItemMessage (hDlg, CUR_SYMBOL, EM_LIMITTEXT, CharSizeOf(Current.sCurrency) - 1, 0L); SetDlgItemText (hDlg, CUR_1000SEP, Current.sMonThousand); SendDlgItemMessage (hDlg, CUR_1000SEP, EM_LIMITTEXT, 1, 0L); SetDlgItemText (hDlg, CUR_DECSEP, Current.sMonDecimal); SendDlgItemMessage (hDlg, CUR_DECSEP, EM_LIMITTEXT, 1, 0L); SetDlgItemInt (hDlg, CUR_DECDIGITS, Current.iCurDec, FALSE); hCB = GetDlgItem (hDlg, CUR_FORMAT1); SetupPlacementCB (hCB, Current.sCurrency); SendMessage (hCB, CB_SETCURSEL, Current.iCurFmt, 0L); hCB = GetDlgItem (hDlg, CUR_NEG); SetupNegativeCB (hCB, Current.sCurrency, Current.sMonDecimal, Current.iCurDec); SendMessage (hCB, CB_SETCURSEL, Current.iNegCur, 0L); bSymbolChange = FALSE; HourGlass (FALSE); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDD_HELP: goto DoHelp; case CUR_DECDIGITS: case CUR_DECSEP: case CUR_SYMBOL: if (HIWORD(wParam) == EN_CHANGE) { bSymbolChange = TRUE; } else if (bSymbolChange && (HIWORD(wParam) == EN_KILLFOCUS)) { bSymbolChange = FALSE; nDec = GetDlgItemInt (hDlg, CUR_DECDIGITS, &bOK, FALSE); if (!GetDlgItemText(hDlg, CUR_SYMBOL, szTemp, CharSizeOf(Current.sCurrency))) { break; } if (!GetDlgItemText(hDlg, CUR_DECSEP, szDecimal, CharSizeOf(Current.sMonDecimal)) && (nDec != 0)) { break; } hCB = GetDlgItem (hDlg, CUR_NEG); nIndex = (short) SendMessage (hCB, CB_GETCURSEL, 0L, 0L); SetupNegativeCB (hCB, szTemp, szDecimal, nDec); SendMessage (hCB, CB_SETCURSEL, nIndex, 0L); hCB = GetDlgItem (hDlg, CUR_FORMAT1); nIndex = (short) SendMessage (hCB, CB_GETCURSEL, 0L, 0L); SetupPlacementCB (hCB, szTemp); SendMessage (hCB, CB_SETCURSEL, nIndex, 0L); } break; case CUR_FORMAT1: case CUR_NEG: case CUR_1000SEP: break; case PUSH_OK: nDec = GetDlgItemInt (hDlg, CUR_DECDIGITS, &bOK, FALSE); if (!bOK) { MyMessageBox (hDlg, INTL+4, INITS+1, MB_OK | MB_ICONINFORMATION); SendMessage (hDlg, WM_NEXTDLGCTL, (DWORD)GetDlgItem(hDlg, CUR_DECDIGITS), 1L); SendDlgItemMessage (hDlg, CUR_DECDIGITS, EM_SETSEL, 0, 32767); break; } if ((!GetDlgItemText (hDlg, CUR_DECSEP, szDecimal, CharSizeOf(Current.sMonDecimal)) && (nDec != 0)) || ExistDigits(szDecimal)) { /* * Null decimal separator only valid if number of decimal * digits is zero. */ MyMessageBox (hDlg, INTL, INITS+1, MB_OK | MB_ICONINFORMATION); SendMessage (hDlg, WM_NEXTDLGCTL, (DWORD)GetDlgItem(hDlg, CUR_DECSEP), 1L); break; } if (!GetDlgItemText(hDlg, CUR_SYMBOL, szTemp, CharSizeOf(Current.sCurrency)) || ExistDigits(szTemp)) { MyMessageBox (hDlg, INTL+3, INITS+1, MB_OK | MB_ICONINFORMATION); SendMessage (hDlg, WM_NEXTDLGCTL, (DWORD)GetDlgItem(hDlg, CUR_SYMBOL), 1L); break; } GetDlgItemText (hDlg, CUR_1000SEP, szThousand, CharSizeOf(Current.sMonThousand)); if (ExistDigits(szThousand)) { MyMessageBox (hDlg, INTL+14, INITS+1, MB_OK | MB_ICONINFORMATION); SendMessage (hDlg, WM_NEXTDLGCTL, (DWORD)GetDlgItem(hDlg, CUR_1000SEP), 1L); break; } lstrcpy (Current.sMonDecimal, szDecimal); lstrcpy(Current.sCurrency, szTemp); lstrcpy (Current.sMonThousand, szThousand); Current.iCurDec = nDec; Current.iCurFmt = SendMessage (GetDlgItem (hDlg, CUR_FORMAT1), CB_GETCURSEL, 0L, 0L); Current.iNegCur = SendMessage (GetDlgItem (hDlg, CUR_NEG), CB_GETCURSEL, 0L, 0L); // fall through... case PUSH_CANCEL: EndDialog (hDlg, 0L); break; } break; default: if (message == wHelpMessage) { DoHelp: CPHelp (hDlg); return (TRUE); } else { return (FALSE); } break; } return (TRUE); UNREFERENCED_PARAMETER(lParam); }