2025 01,22 14:38 |
|
2006 06,01 23:10 |
|
元号をPocket PCでは取り出せないと何故か信じていて、Registryに設定した”平成”というStringをRegQueryValueExで取り出していました。英語版PC2003にしたH3950の日本語化の際、Regional SettingのCalender TypeのPull Down MenuでScrollさせると和暦が設定出来ることに気付きました。きっとみんな知っている事なんでしょうね。。。H36XXがでた直後からPDAを使っている割に知らない事が沢山あります。
どうでも良いことですが 日本語版 PC2002(H3660) 英語版 PC2003 (H3950) 日本語版 PC2003SE (hx4700)の日付設定画面では 1950年1月1日までが設定できました。(昭和25年です) 話を戻して、元号の取り出しはGetCalenderInfoを使うように思うのですが Embedded VC++3.0 のHelpに To get the date format for a particular calendar, use GetCalendarInfo. の記述があるのですが、winnls.h も含めPrototype宣言がありません。コーディングしてもUnknownでエラーになります。ちなみにEmbedded VC++4.0も同様にPrototype宣言がありませんでした。 今回EnumCalenderInfoを使ってテスト用に書いてみるとうまくいったのでTodayTimeに組み込みました。平成、昭和、大正、明治というStringが取れます。1950年しか日付設定出来ないのに大正、明治が要るのでしょうかね?Contact Listの生年月日でしょうか。。。 あまりきれいなコードではありませんが、Internet上でサンプルコードを見つけられなかったので、もっと良い方法があるかもしれませんが貼り付けておきます。 /* * * SetupEraInfo * Descriptions: * Set up Era Information data structure like name of Era and the offset * using EnumCalenderInfo, due to lack of GetCalenderInfor anywhere include files. */ #define MAXERACOUNT 4 #define MAXERANAME 16 static int iEraOffset[MAXERACOUNT] = { 0, 0, 0, 0 }; static int dwCountEra = 0; static struct { TCHAR stEraName[MAXERANAME]; } EraArray[MAXERACOUNT]; static BOOL CALLBACK EnumCalendarInfoProcA(LPWSTR lpCalendarInfoString); static BOOL CALLBACK EnumCalendarInfoProcB(LPWSTR lpCalendarInfoString); int InquireEraInfo (WORD ayear, LPWSTR aname, LPINT aoffset) { int lcount; for (lcount = 0; lcount < dwCountEra; lcount++) { if (iEraOffset[lcount] <= ayear) { *aoffset = iEraOffset[lcount] - 1; wcscpy(aname, EraArray[lcount].stEraName); break; } } return lcount; } BOOL SetupEraInfo (void) { BOOL bRslt; dwCountEra = 0; bRslt = EnumCalendarInfo(EnumCalendarInfoProcA, LOCALE_USER_DEFAULT, ENUM_ALL_CALENDARS, CAL_IYEAROFFSETRANGE); dwCountEra = 0; bRslt &= EnumCalendarInfo(EnumCalendarInfoProcB, LOCALE_USER_DEFAULT, ENUM_ALL_CALENDARS, CAL_SERASTRING); return bRslt; } static BOOL CALLBACK EnumCalendarInfoProcA (LPWSTR lpsttemp) { if (dwCountEra < MAXERACOUNT) { swscanf(lpsttemp, L"%i", &iEraOffset[dwCountEra++]); return TRUE; } return FALSE; } static BOOL CALLBACK EnumCalendarInfoProcB (LPWSTR lpsttemp) { if (dwCountEra < MAXERACOUNT) { memset(EraArray[dwCountEra].stEraName, 0, MAXERANAME*sizeof(TCHAR)); wcscpy(EraArray[dwCountEra++].stEraName, (LPTSTR)lpsttemp); return TRUE; } return FALSE; } PR |
|
コメント |
コメント投稿 |
|
trackback |
トラックバックURL |
忍者ブログ [PR] |