static VOID UpdateExamples(HWND hwndDlg, PGLOBALDATA pGlobalData) { TCHAR szBuffer[MAX_FMT_SIZE]; /* Positive example */ GetCurrencyFormat(pGlobalData->lcid, 0, POSITIVE_EXAMPLE, NULL, szBuffer, MAX_FMT_SIZE); SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYPOSSAMPLE), WM_SETTEXT, 0, (LPARAM)szBuffer); /* Negative example */ GetCurrencyFormat(pGlobalData->lcid, 0, NEGATIVE_EXAMPLE, NULL, szBuffer, MAX_FMT_SIZE); SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYNEGSAMPLE), WM_SETTEXT, 0, (LPARAM)szBuffer); }
/* Update all locale samples */ static VOID UpdateLocaleSample(HWND hwndDlg, LCID lcidLocale) { TCHAR OutBuffer[MAX_SAMPLES_STR_SIZE]; /* Get number format sample */ GetNumberFormat(lcidLocale, NO_FLAG, SAMPLE_NUMBER, NULL, OutBuffer, MAX_SAMPLES_STR_SIZE); SendMessage(GetDlgItem(hwndDlg, IDC_NUMSAMPLE_EDIT), WM_SETTEXT, 0, (LPARAM)OutBuffer); /* Get monetary format sample */ GetCurrencyFormat(lcidLocale, LOCALE_USE_CP_ACP, SAMPLE_NUMBER, NULL, OutBuffer, MAX_SAMPLES_STR_SIZE); SendMessage(GetDlgItem(hwndDlg, IDC_MONEYSAMPLE_EDIT), WM_SETTEXT, 0, (LPARAM)OutBuffer); /* Get time format sample */ GetTimeFormat(lcidLocale, NO_FLAG, NULL, NULL, OutBuffer, MAX_SAMPLES_STR_SIZE); SendMessage(GetDlgItem(hwndDlg, IDC_TIMESAMPLE_EDIT), WM_SETTEXT, 0, (LPARAM)OutBuffer); /* Get short date format sample */ GetDateFormat(lcidLocale, DATE_SHORTDATE, NULL, NULL, OutBuffer, MAX_SAMPLES_STR_SIZE); SendMessage(GetDlgItem(hwndDlg, IDC_SHORTTIMESAMPLE_EDIT), WM_SETTEXT, 0, (LPARAM)OutBuffer); /* Get long date sample */ GetDateFormat(lcidLocale, DATE_LONGDATE, NULL, NULL, OutBuffer, MAX_SAMPLES_STR_SIZE); SendMessage(GetDlgItem(hwndDlg, IDC_FULLTIMESAMPLE_EDIT), WM_SETTEXT, 0, (LPARAM)OutBuffer); }
/////////////////////////////////////////////////////////////////////////////////////////// // Function: InitNLSFields // // Description: Initialize NLS formatting fields for a given LCID // // Comments: // /////////////////////////////////////////////////////////////////////////////////////////// void InitNLSFields(HWND hDlg, LCID lcid) { TCHAR tcsTemp[MAX_STR]; HWND hList = NULL; // Init larg number fields... LoadString(g_hInst, STR_LARGEPOSNUMBER, g_tcsTemp, MAX_STR); GetNumberFormat(lcid, 0, g_tcsTemp, NULL, tcsTemp, MAX_STR); SetWindowText(GetDlgItem(hDlg, IDC_POS_NUMBER), tcsTemp); LoadString(g_hInst, STR_LARGENEGNUMBER, g_tcsTemp, MAX_STR); GetNumberFormat(lcid, 0, g_tcsTemp, NULL, tcsTemp, MAX_STR); SetWindowText(GetDlgItem(hDlg, IDC_NEG_NUMBER), tcsTemp); // Init the currency field format... LoadString(g_hInst, STR_LARGEPOSNUMBER, g_tcsTemp, MAX_STR); GetCurrencyFormat(lcid, 0, g_tcsTemp, NULL, tcsTemp, MAX_STR); SetWindowText(GetDlgItem(hDlg, IDC_POS_CURRENCY), tcsTemp); LoadString(g_hInst, STR_LARGENEGNUMBER, g_tcsTemp, MAX_STR); GetCurrencyFormat(lcid, 0, g_tcsTemp, NULL, tcsTemp, MAX_STR); SetWindowText(GetDlgItem(hDlg, IDC_NEG_CURRENCY), tcsTemp); // Init time field format... // Delete our previous list of items... hList = GetDlgItem(g_hDlg, IDC_TIMEFORMAT); if(NULL != hList) { SendMessage(hList, CB_RESETCONTENT , 0, 0); // Enumerates the time formats that are available for a specified locale. EnumTimeFormats(EnumTimeFormatsProc, lcid, 0); SendMessage(hList, CB_SETCURSEL, 0, 0); // item index SendMessage(hList, CB_GETLBTEXT, 0, (LPARAM) g_tcsTemp); GetTimeFormat(lcid, 0, NULL, g_tcsTemp, tcsTemp, MAX_STR); SetWindowText(GetDlgItem(hDlg, IDC_TIMESAMPLE), tcsTemp); } // Init calendar field format... // Delete our previous list of items... hList = GetDlgItem(g_hDlg, IDC_CALFORMAT); if(NULL != hList) { SendMessage(hList, CB_RESETCONTENT , 0, 0); // Enumerates the short date formats that are available for a specified locale. EnumCalendarInfo(EnumCalendarInfoProc, lcid, ENUM_ALL_CALENDARS, CAL_SCALNAME); SendMessage(hList, CB_SETCURSEL, 0, 0); // item index SendMessage(hList, CB_GETLBTEXT, 0, (LPARAM) g_tcsTemp); } // Init short date field format... // Delete our previous list of items... hList = GetDlgItem(g_hDlg, IDC_SDATEFORMAT); if(NULL != hList) { SendMessage(hList, CB_RESETCONTENT , 0, 0); // Enumerates the short date formats that are available for a specified locale. EnumDateFormats(EnumSDateFormatsProc, lcid, DATE_SHORTDATE); SendMessage(hList, CB_SETCURSEL, 0, 0); // item index SendMessage(hList, CB_GETLBTEXT, 0, (LPARAM) g_tcsTemp); GetDateFormat(lcid, 0, NULL, g_tcsTemp, tcsTemp, MAX_STR); SetWindowText(GetDlgItem(hDlg, IDC_SDATESAMPLE), tcsTemp); } // Init long date field format... // Delete our previous list of items... hList = GetDlgItem(g_hDlg, IDC_LDATEFORMAT); if(NULL != hList) { SendMessage(hList, CB_RESETCONTENT , 0, 0); // Enumerates the long date formats that are available for a specified locale EnumDateFormats(EnumLDateFormatsProc, lcid, DATE_LONGDATE); SendMessage(hList, CB_SETCURSEL, 0, 0); // item index SendMessage(hList, CB_GETLBTEXT, 0, (LPARAM) g_tcsTemp); GetDateFormat(lcid, 0, NULL, g_tcsTemp, tcsTemp, MAX_STR); SetWindowText(GetDlgItem(hDlg, IDC_LDATESAMPLE), tcsTemp); } }
BOOL CADORecordset::GetFieldValue(int nIndex, CString& strValue, CString strDateFormat) { CString str; _variant_t vtFld; _variant_t vtIndex; vtIndex.vt = VT_I2; vtIndex.iVal = nIndex; try { vtFld = m_pRecordset->Fields->GetItem(vtIndex)->Value; switch(vtFld.vt) { case VT_R4: str = DblToStr(vtFld.fltVal); break; case VT_R8: str = DblToStr(vtFld.dblVal); break; case VT_BSTR: str = vtFld.bstrVal; break; case VT_I2: case VT_UI1: str = IntToStr(vtFld.iVal); break; case VT_INT: str = IntToStr(vtFld.intVal); break; case VT_I4: str = LongToStr(vtFld.lVal); break; case VT_UI4: str = ULongToStr(vtFld.ulVal); break; case VT_DECIMAL: { //Corrected by José Carlos Martínez Galán double val = vtFld.decVal.Lo32; val *= (vtFld.decVal.sign == 128)? -1 : 1; val /= pow(10, vtFld.decVal.scale); str = DblToStr(val); } break; case VT_DATE: { COleDateTime dt(vtFld); if(strDateFormat.IsEmpty()) strDateFormat = _T("%Y-%m-%d %H:%M:%S"); str = dt.Format(strDateFormat); } break; case VT_CY: //Added by John Andy Johnson!!! { vtFld.ChangeType(VT_R8); CString str; str.Format(_T("%f"), vtFld.dblVal); _TCHAR pszFormattedNumber[64]; // LOCALE_USER_DEFAULT if(GetCurrencyFormat( LOCALE_USER_DEFAULT, // locale for which string is to be formatted 0, // bit flag that controls the function's operation str, // pointer to input number string NULL, // pointer to a formatting information structure // NULL = machine default locale settings pszFormattedNumber, // pointer to output buffer 63)) // size of output buffer { str = pszFormattedNumber; } } break; case VT_BOOL: str = vtFld.boolVal == VARIANT_TRUE? 'T':'F'; break; case VT_EMPTY: case VT_NULL: str.Empty(); break; default: str.Empty(); return FALSE; } strValue = str; return TRUE; } catch(_com_error &e) { dump_com_error(e); return FALSE; } }
BOOL CADORecordset::GetFieldValue(LPCTSTR lpFieldName, wstring& strValue, wstring strDateFormat) { wstring str; _variant_t vtFld; try { vtFld = m_pRecordset->Fields->GetItem(lpFieldName)->Value; switch(vtFld.vt) { case VT_R4: str = DblToStr(vtFld.fltVal); break; case VT_R8: str = DblToStr(vtFld.dblVal); break; case VT_BSTR: str = vtFld.bstrVal; break; case VT_I2: case VT_UI1: str = IntToStr(vtFld.iVal); break; case VT_INT: str = IntToStr(vtFld.intVal); break; case VT_I4: str = LongToStr(vtFld.lVal); break; case VT_UI4: str = ULongToStr(vtFld.ulVal); break; case VT_DECIMAL: { double val = vtFld.decVal.Lo32; val *= (vtFld.decVal.sign == 128)? -1 : 1; val /= pow((float)10, vtFld.decVal.scale); str = DblToStr(val); } break; case VT_DATE: { #if 0 /*lanshh **/ COleDateTime dt(vtFld); if(strDateFormat.IsEmpty()) strDateFormat = _T("%Y-%m-%d %H:%M:%S"); str = dt.Format(strDateFormat); #endif } break; #if 0 case VT_CY: { vtFld.ChangeType(VT_R8); wstring str; str.Format(_T("%f"), vtFld.dblVal); _TCHAR pszFormattedNumber[64]; // LOCALE_USER_DEFAULT if(GetCurrencyFormat( LOCALE_USER_DEFAULT, // locale for which string is to be formatted 0, // bit flag that controls the function's operation str, // pointer to input number string NULL, // pointer to a formatting information structure // NULL = machine default locale settings pszFormattedNumber, // pointer to output buffer 63)) // size of output buffer { str = pszFormattedNumber; } } break; #endif case VT_EMPTY: case VT_NULL: str.clear(); break; case VT_BOOL: str = vtFld.boolVal == VARIANT_TRUE? _T('T'):_T('F'); break; default: str.clear(); return FALSE; } strValue = str; return TRUE; } catch(_com_error &e) { dump_com_error(e); return FALSE; } }
static VOID InitCurrencyPositiveFormats(HWND hwndDlg, PGLOBALDATA pGlobalData) { TCHAR szDecimalSep[MAX_FMT_SIZE]; TCHAR szThousandSep[MAX_FMT_SIZE]; TCHAR szCurrencySymbol[MAX_FMT_SIZE]; TCHAR szBuffer[MAX_FMT_SIZE]; CURRENCYFMT cyFmt; INT nPositiveOrder = 0; INT ret; INT i; /* Get positive format */ ret = GetLocaleInfo(pGlobalData->lcid, LOCALE_ICURRENCY, szBuffer, MAX_FMT_SIZE); if (ret != 0) { nPositiveOrder = _ttoi(szBuffer); } /* Get number of fractional digits */ ret = GetLocaleInfo(pGlobalData->lcid, LOCALE_ICURRDIGITS, szBuffer, MAX_FMT_SIZE); if (ret != 0) { cyFmt.NumDigits = _ttoi(szBuffer); } else { cyFmt.NumDigits = 0; } /* Get decimal separator */ ret = GetLocaleInfo(pGlobalData->lcid, LOCALE_SMONDECIMALSEP, szDecimalSep, MAX_FMT_SIZE); /* Get group separator */ ret = GetLocaleInfo(pGlobalData->lcid, LOCALE_SMONTHOUSANDSEP, szThousandSep, MAX_FMT_SIZE); /* Get currency symbol */ ret = GetLocaleInfo(pGlobalData->lcid, LOCALE_SCURRENCY, szCurrencySymbol, MAX_FMT_SIZE); /* positive currency values */ cyFmt.LeadingZero = 0; cyFmt.Grouping = 3; cyFmt.lpDecimalSep = szDecimalSep; cyFmt.lpThousandSep = szThousandSep; cyFmt.lpCurrencySymbol = szCurrencySymbol; cyFmt.NegativeOrder = 0; for (i = 0; i < 4; i++) { cyFmt.PositiveOrder = i; GetCurrencyFormat(pGlobalData->lcid, 0, _T("1.1"), &cyFmt, szBuffer, MAX_FMT_SIZE); SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYPOSVALUE), CB_INSERTSTRING, -1, (LPARAM)szBuffer); } SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYPOSVALUE), CB_SETCURSEL, nPositiveOrder, 0); }
static VOID InitDigitGroupCB(HWND hwndDlg, PGLOBALDATA pGlobalData) { TCHAR szThousandSep[MAX_FMT_SIZE]; TCHAR szGrouping[MAX_FMT_SIZE]; TCHAR szBuffer[MAX_FMT_SIZE]; CURRENCYFMT cyFmt; INT i; /* Get group separator */ GetLocaleInfo(pGlobalData->lcid, LOCALE_SMONTHOUSANDSEP, szThousandSep, MAX_FMT_SIZE); /* Get grouping */ GetLocaleInfo(pGlobalData->lcid, LOCALE_SMONGROUPING, szGrouping, MAX_FMT_SIZE); /* Digit grouping */ cyFmt.NumDigits = 0; cyFmt.LeadingZero = 0; cyFmt.lpDecimalSep = _T(""); cyFmt.lpThousandSep = szThousandSep; cyFmt.PositiveOrder = 0; cyFmt.NegativeOrder = 0; cyFmt.lpCurrencySymbol = _T(""); cyFmt.Grouping = 0; GetCurrencyFormat(pGlobalData->lcid, 0, _T("123456789"), &cyFmt, szBuffer, MAX_FMT_SIZE); SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), CB_INSERTSTRING, -1, (LPARAM)szBuffer); cyFmt.Grouping = 3; GetCurrencyFormat(pGlobalData->lcid, 0, _T("123456789"), &cyFmt, szBuffer, MAX_FMT_SIZE); SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), CB_INSERTSTRING, -1, (LPARAM)szBuffer); cyFmt.Grouping = 32; GetCurrencyFormat(pGlobalData->lcid, 0, _T("123456789"), &cyFmt, szBuffer, MAX_FMT_SIZE); SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), CB_INSERTSTRING, -1, (LPARAM)szBuffer); i = 0; if (szGrouping[0] == _T('3')) { if ((szGrouping[1] == _T(';')) && (szGrouping[2] == _T('2'))) i = 2; else i = 1; } SendMessage(GetDlgItem(hwndDlg, IDC_CURRENCYGRPNUM), CB_SETCURSEL, i, /* Index */ 0); }