⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.c

📁 这是一个开放源代码的与WINNT/WIN2K/WIN2003兼容的操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -