2016-09-05 5 views
1

Я скорректировал первый день недели в области и локальных настройках на панели управления (Windows 7), и теперь я пишу функцию C++, которая должна вернуть первый день недели, который я скорректировал. Любая Windows API или стандартная функция C++, которую я могу использовать?Как начать день недели?

Благодаря enter image description here

+0

«в первый день недели, который выбран»: не может понять, что фрагмент. Приведите пример. –

+1

Кажется, это вопрос, который Google с радостью даст вам ответ. – RedX

+3

Возможный дубликат [Определите, какой день недели начинается с] (http://stackoverflow.com/questions/11351196/determine-what-day-of-week-the-week-starts-with) – Puck

ответ

0

Я пытаюсь использовать GetLocaleInfoEx Windows API и он работал хорошо :)

int GetSystemStartDayOfWeek() 
{ 
    int ret; 
    DWORD StartDayOfWeek; 

    ret = GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, 
     LOCALE_IFIRSTDAYOFWEEK | LOCALE_RETURN_NUMBER, 
     (LPTSTR)&StartDayOfWeek, 
     sizeof(StartDayOfWeek)/sizeof(TCHAR)); 

    return StartDayOfWeek; 
} 
3

(К сожалению, что я написал было совершенно неправильно, я обновил пост.).

правильной функции использовать это EnumCalendarInfoExEx:

#include <Windows.h> 
#include <strsafe.h> 
#include <iostream> 

using namespace std; 

BOOL CALLBACK EnumCalendarInfoProcExEx(LPWSTR lpszInfo, CALID calendar, LPWSTR lpReserved, LPARAM lParam) 
{ 
    StringCchCopy(reinterpret_cast<LPWSTR>(lParam), 64, lpszInfo); 
    return FALSE; 
} 

int main() 
{ 
    WCHAR szDay[64]; 
    BOOL bResult = ::EnumCalendarInfoExEx(
     &EnumCalendarInfoProcExEx, 
     LOCALE_NAME_USER_DEFAULT, 
     ENUM_ALL_CALENDARS, 
     nullptr, 
     CAL_SDAYNAME1, 
     reinterpret_cast<LPARAM>(szDay) 
     ); 

    if (!bResult) 
    { 
     wcout << L"Error" << endl; 
     return 0; 
    } 

    wcout << szDay << endl; 
    return 0; 
} 

Пара что необходимо учитывать:

  • Несмотря на то, что первый день недели настроен как воскресенье на панели управления на моем ПК, это возвращает понедельник ...
  • По-видимому, может быть несколько календарей для локали пользователя. Вышеприведенный код получает только первый день для первого календаря.
+0

Я пытаюсь внести изменения в код тура, используя GetLocaleInfoEx, который возвращает CALID «Caleder ID» и передает его как замену параметру CAL_SDAYNAME1 в основной функции, но в результате возникают проблемы с буксировкой: 1- Всегда начало день, возвращенный в предыдущий день, например, если первый день - воскресенье, результат - суббота. 2- Результат возвращается как строка, как я могу получить его как целое. спасибо. –

Смежные вопросы