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

📄 time.c

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