📄 time.c
字号:
/* Clear all box content */
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEFMT_COMBO),
CB_RESETCONTENT,
(WPARAM)0,
(LPARAM)0);
/* Create standart list of time formats */
for(nCBIndex=0;nCBIndex<MAX_TIME_FMT_SAMPLES;nCBIndex++)
{
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEFMT_COMBO),
CB_ADDSTRING,
nCBIndex,
(LPARAM)wszTimeFmtSamples[nCBIndex]);
}
/* Set current item to value from registry */
nRetCode = SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEFMT_COMBO),
CB_SELECTSTRING,
-1,
(LPARAM)(LPCSTR)wszTimeFmt);
/* if is not success, add new value to list and select them */
if(nRetCode == CB_ERR)
{
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEFMT_COMBO),
CB_ADDSTRING,
MAX_TIME_FMT_SAMPLES+1,
(LPARAM)wszTimeFmt);
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEFMT_COMBO),
CB_SELECTSTRING,
-1,
(LPARAM)(LPCSTR)wszTimeFmt);
}
}
/* Set time format to registry */
BOOL
SetTimeFormat(HWND hwndDlg)
{
WCHAR wszTimeFmt[MAX_SAMPLES_STR_SIZE];
WCHAR wszTimeSep[MAX_SAMPLES_STR_SIZE];
WCHAR wszFindedTimeSep[MAX_SAMPLES_STR_SIZE];
WCHAR* pwszResultStr;
BOOL OpenApostFlg = FALSE;
int nFmtStrSize;
int nTimeCompCount;
/* Get setted format */
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEFMT_COMBO),
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
(LPARAM)(LPCSTR)wszTimeFmt);
/* Get setted separator */
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEP_COMBO),
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
(LPARAM)(LPCSTR)wszTimeSep);
/* Get setted format-string size */
nFmtStrSize = wcslen(wszTimeFmt);
/* Check date components */
for(nTimeCompCount=0;nTimeCompCount<nFmtStrSize;nTimeCompCount++)
{
if(wszTimeFmt[nTimeCompCount]==L'\'')
{
OpenApostFlg=!OpenApostFlg;
}
if(iswalnum(wszTimeFmt[nTimeCompCount]) &&
!isTimeComp(wszTimeFmt[nTimeCompCount]) &&
!OpenApostFlg)
{
MessageBoxW(NULL,
L"Entered time format contain incorrect symbol",
L"Error", MB_OK | MB_ICONERROR);
return FALSE;
}
}
if(OpenApostFlg)
{
MessageBoxW(NULL,
L"Entered time format contain incorrect symbol",
L"Error", MB_OK | MB_ICONERROR);
return FALSE;
}
/* substring replacement of separator */
wcscpy(wszFindedTimeSep,FindTimeSep(wszTimeFmt));
pwszResultStr = ReplaceSubStr(wszTimeFmt,wszTimeSep,wszFindedTimeSep);
wcscpy(wszTimeFmt,pwszResultStr);
free(pwszResultStr);
/* Save time format */
SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, wszTimeFmt);
return TRUE;
}
/* Setted up time separator to registry */
BOOL
SetTimeSep(HWND hwndDlg)
{
WCHAR wszTimeSep[MAX_SAMPLES_STR_SIZE];
int nSepStrSize;
int nSepCount;
/* Get setted separator */
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMESEP_COMBO),
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
(LPARAM)(LPCSTR)wszTimeSep);
/* Get setted separator string size */
nSepStrSize = wcslen(wszTimeSep);
/* Check time components */
for(nSepCount=0;nSepCount<nSepStrSize;nSepCount++)
{
if(iswalnum(wszTimeSep[nSepCount]) || (wszTimeSep[nSepCount]=='\''))
{
MessageBoxW(NULL,
L"Entered time separator contain incorrect symbol",
L"Error", MB_OK | MB_ICONERROR);
return FALSE;
}
}
/* Save time separator */
SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STIME, wszTimeSep);
return TRUE;
}
/* Setted up time AM to registry */
BOOL
SetTimeAM(HWND hwndDlg)
{
WCHAR wszTimeAM[MAX_SAMPLES_STR_SIZE];
/* Get setted separator */
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEAM_COMBO),
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
(LPARAM)(LPCSTR)wszTimeAM);
/* Save time AM */
SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_S1159, wszTimeAM);
return TRUE;
}
/* Setted up time PM to registry */
BOOL
SetTimePM(HWND hwndDlg)
{
WCHAR wszTimePM[MAX_SAMPLES_STR_SIZE];
/* Get setted separator */
SendMessageW(GetDlgItem(hwndDlg, IDC_TIMEPM_COMBO),
WM_GETTEXT,
(WPARAM)MAX_SAMPLES_STR_SIZE,
(LPARAM)(LPCSTR)wszTimePM);
/* Save time PM */
SetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_S2359, wszTimePM);
return TRUE;
}
/* Update all time locale samples */
static
VOID
UpdateTimeLocaleSamples(HWND hwndDlg,
LCID lcidLocale)
{
WCHAR OutBuffer[MAX_FMT_SIZE];
/* Get time format sample */
GetTimeFormatW(lcidLocale,
NO_FLAG,
NULL,
NULL,
OutBuffer,
MAX_FMT_SIZE);
SendMessageW(GetDlgItem(hwndDlg, IDC_TIME_EDIT),
WM_SETTEXT,
0,
(LPARAM)OutBuffer);
/* TODO: Add unknown control box processing */
}
/* Date options setup page dialog callback */
INT_PTR
CALLBACK
TimeOptsSetProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
UNREFERENCED_PARAMETER(wParam);
UNREFERENCED_PARAMETER(hwndDlg);
switch(uMsg)
{
case WM_INITDIALOG:
{
InitTimeFormatCB(hwndDlg);
InitTimeSeparatorCB(hwndDlg);
InitAM(hwndDlg);
InitPM(hwndDlg);
UpdateTimeLocaleSamples(hwndDlg, LOCALE_USER_DEFAULT);
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_TIMEFMT_COMBO:
case IDC_TIMESEP_COMBO:
case IDC_TIMEAM_COMBO:
case IDC_TIMEPM_COMBO:
{
if (HIWORD(wParam) == CBN_SELCHANGE ||
HIWORD(wParam) == CBN_EDITCHANGE)
{
/* Set "Apply" button enabled */
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
}
break;
}
}
break;
case WM_NOTIFY:
{
LPNMHDR lpnm = (LPNMHDR)lParam;
/* If push apply button */
if (lpnm->code == (UINT)PSN_APPLY)
{
if(!SetTimeFormat(hwndDlg)) break;
if(!SetTimeSep(hwndDlg)) break;
if(!SetTimeAM(hwndDlg)) break;
if(!SetTimePM(hwndDlg)) break;
InitTimeFormatCB(hwndDlg);
/* FIXME: */
Sleep(15);
UpdateTimeLocaleSamples(hwndDlg, LOCALE_USER_DEFAULT);
}
}
break;
}
return FALSE;
}
/* EOF */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -