2016-09-05 6 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ウィンドウの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; 
} 

のカップル注意すべき事項:

  • PCのコントロールパネルで週の最初の日が日曜日に設定されていても、月曜日が返されます。
  • ユーザーのロケールに複数のカレンダーが存在するようです。上記のコードは、最初のカレンダーの最初の日のみを取得します。
+0

CALID「Caleder ID」を返し、メイン関数のCAL_SDAYNAME1パラメータの代わりに渡すGetLocaleInfoExを使用してツアーコードを修正しようとしましたが、結果にトウの問題があります。 1-常に開始たとえば、最初の日が日曜日の場合、結果は土曜日です。 2結果は文字列として返されます。どのように整数として取得できますか?ありがとう。 –

関連する問題