📄 time.c
字号:
/*
* PROJECT: ReactOS International Control Panel
* LICENSE: GPL - See COPYING in the top level directory
* FILE: dll/cpl/intl/time.c
* PURPOSE: ReactOS International Control Panel
* PROGRAMMERS: Alexey Zavyalov (gen_x@mail.ru)
*/
/* INCLUDES *****************************************************************/
#include <windows.h>
#include <commctrl.h>
#include <cpl.h>
#include "intl.h"
#include "resource.h"
/* GLOBALS ******************************************************************/
#define NO_FLAG 0
#define MAX_TIME_FMT_SAMPLES 3
#define MAX_TIME_SEP_SAMPLES 1
#define MAX_TIME_AM_SAMPLES 2
#define MAX_TIME_PM_SAMPLES 2
#define EOLN_SIZE sizeof(WCHAR)
#define STD_TIME_SEP L":"
/* FUNCTIONS ****************************************************************/
/* if char is 'h' or 'H' or 'm' or 's' or 't' or ' ' return TRUE, else FALSE */
BOOL
isTimeComp(WCHAR walpha)
{
if((walpha == L'h') ||
(walpha == L'H') ||
(walpha == L'm') ||
(walpha == L's') ||
(walpha == L't') ||
(walpha == L' ')) return TRUE;
else return FALSE;
}
/* Find first time separator in string */
WCHAR*
FindTimeSep(const WCHAR *wszSourceStr)
{
int nDateCompCount=0;
int nDateSepCount=0;
WCHAR* wszFindedSep;
wszFindedSep=(WCHAR*) malloc(MAX_SAMPLES_STR_SIZE*sizeof(WCHAR));
wcscpy(wszFindedSep,STD_TIME_SEP);
while(nDateCompCount<wcslen(wszSourceStr))
{
if(!isTimeComp(wszSourceStr[nDateCompCount]) && (wszSourceStr[nDateCompCount]!=L'\''))
{
while(!isTimeComp(wszSourceStr[nDateCompCount]) && (wszSourceStr[nDateCompCount]!=L'\''))
{
wszFindedSep[nDateSepCount++]=wszSourceStr[nDateCompCount];
nDateCompCount++;
}
wszFindedSep[nDateSepCount]='\0';
return wszFindedSep;
}
nDateCompCount++;
}
return wszFindedSep;
}
/* Init time PM control box */
VOID
InitPM(HWND hwndDlg)
{
WCHAR wszTimePMSamples[MAX_TIME_PM_SAMPLES][MAX_SAMPLES_STR_SIZE]=
{
L"PM",
L""
};
int nCBIndex;
int nRetCode;
DWORD dwValueSize=MAX_SAMPLES_STR_SIZE*sizeof(WCHAR)+EOLN_SIZE;
WCHAR wszTimePM[MAX_SAMPLES_STR_SIZE];
/* Get current time PM */
GetLocaleInfoW(LOCALE_USER_DEFAULT,
LOCALE_S2359,
wszTimePM,
dwValueSize);
/* Clear all box content */
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPM_COMBO),
CB_RESETCONTENT,
(WPARAM)0,
(LPARAM)0);
/* Create standart list of time PM */
for(nCBIndex=0;nCBIndex<MAX_TIME_PM_SAMPLES;nCBIndex++)
{
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPM_COMBO),
CB_ADDSTRING,
nCBIndex,
(LPARAM)wszTimePMSamples[nCBIndex]);
}
/* Set current item to value from registry */
nRetCode = SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPM_COMBO),
CB_SELECTSTRING,
-1,
(LPARAM)(LPCSTR)wszTimePM);
/* if is not success, add new value to list and select them */
if(nRetCode == CB_ERR)
{
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPM_COMBO),
CB_ADDSTRING,
MAX_TIME_PM_SAMPLES+1,
(LPARAM)wszTimePM);
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPM_COMBO),
CB_SELECTSTRING,
-1,
(LPARAM)(LPCSTR)wszTimePM);
}
}
/* Init time AM control box */
VOID
InitAM(HWND hwndDlg)
{
WCHAR wszTimeAMSamples[MAX_TIME_AM_SAMPLES][MAX_SAMPLES_STR_SIZE]=
{
L"AM",
L""
};
int nCBIndex;
int nRetCode;
DWORD dwValueSize=MAX_SAMPLES_STR_SIZE*sizeof(WCHAR)+EOLN_SIZE;
WCHAR wszTimeAM[MAX_SAMPLES_STR_SIZE];
/* Get current time AM */
GetLocaleInfoW(LOCALE_USER_DEFAULT,
LOCALE_S1159,
wszTimeAM,
dwValueSize);
/* Clear all box content */
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEAM_COMBO),
CB_RESETCONTENT,
(WPARAM)0,
(LPARAM)0);
/* Create standart list of time AM */
for(nCBIndex=0;nCBIndex<MAX_TIME_AM_SAMPLES;nCBIndex++)
{
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEAM_COMBO),
CB_ADDSTRING,
nCBIndex,
(LPARAM)wszTimeAMSamples[nCBIndex]);
}
/* Set current item to value from registry */
nRetCode = SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEAM_COMBO),
CB_SELECTSTRING,
-1,
(LPARAM)(LPCSTR)wszTimeAM);
/* if is not success, add new value to list and select them */
if(nRetCode == CB_ERR)
{
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEAM_COMBO),
CB_ADDSTRING,
MAX_TIME_AM_SAMPLES+1,
(LPARAM)wszTimeAM);
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEAM_COMBO),
CB_SELECTSTRING,
-1,
(LPARAM)(LPCSTR)wszTimeAM);
}
}
/* Init time separator control box */
VOID
InitTimeSeparatorCB(HWND hwndDlg)
{
WCHAR wszTimeSepSamples[MAX_TIME_SEP_SAMPLES][MAX_SAMPLES_STR_SIZE]=
{
L":"
};
int nCBIndex;
int nRetCode;
DWORD dwValueSize=MAX_SAMPLES_STR_SIZE*sizeof(WCHAR)+EOLN_SIZE;
WCHAR wszTimeSep[MAX_SAMPLES_STR_SIZE];
/* Get current time separator*/
GetLocaleInfoW(LOCALE_USER_DEFAULT,
LOCALE_STIME,
wszTimeSep,
dwValueSize);
/* Clear all box content */
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEP_COMBO),
CB_RESETCONTENT,
(WPARAM)0,
(LPARAM)0);
/* Create standart list of time separators */
for(nCBIndex=0;nCBIndex<MAX_TIME_SEP_SAMPLES;nCBIndex++)
{
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEP_COMBO),
CB_ADDSTRING,
nCBIndex,
(LPARAM)wszTimeSepSamples[nCBIndex]);
}
/* Set current item to value from registry */
nRetCode = SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEP_COMBO),
CB_SELECTSTRING,
-1,
(LPARAM)(LPCSTR)wszTimeSep);
/* if is not success, add new value to list and select them */
if(nRetCode == CB_ERR)
{
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEP_COMBO),
CB_ADDSTRING,
MAX_TIME_SEP_SAMPLES+1,
(LPARAM)wszTimeSep);
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEP_COMBO),
CB_SELECTSTRING,
-1,
(LPARAM)(LPCSTR)wszTimeSep);
}
}
/* Init time format control box */
VOID
InitTimeFormatCB(HWND hwndDlg)
{
WCHAR wszTimeFmtSamples[MAX_TIME_FMT_SAMPLES][MAX_SAMPLES_STR_SIZE]=
{
L"H:mm:ss",
L"HH:mm:ss",
L"h:mm:ss tt"
};
int nCBIndex;
int nRetCode;
DWORD dwValueSize=MAX_SAMPLES_STR_SIZE*sizeof(WCHAR)+EOLN_SIZE;
WCHAR wszTimeFmt[MAX_SAMPLES_STR_SIZE];
/* Get current time format */
GetLocaleInfoW(LOCALE_USER_DEFAULT,
LOCALE_STIMEFORMAT,
wszTimeFmt,
dwValueSize);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -