'#cmdline "-s console" ' console application #cmdline "-s gui" ' gui application #cmdline "resource.rc" ' resource file #DEFINE UNICODE #DEFINE _WIN32_WINNT &h0602 #INCLUDE ONCE "AfxNova/CWindow.inc" #INCLUDE ONCE "AfxNova/AfXWin.inc" #INCLUDE ONCE "AfxNova/CDtPicker.inc" #INCLUDE ONCE "AfxNova/CTabPage.inc" #INCLUDE ONCE "AfxNova/CListView.inc" #INCLUDE ONCE "AfxNova\AfxTime.inc" #INCLUDE ONCE "AfxNova\CXpButton.inc" #INCLUDE ONCE "crInc\cCalendar\cCalendar.bi" #INCLUDE ONCE "string.bi" USING AfxNova #DEFINE APPICON 100 ' Main Form Icon ID in resource.rc DIM SHARED oCalendar AS cCalendar DIM SHARED nSerial AS LONGINT DIM SHARED uGregIn AS GREGORIAN_DATE DIM SHARED uLocale AS LOCATION_LOCALE DIM SHARED sDaylightName AS DWSTRING DIM SHARED sStandardName AS DWSTRING DIM SHARED sLocaleName AS DWSTRING DIM SHARED arDaylight() AS DATE_CALCULATION DIM SHARED arUSAFederal() AS DATE_CALCULATION DIM SHARED nDaylightTime AS LONG = 0 DIM SHARED nStandardTime AS LONG = 0 DIM SHARED uSystemDate AS SYSTEMTIME DIM SHARED uSystemTime AS SYSTEMTIME ' US Federal Holidays ReDim arUSAFederal(0 To 10) ' Holidays that fall on a Saturday are observed on Fri, Sunday on Monday arUSAFederal(0).Name = "New Year's Day" arUSAFederal(0).Month = cCalendarClass.JANUARY arUSAFederal(0).Day = 1 arUSAFederal(0).RuleClass = cCalendarClass.GREGORIAN_RULES arUSAFederal(0).Rule = cCalendarClass.NO_RULES arUSAFederal(0).Weekday = cCalendarClass.ALL_WEEKDAYS arUSAFederal(0).SaturdayRule = cCalendarClass.SATURDAY_OBSERVED_ON_FRIDAY arUSAFederal(0).SundayRule = cCalendarClass.SUNDAY_OBSERVED_ON_MONDAY arUSAFederal(0).YearRule = cCalendarClass.ALL_YEARS arUSAFederal(0).NonBusinessDate = True arUSAFederal(1).Name = "Martin Luther King Day" arUSAFederal(1).Month = cCalendarClass.JANUARY arUSAFederal(1).Day = 0 arUSAFederal(1).RuleClass = cCalendarClass.GREGORIAN_RULES arUSAFederal(1).Rule = cCalendarClass.THIRD_WEEK arUSAFederal(1).Weekday = cCalendarClass.MONDAY arUSAFederal(1).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arUSAFederal(1).SundayRule = cCalendarClass.NO_SUNDAY_RULE arUSAFederal(1).YearRule = cCalendarClass.ALL_YEARS arUSAFederal(1).NonBusinessDate = True ' This holiday Is designated as "Washington s Birthday" in section 6103(a) of title 5 of the United States Code, ' which is the law that specifies holidays for Federal employees. arUSAFederal(2).Name = "Washington's Birthday" arUSAFederal(2).Month = cCalendarClass.FEBRUARY arUSAFederal(2).Day = 0 arUSAFederal(2).RuleClass = cCalendarClass.GREGORIAN_RULES arUSAFederal(2).Rule = cCalendarClass.THIRD_WEEK arUSAFederal(2).Weekday = cCalendarClass.MONDAY arUSAFederal(2).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arUSAFederal(2).SundayRule = cCalendarClass.NO_SUNDAY_RULE arUSAFederal(2).YearRule = cCalendarClass.ALL_YEARS arUSAFederal(2).NonBusinessDate = True arUSAFederal(3).Name = "Memorial Day" arUSAFederal(3).Month = cCalendarClass.MAY arUSAFederal(3).Day = 0 arUSAFederal(3).RuleClass = cCalendarClass.GREGORIAN_RULES arUSAFederal(3).Rule = cCalendarClass.LAST_WEEK arUSAFederal(3).Weekday = cCalendarClass.MONDAY arUSAFederal(3).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arUSAFederal(3).SundayRule = cCalendarClass.NO_SUNDAY_RULE arUSAFederal(3).YearRule = cCalendarClass.ALL_YEARS arUSAFederal(3).NonBusinessDate = True arUSAFederal(4).Name = "Independence Day" arUSAFederal(4).Month = cCalendarClass.JULY arUSAFederal(4).Day = 4 arUSAFederal(4).RuleClass = cCalendarClass.GREGORIAN_RULES arUSAFederal(4).Rule = cCalendarClass.NO_RULES arUSAFederal(4).Weekday = cCalendarClass.ALL_WEEKDAYS arUSAFederal(4).SaturdayRule = cCalendarClass.SATURDAY_OBSERVED_ON_FRIDAY arUSAFederal(4).SundayRule = cCalendarClass.SUNDAY_OBSERVED_ON_MONDAY arUSAFederal(4).YearRule = cCalendarClass.ALL_YEARS arUSAFederal(4).NonBusinessDate = True arUSAFederal(5).Name = "Labor Day" arUSAFederal(5).Month = cCalendarClass.SEPTEMBER arUSAFederal(5).Day = 0 arUSAFederal(5).RuleClass = cCalendarClass.GREGORIAN_RULES arUSAFederal(5).Rule = cCalendarClass.FIRST_WEEK arUSAFederal(5).Weekday = cCalendarClass.MONDAY arUSAFederal(5).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arUSAFederal(5).SundayRule = cCalendarClass.NO_SUNDAY_RULE arUSAFederal(5).YearRule = cCalendarClass.ALL_YEARS arUSAFederal(5).NonBusinessDate = True arUSAFederal(6).Name = "Columbus Day" arUSAFederal(6).Month = cCalendarClass.OCTOBER arUSAFederal(6).Day = 0 arUSAFederal(6).RuleClass = cCalendarClass.GREGORIAN_RULES arUSAFederal(6).Rule = cCalendarClass.SECOND_WEEK arUSAFederal(6).Weekday = cCalendarClass.MONDAY arUSAFederal(6).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arUSAFederal(6).SundayRule = cCalendarClass.NO_SUNDAY_RULE arUSAFederal(6).YearRule = cCalendarClass.ALL_YEARS arUSAFederal(6).NonBusinessDate = True arUSAFederal(7).Name = "Veteran's Day" arUSAFederal(7).Month = cCalendarClass.NOVEMBER arUSAFederal(7).Day = 11 arUSAFederal(7).RuleClass = cCalendarClass.GREGORIAN_RULES arUSAFederal(7).Rule = cCalendarClass.NO_RULES arUSAFederal(7).Weekday = cCalendarClass.ALL_WEEKDAYS arUSAFederal(7).SaturdayRule = cCalendarClass.SATURDAY_OBSERVED_ON_FRIDAY arUSAFederal(7).SundayRule = cCalendarClass.SUNDAY_OBSERVED_ON_MONDAY arUSAFederal(7).YearRule = cCalendarClass.ALL_YEARS arUSAFederal(7).NonBusinessDate = True arUSAFederal(8).Name = "Thanksgiving Day" arUSAFederal(8).Month = cCalendarClass.NOVEMBER arUSAFederal(8).Day = 0 arUSAFederal(8).RuleClass = cCalendarClass.GREGORIAN_RULES arUSAFederal(8).Rule = cCalendarClass.FOURTH_WEEK arUSAFederal(8).Weekday = cCalendarClass.THURSDAY arUSAFederal(8).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arUSAFederal(8).SundayRule = cCalendarClass.NO_SUNDAY_RULE arUSAFederal(8).YearRule = cCalendarClass.ALL_YEARS arUSAFederal(8).NonBusinessDate = True arUSAFederal(9).Name = "Christmas Day" arUSAFederal(9).Month = cCalendarClass.DECEMBER arUSAFederal(9).Day = 25 arUSAFederal(9).RuleClass = cCalendarClass.GREGORIAN_RULES arUSAFederal(9).Rule = cCalendarClass.NO_RULES arUSAFederal(9).Weekday = cCalendarClass.ALL_WEEKDAYS arUSAFederal(9).SaturdayRule = cCalendarClass.SATURDAY_OBSERVED_ON_FRIDAY arUSAFederal(9).SundayRule = cCalendarClass.SUNDAY_OBSERVED_ON_MONDAY arUSAFederal(9).YearRule = cCalendarClass.ALL_YEARS arUSAFederal(9).NonBusinessDate = True arUSAFederal(10).Name = "Inauguration Day" arUSAFederal(10).Month = cCalendarClass.JANUARY arUSAFederal(10).Day = 20 arUSAFederal(10).RuleClass = cCalendarClass.GREGORIAN_RULES arUSAFederal(10).Rule = cCalendarClass.NO_RULES arUSAFederal(10).Weekday = cCalendarClass.ALL_WEEKDAYS arUSAFederal(10).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arUSAFederal(10).SundayRule = cCalendarClass.SUNDAY_OBSERVED_ON_MONDAY arUSAFederal(10).YearRule = cCalendarClass.YEARS_AFTER_LEAP_ONLY arUSAFederal(10).NonBusinessDate = False Redim arDaylight(0 to 1) arDaylight(0).Name = "Daylight Savings Begins" arDaylight(0).Day = 0 arDaylight(0).Year = 0 arDaylight(0).RuleClass = cCalendarClass.GREGORIAN_RULES arDaylight(0).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arDaylight(0).SundayRule = cCalendarClass.NO_SUNDAY_RULE arDaylight(0).YearRule = cCalendarClass.ALL_YEARS arDaylight(0).NonBusinessDate = False arDaylight(1).Name = "Daylight Savings Ends" arDaylight(1).Month = AfxTimeZoneStandardMonth() arDaylight(1).Day = 0 arDaylight(1).Year = 0 arDaylight(1).RuleClass = cCalendarClass.GREGORIAN_RULES arDaylight(1).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arDaylight(1).SundayRule = cCalendarClass.NO_SUNDAY_RULE arDaylight(1).YearRule = cCalendarClass.ALL_YEARS arDaylight(1).NonBusinessDate = False if arDaylight(1).Month <> 0 then uLocale.bApplyDaylightSavings = true arDaylight(0).Month = AfxTimeZoneDaylightMonth() arDaylight(0).Rule = AfxTimeZoneDaylightDay() arDaylight(0).Weekday = AfxTimeZoneDaylightDayOfWeek() nDaylightTime = AfxTimeZoneDaylightHour() * cCalendarClass.ONE_HOUR _ + AfxTimeZoneDaylightMinute() * cCalendarClass.ONE_MINUTE arDaylight(1).Rule = AfxTimeZoneStandardDay() arDaylight(1).Weekday = AfxTimeZoneStandardDayOfWeek() nStandardTime = AfxTimeZoneStandardHour() * cCalendarClass.ONE_HOUR _ + AfxTimeZoneStandardMinute() * cCalendarClass.ONE_MINUTE else uLocale.bApplyDaylightSavings = false end if sDaylightName = AfxTimeZoneDaylightName() sStandardName = AfxTimeZoneStandardName() uLocale.Zone = AfxTimeZoneBias() uLocale.DaylightSavingsMinutes = AfxTimeZoneDaylightBias() ' Assign Locale Name and Latitude/Longitude based on Zone select case uLocale.Zone case -60 sLocaleName = "Charles de Gaulle International Airport, Paris, le-de-France, France" uLocale.Latitude = 49.012798 uLocale.Longitude = 2.55 uLocale.Elevation = 119 case -120 sLocaleName = "Cairo International Airport, Cairo, Cairo Governorate, Egypt" uLocale.Latitude = 30.121901 uLocale.Longitude = 31.4056 uLocale.Elevation = 116 case -180 sLocaleName = "Sheremetyevo International Airport, Moscow, Moscow Oblast, Russia" uLocale.Latitude = 55.972599 uLocale.Longitude = 37.4146 uLocale.Elevation = 190 case -210 sLocaleName = "Imam Khomeini International Airport, Tehran, Tehran Province, Iran" uLocale.Latitude = 35.4161 uLocale.Longitude = 51.152199 uLocale.Elevation = 1007 case -240 sLocaleName = "Abu Dhabi International Airport, Abu Dhabi, Abu Dhabi Emirate, UAE" uLocale.Latitude = 24.433001 uLocale.Longitude = 54.6511 uLocale.Elevation = 27 case -270 sLocaleName = "Kabul International Airport, Kabul, Kabul Province, Afghanistan" uLocale.Latitude = 34.565899 uLocale.Longitude = 69.212303 uLocale.Elevation = 1791 case -300 sLocaleName = "New Islamabad International Airport, Islamabad, Punjab, Pakistan" uLocale.Latitude = 33.560714 uLocale.Longitude = 72.851614 uLocale.Elevation = 502 case -330 sLocaleName = "Indira Gandhi International Airport, Delhi, Delhi, India" uLocale.Latitude = 28.5665 uLocale.Longitude = 77.103104 uLocale.Elevation = 237 case -345 sLocaleName = "Tribhuvan International Airport, Kathmandu, Bagmati, Nepal" uLocale.Latitude = 27.6966 uLocale.Longitude = 85.3591 uLocale.Elevation = 1338 case -360 sLocaleName = "Dhaka/Hazrat Shahjalal International, Dhaka, Dhaka Division, Bangladesh" uLocale.Latitude = 23.843347 uLocale.Longitude = 90.397783 uLocale.Elevation = 9 case -390 sLocaleName = "Yangon International Airport, Yangon(Rangoon), Yangon Division, Myanmar" uLocale.Latitude = 16.907301 uLocale.Longitude = 96.133202 uLocale.Elevation = 33 case -420 sLocaleName = "Don Mueang International Airport, Bangkok, Bangkok Province, Thailand" uLocale.Latitude = 13.9126 uLocale.Longitude = 100.607002 uLocale.Elevation = 3 case -480 sLocaleName = "Guangzhou Baiyun International Airport, Guangdong Province China" uLocale.Latitude = 23.38831778 uLocale.Longitude = 113.2992665496 uLocale.Elevation = 15 case -525 sLocaleName = "Eucla, Western Australia, Australia" uLocale.Latitude = -31.67713 uLocale.Longitude = 128.8893 uLocale.Elevation = 93 case -540 sLocaleName = "Gimpo International Airport, Seoul, Seoul Teugbyeolsi, South Korea" uLocale.Latitude = 37.5583 uLocale.Longitude = 126.791 uLocale.Elevation = 18 case -570 sLocaleName = "Darwin International Airport, Darwin, Northern Territory, Australia" uLocale.Latitude = -12.4147 uLocale.Longitude = 130.876999 uLocale.Elevation = 31 case -600 sLocaleName = "Melbourne International Airport, Melbourne, Victoria, Australia" uLocale.Latitude = -37.673302 uLocale.Longitude = 144.843002 uLocale.Elevation = 132 case -630 sLocaleName = "Lord Howe Island Airport, Lord Howe Island, New South Wales, Australia" uLocale.Latitude = -31.5383 uLocale.Longitude = 159.076996 uLocale.Elevation = 2 case -660 sLocaleName = "Honiara International Airport, Honiara, Solomon Islands" uLocale.Latitude = -9.428 uLocale.Longitude = 160.054993 uLocale.Elevation = 9 case -720 sLocaleName = "Nadi International Airport, Nadi, Western, Fiji" uLocale.Latitude = -17.7554 uLocale.Longitude = 177.442993 uLocale.Elevation = 18 case -765 sLocaleName = "Tuuta Airport, Chatham Island, New Zealand" uLocale.Latitude = -43.810001 uLocale.Longitude = -176.457001 uLocale.Elevation = 13 case -780 sLocaleName = "Fua'amotu International Airport, Nuku'alofa, Tongatapu, Tonga" uLocale.Latitude = -21.241199 uLocale.Longitude = -175.149994 uLocale.Elevation = 38 case 0 sLocaleName = "Heathrow Airport, Hounslow, Greater London, UK" uLocale.Latitude = 51.471439 uLocale.Longitude = -0.456802 uLocale.Elevation = 25 case 60 sLocaleName = "Praia International Airport, Praia, Sotavento Islands, Cape Verde" uLocale.Latitude = 14.9245 uLocale.Longitude = -23.4935 uLocale.Elevation = 70 case 120 sLocaleName = "Stanley, Falkland Islands" uLocale.Latitude = 51.70098 uLocale.Longitude = -57.849186 uLocale.Elevation = 37 case 180 sLocaleName = "Halifax / Stanfield International Airport, Nova Scotia, Canada" uLocale.Latitude = 44.880798 uLocale.Longitude = -63.508598 uLocale.Elevation = 145 case 210 sLocaleName = "Gander International Airport, Gander, Newfoundland, Canada" uLocale.Latitude = 48.936901 uLocale.Longitude = -54.5681 uLocale.Elevation = 151 case 240 sLocaleName = "Luis Munoz Marin International Airport, San Juan, Puerto Rico, USA" uLocale.Latitude = 18.439399 uLocale.Longitude = -66.002133 uLocale.Elevation = 3 case 300 sLocaleName = "John F Kennedy International Airport, New York, New York, USA" uLocale.Latitude = 40.6399278 uLocale.Longitude = -73.7786925 uLocale.Elevation = 4 case 360 sLocaleName = "Des Moines International Airport, Des Moines, Iowa, USA" uLocale.Latitude = 41.5339722 uLocale.Longitude = -93.6630833 uLocale.Elevation = 292 case 420 sLocaleName = "Salt Lake City International Airport, Salt Lake City, Utah, USA" uLocale.Latitude = 40.7883933 uLocale.Longitude = -111.9777733 uLocale.Elevation = 1290 case 480 sLocaleName = "Newport, Washington, USA" uLocale.Latitude = 48.1796277 uLocale.Longitude = -117.0432583 uLocale.Elevation = 658 case 540 sLocaleName = "Ted Stevens International Airport, Anchorage, Alaska, USA" uLocale.Latitude = 61.1740847 uLocale.Longitude = -149.9981375 uLocale.Elevation = 46 case 570 sLocaleName = "Faa'a International Airport, Papeete, French Polynesia, France" uLocale.Latitude = -17.553699 uLocale.Longitude = -149.606995 uLocale.Elevation = 2 case 600 sLocaleName = "Daniel K Inouye International Airport, Honululu, Hawaii, USA" uLocale.Latitude = 21.3178275 uLocale.Longitude = -157.9202627 uLocale.Elevation = 4 case 660 sLocaleName = "Pago Pago International Airport, American Samoa" uLocale.Latitude = -14.3316622 uLocale.Longitude = -170.7115031 uLocale.Elevation = 10 case 720 sLocaleName = "Wake Island Airfield, USA Minor Outlying Islands" uLocale.Latitude = 19.282489 uLocale.Longitude = 166.636661 uLocale.Elevation = 7 end select uLocale.Zone = (uLocale.Zone / 60.0) * -1 ENUM CONTROL_IDS IDC_ASOF_LABEL = 1001 IDC_DATEPICKER IDC_TIMEPICKER IDC_NOWBUTTON IDC_CURRENTTIMEZONE IDC_LOCATION IDC_STANDARDTZ IDC_DAYLIGHTSAVINGSBEGINS IDC_DAYLIGHTSAVINGSENDS IDC_TABCONTROL IDC_LVPAGE1 IDC_LVPAGE2 IDC_LVPAGE3 IDC_LVPAGE4 END ENUM DECLARE FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _ BYVAL hPrevInstance AS HINSTANCE, _ BYVAL pwszCmdLine AS WSTRING PTR, _ BYVAL nCmdShow AS LONG) AS LONG END wWinMain(GetModuleHandleW(NULL), NULL, wCOMMAND(), SW_NORMAL) ' // Creates the main window DIM SHARED pWindow AS CWindow = "cCalendar" ' // Forward declaration DECLARE FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT DECLARE FUNCTION TabPage1_WndProc(BYVAL hWnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT DECLARE FUNCTION TabPage2_WndProc(BYVAL hWnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT DECLARE FUNCTION TabPage3_WndProc(BYVAL hWnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT DECLARE FUNCTION TabPage4_WndProc(BYVAL hWnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT DECLARE SUB UpdateForm() ' ======================================================================================== ' Main ' ======================================================================================== FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _ BYVAL hPrevInstance AS HINSTANCE, _ BYVAL pwszCmdLine AS WSTRING PTR, _ BYVAL nCmdShow AS LONG) AS LONG ' // Set process DPI aware SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) ' // Enable visual styles without including a manifest file AfxEnableVisualStyles DIM hwndMain AS HWND = pWindow.Create(NULL, "Calendrical Calculations", @WndProc) ' // Sizes it by setting the wanted width and height of its client area pWindow.SetClientSize(756, 657) ' // Centers the window pWindow.Center ' // Set background color of main window pWindow.SetBackColor(RGB_LIGHTGRAY) pWindow.SmallIcon(LoadIcon(hInstance, MAKEINTRESOURCE(APPICON))) ' Add Controls DIM hCtl AS HWND = pWindow.AddControl("LABEL", hwndMain, IDC_ASOF_LABEL, "As of", 14, 30, 40, 15, WS_CHILD OR WS_VISIBLE OR SS_CENTER) pWindow.SetCtlColors(hCtl,pWindow.GetForeColor(hCtl),RGB_LIGHTGRAY) hCtl = pWindow.AddControl("DATETIMEPICKER", hwndMain, IDC_DATEPICKER, "Date", 60, 25 ,126, 27) CDtPicker.SetFormat(hCtl, "yyyy.MM.dd") hCtl = pWindow.AddControl("DATETIMEPICKER", hwndMain, IDC_TIMEPICKER, "Time", 198 ,25, 126, 27, WS_VISIBLE OR WS_TABSTOP OR DTS_TIMEFORMAT) CDtPicker.GetSystemtime(hCtl, uSystemTime) DIM pXpButton AS CXpButton = CXpButton(@pWindow, IDC_NOWBUTTON, "Now", 338,25, 31, 26) pXPButton.DisableTheming pXPButton.SetButtonBkColor(RGB_LIGHTGRAY) pXpButton.TextFormat = DT_CENTER OR DT_VCENTER OR DT_SINGLELINE pXPButton.SetTextBkColor(RGB_LIGHTGRAY, TRUE) hCtl = pWindow.AddControl("LABEL", hwndMain, IDC_LOCATION, "Location: " + sLocaleName, 14, 62, 524, 16, WS_VISIBLE) pWindow.SetCtlColors(hCtl,pWindow.GetForeColor(hCtl),RGB_LIGHTGRAY) hCtl = pWindow.AddControl("LABEL", hwndMain, IDC_STANDARDTZ, "Standard Time Zone", 14, 86, 406, 16, WS_VISIBLE) pWindow.SetCtlColors(hCtl,pWindow.GetForeColor(hCtl),RGB_LIGHTGRAY) hCtl = pWindow.AddControl("LABEL", hwndMain, IDC_CURRENTTIMEZONE, "current time zone", 382, 30, 362, 15, WS_VISIBLE) pWindow.SetCtlColors(hCtl,pWindow.GetForeColor(hCtl),RGB_LIGHTGRAY) hCtl = pWindow.AddControl("LABEL", hwndMain, IDC_DAYLIGHTSAVINGSBEGINS, "daylight savings begins", 14, 111, 406, 16, WS_VISIBLE) pWindow.SetCtlColors(hCtl,pWindow.GetForeColor(hCtl),RGB_LIGHTGRAY) hCtl = pWindow.AddControl("LABEL", hwndMain, IDC_DAYLIGHTSAVINGSENDS, "daylight savings ends", 14, 138, 406, 16, WS_VISIBLE) pWindow.SetCtlColors(hCtl,pWindow.GetForeColor(hCtl),RGB_LIGHTGRAY) DIM hTab AS HWND = pWindow.AddControl("TABCONTROL", hwndMain, IDC_TABCONTROL, "TabControl", 14, 167, 704, 448) ' // Anchor the control pWindow.AnchorControl(hTab, AFX_ANCHOR_HEIGHT_WIDTH) DIM pTabPage1 AS CTabPage PTR = NEW CTabPage pTabPage1->InsertPage(hTab, 0, "Date Types", -1, @TabPage1_WndProc) 'pTabPage1->SetBackColor(RGB_LIGHTGRAY) DIM pTabPage2 AS CTabPage PTR = NEW CTabPage pTabPage2->InsertPage(hTab, 1, "Holidays", -1, @TabPage2_WndProc) 'pTabPage2->SetBackColor(RGB_LIGHTGRAY) DIM pTabPage3 AS CTabPage PTR = NEW CTabPage pTabPage3->InsertPage(hTab, 2, "Events", -1, @TabPage3_WndProc) 'pTabPage3->SetBackColor(RGB_LIGHTGRAY) DIM pTabPage4 AS CTabPage PTR = NEW CTabPage pTabPage4->InsertPage(hTab, 3, "Miscellaneous", -1, @TabPage4_WndProc) 'pTabPage4->SetBackColor(RGB_LIGHTGRAY) ' // Displays the first tab page ShowWindow pTabPage1->hTabPage, SW_SHOW ' // Set the focus to the first tab TabCtrl_SetCurFocus(hTab, 0) ' // Displays the window and dispatches the Windows messages ' // Post for update form PostMessageW hwndMain, WM_USER + 99, 0, 0 FUNCTION = pWindow.DoEvents(nCmdShow) END FUNCTION ' ======================================================================================== ' Window procedure ' ======================================================================================== FUNCTION WndProc (BYVAL hWnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT SELECT CASE uMsg CASE WM_USER + 99 ' // Update Form for date and time UpdateForm() CASE WM_CREATE RETURN 0 CASE WM_COMMAND SELECT CASE LOWORD(wParam) CASE IDCANCEL ' // If ESC key pressed, close the application sending an WM_CLOSE message IF HIWORD(wParam) = BN_CLICKED THEN SendMessageW hwnd, WM_CLOSE, 0, 0 RETURN 0 END IF CASE IDC_NOWBUTTON '// Now Button clicked, reset date and time to current IF HIWORD(wParam) = BN_CLICKED THEN DIM hwndMain AS HWND = pWindow.hWindow DIM uCurrentSystemTime AS SYSTEMTIME = AfxLocalSystemTime() DIM hCtL AS HWND = AfxGetControlHandle (hwndMain, IDC_TIMEPICKER) CDtPicker.SetSystemtime(hCtl, GDT_VALID, uCurrentSystemTime) hCtL = AfxGetControlHandle (hwndMain, IDC_DATEPICKER) CDtPicker.SetSystemtime(hCtl, GDT_VALID, uCurrentSystemTime) PostMessageW hWnd, WM_USER + 99, 0, 0 RETURN 0 END IF END SELECT CASE WM_NOTIFY DIM uFromSystemDate AS SYSTEMTIME DIM pTabPage AS CTabPage PTR ' // Tab page object reference DIM dtp AS NMDATETIMECHANGE CBNMTYPESET(dtp, wParam, lParam) ' // Information about a notification message SELECT CASE dtp.nmhdr.idFrom CASE IDC_TABCONTROL SELECT CASE dtp.nmhdr.code CASE TCN_SELCHANGE ' // Show the selected page pTabPage = AfxCTabPagePtr(dtp.nmhdr.hwndFrom, -1) IF pTabPage THEN ..ShowWindow pTabPage->hTabPage, SW_SHOW CASE TCN_SELCHANGING ' // Hide the current page pTabPage = AfxCTabPagePtr(dtp.nmhdr.hwndFrom, -1) IF pTabPage THEN ..ShowWindow pTabPage->hTabPage, SW_HIDE END SELECT CASE IDC_DATEPICKER SELECT CASE dtp.nmhdr.code CASE DTN_DATETIMECHANGE ' // Date Picker sends two DTN_DATETIMECHANGE messages. '// Check if our global SYSTIME variable is different before updating for date and time CDtPicker.GetSystemtime(dtp.nmhdr.hwndFrom, uFromSystemDate) IF (uSystemDate.wYear <> uFromSystemDate.wYear) OR (uSystemDate.wMonth <> uFromSystemDate.wMonth) OR (uSystemDate.wDay <> uFromSystemDate.wDay) THEN PostMessageW hWnd, WM_USER + 99, 0, 0 END IF END SELECT CASE IDC_TIMEPICKER SELECT CASE dtp.nmhdr.code CASE DTN_DATETIMECHANGE PostMessageW hWnd, WM_USER + 99, 0, 0 END SELECT END SELECT CASE WM_SIZE ' // Get the tab control handle DIM hTab AS HWND = GetDlgItem(hwnd, IDC_TABCONTROL) ' // Get a pointer to the tab page DIM pTabPage AS CTabPage PTR = AfxCTabPagePtr(hTab, -1) ' // Resize the tab pages IF pTabPage THEN pTabPage->ResizePages RETURN 0 CASE WM_DESTROY ' // Destroy the tab pages DIM hTab AS HWND = GetDlgItem(hwnd, IDC_TABCONTROL) AfxDestroyAllTabPages(hTab) PostQuitMessage(0) EXIT FUNCTION END SELECT ' // Default processing of Windows messages FUNCTION = DefWindowProcW(hWnd, uMsg, wParam, lParam) END FUNCTION ' ======================================================================================== ' Tab page 1 window procedure ' ======================================================================================== FUNCTION TabPage1_WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT SELECT CASE uMsg CASE WM_CREATE PostMessageW hwnd, WM_USER + 1, 0, 0 CASE WM_USER + 1 ' Now the tab page has been inserted and has its final size DIM pTabPage AS CTabPage PTR = AfxCTabPagePtr(GetParent(hwnd), 0) DIM hListView AS HWND = pTabPage->AddControl("LISTVIEW", hwnd, IDC_LVPAGE1) ' // Get the width and height of the tab page DIM w AS LONG = pTabPage->Width DIM h AS LONG = pTabPage->Height ' // Set the listview position and visible size pTabPage->SetWindowPos hListView, NULL, 0, 0, w, h, SWP_NOZORDER ' // Anchor the ListView pTabPage->AnchorControl(IDC_LVPAGE1, AFX_ANCHOR_HEIGHT_WIDTH) CListView.SetExtendedListViewStyle (hListView, LVS_EX_GRIDLINES) CListView.AddColumn(hListView, 0, "Name", pWindow.ScaleX(190)) CListView.AddColumn(hListView, 1, "Date", pWindow.ScaleX(500)) EXIT FUNCTION END SELECT FUNCTION = DefWindowProcW(hWnd, uMsg, wParam, lParam) END FUNCTION ' ======================================================================================== ' Tab page 2 window procedure ' ======================================================================================== FUNCTION TabPage2_WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT SELECT CASE uMsg CASE WM_CREATE PostMessageW hwnd, WM_USER + 2, 0, 0 CASE WM_USER + 2 ' Now the tab page has been inserted and has its final size DIM pTabPage AS CTabPage PTR = AfxCTabPagePtr(GetParent(hwnd), 1) DIM hListView AS HWND = pTabPage->AddControl("LISTVIEW", hwnd, IDC_LVPAGE2) ' // Get the width and height of the tab page DIM w AS LONG = pTabPage->Width DIM h AS LONG = pTabPage->Height ' // Set the listview position and visible size pTabPage->SetWindowPos hListView, NULL, 0, 0, w, h, SWP_NOZORDER ' // Anchor the ListView pTabPage->AnchorControl(IDC_LVPAGE2, AFX_ANCHOR_HEIGHT_WIDTH) CListView.SetExtendedListViewStyle (hListView, LVS_EX_GRIDLINES) CListView.AddColumn(hListView, 0, "Calendar", pWindow.ScaleX(100)) CListView.AddColumn(hListView, 1, "Holiday", pWindow.ScaleX(200)) CListView.AddColumn(hListView, 2, "Observed Date", pWindow.ScaleX(385)) EXIT FUNCTION END SELECT FUNCTION = DefWindowProcW(hWnd, uMsg, wParam, lParam) END FUNCTION ' ======================================================================================== ' Tab page 3 window procedure ' ======================================================================================== FUNCTION TabPage3_WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT SELECT CASE uMsg CASE WM_CREATE PostMessageW hwnd, WM_USER + 3, 0, 0 CASE WM_USER + 3 ' Now the tab page has been inserted and has its final size DIM pTabPage AS CTabPage PTR = AfxCTabPagePtr(GetParent(hwnd), 2) DIM hListView AS HWND = pTabPage->AddControl("LISTVIEW", hwnd, IDC_LVPAGE3) ' // Get the width and height of the tab page DIM w AS LONG = pTabPage->Width DIM h AS LONG = pTabPage->Height ' // Set the listview position and visible size pTabPage->SetWindowPos hListView, NULL, 0, 0, w, h, SWP_NOZORDER ' // Anchor the ListView pTabPage->AnchorControl(IDC_LVPAGE3, AFX_ANCHOR_HEIGHT_WIDTH) CListView.SetExtendedListViewStyle (hListView, LVS_EX_GRIDLINES) CListView.AddColumn(hListView, 0, "Event", pWindow.ScaleX(100)) CListView.AddColumn(hListView, 1, "Name", pWindow.ScaleX(200)) CListView.AddColumn(hListView, 2, "Date", pWindow.ScaleX(385)) EXIT FUNCTION END SELECT FUNCTION = DefWindowProcW(hWnd, uMsg, wParam, lParam) END FUNCTION ' ======================================================================================== ' Tab page 4 window procedure ' ======================================================================================== FUNCTION TabPage4_WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT SELECT CASE uMsg CASE WM_CREATE PostMessageW hwnd, WM_USER + 4, 0, 0 CASE WM_USER + 4 ' Now the tab page has been inserted and has its final size DIM pTabPage AS CTabPage PTR = AfxCTabPagePtr(GetParent(hwnd), 3) DIM hListView AS HWND = pTabPage->AddControl("LISTVIEW", hwnd, IDC_LVPAGE4) ' // Get the width and height of the tab page DIM w AS LONG = pTabPage->Width DIM h AS LONG = pTabPage->Height ' // Set the listview position and visible size pTabPage->SetWindowPos hListView, NULL, 0, 0, w, h, SWP_NOZORDER ' // Anchor the ListView pTabPage->AnchorControl(IDC_LVPAGE4, AFX_ANCHOR_HEIGHT_WIDTH) CListView.SetExtendedListViewStyle (hListView, LVS_EX_GRIDLINES) CListView.AddColumn(hListView, 0, "Name", pWindow.ScaleX(190)) CListView.AddColumn(hListView, 1, "Description", pWindow.ScaleX(500)) EXIT FUNCTION END SELECT FUNCTION = DefWindowProcW(hWnd, uMsg, wParam, lParam) END FUNCTION ' ======================================================================================== ' Update for current date and time ' ======================================================================================== SUB UpdateForm () ' Get main window handle DIM hwnd AS HWND = pWindow.hWindow DIM nZoneHour AS DOUBLE = uLocale.Zone DIM nZoneMinute AS LONG = (uLocale.Zone - nZoneHour) * 60 DIM wAny AS WSTRING * 260 = "" Dim uGregDaylight AS GREGORIAN_DATE DIM nIndex As Long Dim uJulian as JULIAN_DATE Dim uISO as ISO_DATE Dim uChinese as CHINESE_DATE Dim sChineseYearName as DWSTRING Dim sChineseMonthName as DWSTRING Dim sChineseYearAugury as DWSTRING Dim uHebrew as HEBREW_DATE Dim uIslamic as ISLAMIC_DATE Dim uPersian as PERSIAN_DATE Dim uHinduLunar as HINDU_LUNAR_DATE Dim uHinduSolar as HINDU_SOLAR_DATE Dim uCoptic as COPTIC_DATE Dim uEthiopic as ETHIOPIC_DATE Dim uRoman as ROMAN_DATE Dim uEgyptian as EGYPTIAN_DATE Dim uArmenian as ARMENIAN_DATE Dim uBahai as BAHAI_DATE Dim uTibetan as TIBETAN_DATE Dim uSamaritan as SAMARITAN_DATE dim nExcel1904 as double dim nExcel1900 as double dim nUnix as longint Dim uGreg1 as GREGORIAN_DATE Dim uGreg2 as GREGORIAN_DATE Dim arRules() as DATE_CALCULATION dim iIndex as long dim nEventTime as longint dim bBogus as boolean Dim nMonthBegin as LongInt Dim nMonthEnd as LongInt Dim arPhases() as LUNAR_PHASES dim sLunarPhase as DWSTRING dim nFromTime as LongInt dim nToTime as longint Dim arLunarTimes() as LUNAR_RISE_AND_SET Dim nIllumination as double Dim bWaxing as BOOLEAN Dim bCrescent as BOOLEAN Dim arFiscalYears() as Long Dim arHistory(0) as HISTORY_MONTHS Dim nHistoryMonth as Short Dim nHistoryYear as Long Dim arSummary() as Double Dim arUpdates(0) as Double Dim uTime as TIME_DURATION Dim nSerialStart as LongInt Dim nSerialEnd as LongInt Dim uHebrewBirth as HEBREW_DATE Dim uHebrewBirthDay as HEBREW_DATE DIM hCtl AS HWND = AfxGetControlHandle (hwnd, IDC_DATEPICKER) CDtPicker.GetSystemtime(hCtl, uSystemDate) hCtL = AfxGetControlHandle (hwnd, IDC_TIMEPICKER) CDtPicker.GetSystemtime(hCtl, uSystemTime) uGregIn.Day = uSystemDate.wDay uGregIn.Month = uSystemDate.wMonth uGregIn.Year = uSystemDate.wYear uGregIn.Hour = uSystemTime.wHour uGregIn.Minute = uSystemTime.wMinute uGregIn.Second = uSystemTime.wSecond nSerial = oCalendar.SerialFromGregorian(uGregIn) hCtl = AfxGetControlHandle (hwnd, IDC_STANDARDTZ) wAny = "Standard Time Zone: " + FORMAT(nZoneHour,"00") + ":" + FORMAT(nZoneMinute,"00") + _ " (Daylight Savings rules are " + IIF(uLocale.bApplyDaylightSavings = True,"","not ") + "observed.)" SendMessageW(hCtl, WM_SETTEXT, 0, CAST(LPARAM, @wAny)) If uLocale.bApplyDaylightSavings = True then arDaylight(0).Year = uSystemDate.wYear arDaylight(1).Year = uSystemDate.wYear oCalendar.DateCalculation(arDaylight()) uLocale.DaylightSavingsBegins = arDaylight(0).ObservedDays1 + nDaylightTime uLocale.DaylightSavingsEnds = arDaylight(1).ObservedDays1 + nStandardTime oCalendar.GregorianFromSerial(uLocale.DaylightSavingsBegins,uGregDaylight) wAny = arDaylight(0).Name + " on " + _ str(uGregDaylight.Year) + "." + format(uGregDaylight.Month,"00") + _ "." + format(uGregDaylight.Day,"00") + " at " + _ format(uGregDaylight.Hour,"00") + ":" + format(uGregDaylight.Minute,"00") hCtl = AfxGetControlHandle (hwnd, IDC_DAYLIGHTSAVINGSBEGINS) SendMessageW(hCtl, WM_SETTEXT, 0, CAST(LPARAM, @wAny)) oCalendar.GregorianFromSerial(uLocale.DaylightSavingsEnds,uGregDaylight) wAny = arDaylight(1).Name + " on " + _ str(uGregDaylight.Year) + "." + format(uGregDaylight.Month,"00") + _ "." + format(uGregDaylight.Day,"00") + " at " + _ format(uGregDaylight.Hour,"00") + ":" + format(uGregDaylight.Minute,"00") hCtl = AfxGetControlHandle (hwnd, IDC_DAYLIGHTSAVINGSENDS) SendMessageW(hCtl, WM_SETTEXT, 0, CAST(LPARAM, @wAny)) Else wAny = "Daylight Rules are not defined" hCtl = AfxGetControlHandle (hwnd, IDC_DAYLIGHTSAVINGSBEGINS) SendMessageW(hCtl, WM_SETTEXT, 0, CAST(LPARAM, @wAny)) hCtl = AfxGetControlHandle (hwnd, IDC_DAYLIGHTSAVINGSENDS) SendMessageW(hCtl, WM_SETTEXT, 0, CAST(LPARAM, @wAny)) End If hCtl = AfxGetControlHandle (hwnd, IDC_CURRENTTIMEZONE) wAny = iif(uLocale.bApplyDaylightSavings = True Andalso nSerial >= uLocale.DaylightSavingsBegins Andalso nSerial < uLocale.DaylightSavingsEnds, _ sDaylightName,sStandardName) SendMessageW(hCtl, WM_SETTEXT, 0, CAST(LPARAM, @wAny)) ' Supported Calendars DIM hListView AS HWND = AfxGetControlHandle (hwnd, IDC_LVPAGE1) ' Clear List CListView.DeleteAllItems (BYVAL hListView) ' Calculate Supported Calendars DIM nSerial AS LongInt = oCalendar.SerialFromGregorian(uGregIn) oCalendar.JulianFromSerial(nSerial,uJulian) oCalendar.ISOFromSerial(nSerial,uISO) oCalendar.ChineseFromSerial(nSerial,uChinese) oCalendar.HebrewFromSerial(nSerial,uHebrew) oCalendar.IslamicFromSerial(nSerial,uIslamic) oCalendar.PersianFromSerial(nSerial,uPersian) oCalendar.HinduLunarFromSerial(nSerial,uHinduLunar) oCalendar.CopticFromSerial(nSerial,uCoptic) oCalendar.HinduSolarFromSerial(nSerial,uHinduSolar) oCalendar.EthiopicFromSerial(nSerial,uEthiopic) oCalendar.EgyptianFromSerial(nSerial,uEgyptian) oCalendar.ArmenianFromSerial(nSerial,uArmenian) oCalendar.BahaiFromSerial(nSerial,uBahai) oCalendar.RomanFromSerial(nSerial,uRoman) oCalendar.TibetanFromSerial(nSerial,uTibetan) oCalendar.SamaritanFromSerial(nSerial,uSamaritan) nExcel1900 = oCalendar.ExcelFromSerial(nSerial,False) nExcel1904 = oCalendar.ExcelFromSerial(nSerial,True) nUnix = oCalendar.UnixFromSerial(nSerial) ' Chinese year marriage augury Select Case uChinese.YearAugury Case cCalendarClass.CHINESE_WIDOW_YEAR sChineseYearAugury = ", Widow Year) " Case cCalendarClass.CHINESE_BLIND_YEAR sChineseYearAugury = ", Blind Year) " Case cCalendarClass.CHINESE_BRIGHT_YEAR sChineseYearAugury = ", Bright Year) " Case Else sChineseYearAugury = ", Double Bright Year) " End Select ' Chinese Year and Month names Select Case uChinese.YearAnimal Case cCalendarClass.CHINESE_RAT sChineseYearName = " (Rat" + sChineseYearAugury Case cCalendarClass.CHINESE_OX sChineseYearName = " (Ox" + sChineseYearAugury Case cCalendarClass.CHINESE_TIGER sChineseYearName = " (Tiger" + sChineseYearAugury Case cCalendarClass.CHINESE_RABBIT sChineseYearName = " (Rabbit" + sChineseYearAugury Case cCalendarClass.CHINESE_DRAGON sChineseYearName = " (Dragon" + sChineseYearAugury Case cCalendarClass.CHINESE_SNAKE sChineseYearName = " (Snake" + sChineseYearAugury Case cCalendarClass.CHINESE_HORSE sChineseYearName = " (Horse" + sChineseYearAugury Case cCalendarClass.CHINESE_GOAT sChineseYearName = " (Goat" + sChineseYearAugury Case cCalendarClass.CHINESE_MONKEY sChineseYearName = " (Monkey" + sChineseYearAugury Case cCalendarClass.CHINESE_ROOSTER sChineseYearName = " (Rooster" + sChineseYearAugury Case cCalendarClass.CHINESE_DOG sChineseYearName = " (Dog" + sChineseYearAugury Case cCalendarClass.CHINESE_PIG sChineseYearName = " (Pig" + sChineseYearAugury Case Else sChineseYearName = " (Unknown" + sChineseYearAugury End Select ' Chinese Leap Months do not have names If uChinese.LeapMonth = True Then sChineseMonthName = "" Else Select Case uChinese.MonthAnimal Case cCalendarClass.CHINESE_RAT sChineseMonthName = " (Zi Rat) " Case cCalendarClass.CHINESE_OX sChineseMonthName = " (Chou Ox) " Case cCalendarClass.CHINESE_TIGER sChineseMonthName = " (Yin Tiger) " Case cCalendarClass.CHINESE_RABBIT sChineseMonthName = " (Mao Rabbit) " Case cCalendarClass.CHINESE_DRAGON sChineseMonthName = " (Chen Dragon) " Case cCalendarClass.CHINESE_SNAKE sChineseMonthName = " (Si Snake) " Case cCalendarClass.CHINESE_HORSE sChineseMonthName = " (Wu Horse) " Case cCalendarClass.CHINESE_GOAT sChineseMonthName = " (Wei Sheep) " Case cCalendarClass.CHINESE_MONKEY sChineseMonthName = " (Shen Monkey) " Case cCalendarClass.CHINESE_ROOSTER sChineseMonthName = " (You Rooster) " Case cCalendarClass.CHINESE_DOG sChineseMonthName = " (Xu Dog) " Case cCalendarClass.CHINESE_PIG sChineseMonthName = " (Hai Pig) " Case Else sChineseMonthName = " (Unknown) " End Select End If ListView_AddItem(hListView, 0, 0, "Serial") wAny = str(nSerial) ListView_SetItemText(hListView, 0, 1, @wAny) ListView_AddItem(hListView, 1, 0, "Gregorian") wAny = Str(uGregIn.Year) + "." + Format(uGregIn.Month,"00") + "." + Format(uGregIn.Day,"00") ListView_SetItemText(hListView, 1, 1, @wAny) ListView_AddItem(hListView, 2, 0, "ISO") wAny = Str(uISO.Year) + "." + Str(uISO.Week) + "." + Str(uISO.Day) + _ " (Year has " + Str(IIf(uISO.LongYear = False,52,53)) + " weeks)" ListView_SetItemText(hListView, 2, 1, @wAny) ListView_AddItem(hListView, 3, 0, "Julian") wAny = Str(uJulian.Year) + "." + Format(uJulian.Month,"00") + "." + Format(uJulian.Day,"00") ListView_SetItemText(hListView, 3, 1, @wAny) ListView_AddItem(hListView, 4, 0, "Chinese") wAny = str(uChinese.Cycle * 60 + uChinese.Year) + " AH (" + _ "Cycle " + Str(uChinese.Cycle) + " Year " + Str(uChinese.Year) + sChineseYearName + ")" + _ IIF(uChinese.LeapMonth = True," Leap Month "," Month ") + Str(uChinese.Month) + _ sChineseMonthName + " Day " + Str(uChinese.Day) ListView_SetItemText(hListView, 4, 1, @wAny) ListView_AddItem(hListView, 5, 0, "Hebrew") wAny = Str(uHebrew.Year) + IIf(uHebrew.SabbaticalYear = True, " (Sabbatical Year).",".") + _ Format(uHebrew.Month,"00") + "." + Format(uHebrew.Day,"00") ListView_SetItemText(hListView, 5, 1, @wAny) ListView_AddItem(hListView, 6, 0, "Persian") wAny = Str(uPersian.Year) + "." + Format(uPersian.Month,"00") + "." + Format(uPersian.Day,"00") ListView_SetItemText(hListView, 6, 1, @wAny) ListView_AddItem(hListView, 7, 0, "Hindu Lunar") wAny = Str(uHinduLunar.Year) + "." + Format(uHinduLunar.Month,"00") + IIF(uHinduLunar.LeapMonth = True, " (Leap).",".") + _ Format(uHinduLunar.Day,"00") + iif(uHinduLunar.LeapDay = True, " (Leap)","") ListView_SetItemText(hListView, 7, 1, @wAny) ListView_AddItem(hListView, 8, 0, "Hindu Solar") wAny = Str(uHinduLunar.Year) + "." + Format(uHinduLunar.Month,"00") + IIF(uHinduLunar.LeapMonth = True, " (Leap).",".") + _ Str(uHinduSolar.Year) + "." + Format(uHinduSolar.Month,"00") + "." + Format(uHinduSolar.Day,"00") ListView_SetItemText(hListView, 8, 1, @wAny) ListView_AddItem(hListView, 9, 0, "Coptic") wAny = Str(uCoptic.Year) + "." + Format(uCoptic.Month,"00") + "." + Format(uCoptic.Day,"00") ListView_SetItemText(hListView, 9, 1, @wAny) ListView_AddItem(hListView, 10, 0, "Ethiopic") wAny = Str(uEthiopic.Year) + "." + Format(uEthiopic.Month,"00") + "." + Format(uEthiopic.Day,"00") ListView_SetItemText(hListView, 10, 1, @wAny) ListView_AddItem(hListView, 11, 0, "Armenian") wAny = Str(uArmenian.Year) + "." + Format(uArmenian.Month,"00") + "." + Format(uArmenian.Day,"00") ListView_SetItemText(hListView, 11, 1, @wAny) ListView_AddItem(hListView, 12, 0, "Samaritan") wAny = Str(uSamaritan.Year) + "." + Format(uSamaritan.Month,"00") + "." + Format(uSamaritan.Day,"00") ListView_SetItemText(hListView, 12, 1, @wAny) ListView_AddItem(hListView, 13, 0, "Bahai") wAny = "Cycle " + Str(uBahai.Cycle) + " " + Format(uBahai.Year,"00") + "." + Format(uBahai.Month,"00") + "." + _ str(uBahai.Year) + " Kull-i-Shay " + Str(uBahai.Major) + " " + Str(uBahai.Era) + " B.E." ListView_SetItemText(hListView, 13, 1, @wAny) ListView_AddItem(hListView, 14, 0, "Roman") wAny = str(uRoman.Year) + "." + Format(uRoman.Month,"00") + " " + IIf(uRoman.Count > 0,Str(uRoman.Count) + " days until ","") + _ IIf(uRoman.Event = cCalendarClass.KALENDS,"Kalends",IIf(uRoman.Event = cCalendarClass.NONES,"Nones","Ides")) ListView_SetItemText(hListView, 14, 1, @wAny) ListView_AddItem(hListView, 15, 0, "Tibetan") wAny = Str(uTibetan.Year) + "." + Format(uTibetan.Month,"00") + iif(uTibetan.LeapMonth = True, " (Leap).",".") + _ Format(uTibetan.Day,"00") + iif(uTibetan.LeapDay = True, " (Leap)","") ListView_SetItemText(hListView, 15, 1, @wAny) ListView_AddItem(hListView, 16, 0, "Excel (1900 base)") wAny = str(nExcel1900) ListView_SetItemText(hListView, 16, 1, @wAny) ListView_AddItem(hListView, 17, 0, "Excel (1904 base)") wAny = str(nExcel1904) ListView_SetItemText(hListView, 17, 1, @wAny) ListView_AddItem(hListView, 18, 0, "Unix") wAny = str(nUnix) ListView_SetItemText(hListView, 18, 1, @wAny) ' Holidays hListView = AfxGetControlHandle (hwnd, IDC_LVPAGE2) ' Clear List CListView.DeleteAllItems (BYVAL hListView) ' Calculate Supported Holidays ' US Federal Holidays arUSAFederal(0).Year = uGregIn.Year arUSAFederal(1).Year = uGregIn.Year arUSAFederal(2).Year = uGregIn.Year arUSAFederal(3).Year = uGregIn.Year arUSAFederal(4).Year = uGregIn.Year arUSAFederal(5).Year = uGregIn.Year arUSAFederal(6).Year = uGregIn.Year arUSAFederal(7).Year = uGregIn.Year arUSAFederal(8).Year = uGregIn.Year arUSAFederal(9).Year = uGregIn.Year arUSAFederal(10).Year = uGregIn.Year + 1 oCalendar.DateCalculation(arUSAFederal()) DIM nRow AS LONGINT = -1 For iIndex = 0 To UBound(arUSAFederal) nRow = nRow + 1 oCalendar.GregorianFromSerial(arUSAFederal(iIndex).ObservedDays1,uGreg1) oCalendar.GregorianFromSerial(arUSAFederal(iIndex).ObservedDays2,uGreg2) ListView_AddItem(hListView, nRow, 0, "Gregorian") wAny = arUSAFederal(iIndex).Name ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + "." + format(uGreg1.Day,"00") + _ IIf(arUSAFederal(iIndex).Observed = True, _ IIf(arUSAFederal(iIndex).ObservedDays1 = arUSAFederal(iIndex).ObservedDays2,""," (Observed on " + _ Str(uGreg2.Year) + "." + format(uGreg2.Month,"00") + "." + _ format(uGreg2.Day,"00") + ")")," (Not Observed)") ListView_SetItemText(hListView, nRow, 2, @wAny) Next ' Chinese Holidays ReDim arRules(0 To 12) arRules(0).Name = "Chinese New Year" arRules(0).Month = 1 arRules(0).Day = 1 arRules(0).Year = uGregIn.Year arRules(0).RuleClass = cCalendarClass.CHINESE_RULES arRules(0).Rule = cCalendarClass.NO_RULES arRules(0).NonBusinessDate = False arRules(1).Name = "Lantern Festival" arRules(1).Month = 1 arRules(1).Day = 15 arRules(1).Year = uGregIn.Year arRules(1).RuleClass = cCalendarClass.CHINESE_RULES arRules(1).Rule = cCalendarClass.NO_RULES arRules(1).NonBusinessDate = False arRules(2).Name = "Blue Dragon Festival" arRules(2).Month = 2 arRules(2).Day = 2 arRules(2).Year = uGregIn.Year arRules(2).RuleClass = cCalendarClass.CHINESE_RULES arRules(2).Rule = cCalendarClass.NO_RULES arRules(2).NonBusinessDate = False arRules(3).Name = "Ching Ming Festival" arRules(3).Year = uGregIn.Year arRules(3).RuleClass = cCalendarClass.CHINESE_RULES arRules(3).Rule = cCalendarClass.CHINESE_QINGMING arRules(3).NonBusinessDate = False arRules(4).Name = "Shangsi Festival" arRules(4).Month = 3 arRules(4).Day = 3 arRules(4).Year = uGregIn.Year arRules(4).RuleClass = cCalendarClass.CHINESE_RULES arRules(4).Rule = cCalendarClass.NO_RULES arRules(4).NonBusinessDate = False arRules(5).Name = "Dragon Boat Festival" arRules(5).Month = 5 arRules(5).Day = 5 arRules(5).Year = uGregIn.Year arRules(5).RuleClass = cCalendarClass.CHINESE_RULES arRules(5).Rule = cCalendarClass.NO_RULES arRules(5).NonBusinessDate = False arRules(6).Name = "Qixi Festival" arRules(6).Month = 7 arRules(6).Day = 7 arRules(6).Year = uGregIn.Year arRules(6).RuleClass = cCalendarClass.CHINESE_RULES arRules(6).Rule = cCalendarClass.NO_RULES arRules(6).NonBusinessDate = False arRules(7).Name = "Ghost Festival" arRules(7).Month = 7 arRules(7).Day = 15 arRules(7).Year = uGregIn.Year arRules(7).RuleClass = cCalendarClass.CHINESE_RULES arRules(7).Rule = cCalendarClass.NO_RULES arRules(7).NonBusinessDate = False arRules(8).Name = "Mid Autumn Festival" arRules(8).Month = 8 arRules(8).Day = 15 arRules(8).Year = uGregIn.Year arRules(8).RuleClass = cCalendarClass.CHINESE_RULES arRules(8).Rule = cCalendarClass.NO_RULES arRules(8).NonBusinessDate = False arRules(9).Name = "Double Nine Festival" arRules(9).Month = 9 arRules(9).Day = 9 arRules(9).Year = uGregIn.Year arRules(9).RuleClass = cCalendarClass.CHINESE_RULES arRules(9).Rule = cCalendarClass.NO_RULES arRules(9).NonBusinessDate = False arRules(10).Name = "Spirit Festival" arRules(10).Month = 10 arRules(10).Day = 15 arRules(10).Year = uGregIn.Year arRules(10).RuleClass = cCalendarClass.CHINESE_RULES arRules(10).Rule = cCalendarClass.NO_RULES arRules(10).NonBusinessDate = False arRules(11).Name = "Winter Solstice" arRules(11).Year = uGregIn.Year arRules(11).RuleClass = cCalendarClass.CHINESE_RULES arRules(11).Rule = cCalendarClass.CHINESE_WINTERSOLSTICE arRules(11).NonBusinessDate = False arRules(12).Name = "Laba Festival" arRules(12).Month = 12 arRules(12).Day = 8 arRules(12).Year = uGregIn.Year arRules(12).RuleClass = cCalendarClass.CHINESE_RULES arRules(12).Rule = cCalendarClass.NO_RULES arRules(12).NonBusinessDate = False oCalendar.DateCalculation(arRules()) For iIndex = 0 To UBound(arRules) nRow = nRow + 1 oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays1,uGreg1) oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays2,uGreg2) ListView_AddItem(hListView, nRow, 0, "Chinese") wAny = arRules(iIndex).Name ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + "." + format(uGreg1.Day,"00") + _ IIf(arRules(iIndex).Observed = True, _ IIf(arRules(iIndex).ObservedDays1 = arRules(iIndex).ObservedDays2,""," (Observed on " + _ Str(uGreg2.Year) + "." + format(uGreg2.Month,"00") + "." + _ format(uGreg2.Day,"00") + ")")," (Not Observed)") ListView_SetItemText(hListView, nRow, 2, @wAny) Next ' Hebrew Holidays ReDim arRules(0 To 14) arRules(0).Name = "Rosh HaShana" arRules(0).Month = cCalendarClass.TISHRI arRules(0).Day = 1 arRules(0).Year = uGregIn.Year arRules(0).RuleClass = cCalendarClass.HEBREW_RULES arRules(0).Rule = cCalendarClass.NO_RULES arRules(0).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(0).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(0).SundayRule = cCalendarClass.NO_SUNDAY_RULE arRules(0).YearRule = cCalendarClass.ALL_YEARS arRules(0).NonBusinessDate = False arRules(1).Name = "Yom Kippur" arRules(1).Month = cCalendarClass.TISHRI arRules(1).Day = 10 arRules(1).Year = uGregIn.Year arRules(1).RuleClass = cCalendarClass.HEBREW_RULES arRules(1).Rule = cCalendarClass.NO_RULES arRules(1).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(1).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(1).SundayRule = cCalendarClass.NO_SUNDAY_RULE arRules(1).YearRule = cCalendarClass.ALL_YEARS arRules(1).NonBusinessDate = False arRules(2).Name = "Sukkot" arRules(2).Month = cCalendarClass.TISHRI arRules(2).Day = 15 arRules(2).Year = uGregIn.Year arRules(2).RuleClass = cCalendarClass.HEBREW_RULES arRules(2).Rule = cCalendarClass.NO_RULES arRules(2).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(2).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(2).SundayRule = cCalendarClass.NO_SUNDAY_RULE arRules(2).YearRule = cCalendarClass.ALL_YEARS arRules(2).NonBusinessDate = False arRules(3).Name = "Sh'mini Atzeret" arRules(3).Month = cCalendarClass.TISHRI arRules(3).Day = 22 arRules(3).Year = uGregIn.Year arRules(3).RuleClass = cCalendarClass.HEBREW_RULES arRules(3).Rule = cCalendarClass.NO_RULES arRules(3).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(3).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(3).SundayRule = cCalendarClass.NO_SUNDAY_RULE arRules(3).YearRule = cCalendarClass.ALL_YEARS arRules(3).NonBusinessDate = False arRules(4).Name = "Hanukkah" arRules(4).Month = cCalendarClass.KISLEV arRules(4).Day = 25 arRules(4).Year = uGregIn.Year arRules(4).RuleClass = cCalendarClass.HEBREW_RULES arRules(4).Rule = cCalendarClass.NO_RULES arRules(4).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(4).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(4).SundayRule = cCalendarClass.NO_SUNDAY_RULE arRules(4).YearRule = cCalendarClass.ALL_YEARS arRules(4).NonBusinessDate = False arRules(5).Name = "Purim" arRules(5).Month = cCalendarClass.ADAR arRules(5).Day = 14 arRules(5).Year = uGregIn.Year arRules(5).RuleClass = cCalendarClass.HEBREW_RULES arRules(5).Rule = cCalendarClass.NO_RULES arRules(5).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(5).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(5).SundayRule = cCalendarClass.NO_SUNDAY_RULE arRules(5).YearRule = cCalendarClass.ALL_YEARS arRules(5).NonBusinessDate = False arRules(6).Name = "Passover" arRules(6).Month = cCalendarClass.NISAN arRules(6).Day = 15 arRules(6).Year = uGregIn.Year arRules(6).RuleClass = cCalendarClass.HEBREW_RULES arRules(6).Rule = cCalendarClass.NO_RULES arRules(6).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(6).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(6).SundayRule = cCalendarClass.NO_SUNDAY_RULE arRules(6).YearRule = cCalendarClass.ALL_YEARS arRules(6).NonBusinessDate = False arRules(7).Name = "Yom HaShoah" arRules(7).Month = cCalendarClass.NISAN arRules(7).Day = 27 arRules(7).Year = uGregIn.Year arRules(7).RuleClass = cCalendarClass.HEBREW_RULES arRules(7).Rule = cCalendarClass.NO_RULES arRules(7).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(7).FridayRule = cCalendarClass.FRIDAY_OBSERVED_ON_THURSDAY arRules(7).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(7).SundayRule = cCalendarClass.SUNDAY_OBSERVED_ON_MONDAY arRules(7).YearRule = cCalendarClass.ALL_YEARS arRules(7).NonBusinessDate = False arRules(8).Name = "Yom HaZikaron" arRules(8).Month = cCalendarClass.IYAR arRules(8).Day = 4 arRules(8).Year = uGregIn.Year arRules(8).RuleClass = cCalendarClass.HEBREW_RULES arRules(8).Rule = cCalendarClass.NO_RULES arRules(8).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(8).ThursdayRule = cCalendarClass.THURSDAY_OBSERVED_ON_WEDNESDAY arRules(8).FridayRule = cCalendarClass.FRIDAY_OBSERVED_ON_WEDNESDAY arRules(8).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(8).SundayRule = cCalendarClass.SUNDAY_OBSERVED_ON_MONDAY arRules(8).YearRule = cCalendarClass.ALL_YEARS arRules(8).NonBusinessDate = False arRules(9).Name = "Yom HaAtzmaut" arRules(9).Month = cCalendarClass.IYAR arRules(9).Day = 5 arRules(9).Year = uGregIn.Year arRules(9).RuleClass = cCalendarClass.HEBREW_RULES arRules(9).Rule = cCalendarClass.NO_RULES arRules(9).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(9).ThursdayRule = cCalendarClass.THURSDAY_OBSERVED_ON_WEDNESDAY arRules(9).FridayRule = cCalendarClass.FRIDAY_OBSERVED_ON_THURSDAY arRules(9).SaturdayRule = cCalendarClass.SATURDAY_OBSERVED_ON_THURSDAY arRules(9).SundayRule = cCalendarClass.NO_SUNDAY_RULE arRules(9).MondayRule = cCalendarClass.MONDAY_OBSERVED_ON_TUESDAY arRules(9).YearRule = cCalendarClass.ALL_YEARS arRules(9).NonBusinessDate = False arRules(10).Name = "Pesach Sheni" arRules(10).Month = cCalendarClass.IYAR arRules(10).Day = 14 arRules(10).Year = uGregIn.Year arRules(10).RuleClass = cCalendarClass.HEBREW_RULES arRules(10).Rule = cCalendarClass.NO_RULES arRules(10).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(10).YearRule = cCalendarClass.ALL_YEARS arRules(10).NonBusinessDate = False arRules(11).Name = "Yom Yerushalayim" arRules(11).Month = cCalendarClass.IYAR arRules(11).Day = 28 arRules(11).Year = uGregIn.Year arRules(11).RuleClass = cCalendarClass.HEBREW_RULES arRules(11).Rule = cCalendarClass.NO_RULES arRules(11).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(11).YearRule = cCalendarClass.ALL_YEARS arRules(11).NonBusinessDate = False arRules(12).Name = "Shavout" arRules(12).Month = cCalendarClass.SIVAN arRules(12).Day = 6 arRules(12).Year = uGregIn.Year arRules(12).RuleClass = cCalendarClass.HEBREW_RULES arRules(12).Rule = cCalendarClass.NO_RULES arRules(12).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(12).YearRule = cCalendarClass.ALL_YEARS arRules(12).NonBusinessDate = False arRules(13).Name = "Tish'ah B'av" arRules(13).Month = cCalendarClass.AV arRules(13).Day = 9 arRules(13).Year = uGregIn.Year arRules(13).RuleClass = cCalendarClass.HEBREW_RULES arRules(13).Rule = cCalendarClass.NO_RULES arRules(13).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(13).SaturdayRule = cCalendarClass.SATURDAY_OBSERVED_ON_SUNDAY arRules(13).YearRule = cCalendarClass.ALL_YEARS arRules(13).NonBusinessDate = False arRules(14).Name = "Sh'ela (Outside Israel)" arRules(14).Month = cCalendarClass.ATHOR arRules(14).Day = 26 arRules(14).Year = uGregIn.Year arRules(14).RuleClass = cCalendarClass.COPTIC_RULES arRules(14).Rule = cCalendarClass.NO_RULES arRules(14).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(14).SaturdayRule = cCalendarClass.SATURDAY_OBSERVED_ON_SUNDAY arRules(14).YearRule = cCalendarClass.ALL_YEARS arRules(14).NonBusinessDate = False oCalendar.DateCalculation(arRules()) For iIndex = 0 To UBound(arRules) nRow = nRow + 1 oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays1,uGreg1) oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays2,uGreg2) ListView_AddItem(hListView, nRow, 0, "Hebrew") wAny = arRules(iIndex).Name ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + "." + format(uGreg1.Day,"00") + _ IIf(arRules(iIndex).Observed = True, _ IIf(arRules(iIndex).ObservedDays1 = arRules(iIndex).ObservedDays2,""," (Observed on " + _ Str(uGreg2.Year) + "." + format(uGreg2.Month,"00") + "." + _ format(uGreg2.Day,"00") + ")")," (Not Observed)") ListView_SetItemText(hListView, nRow, 2, @wAny) Next ' Islamic Holidays ReDim arRules(0 To 2) arRules(0).Name = "Ramadan" arRules(0).Month = cCalendarClass.RAMADAN arRules(0).Day = 1 arRules(0).Year = uGreg1.Year arRules(0).RuleClass = cCalendarClass.ISLAMIC_RULES arRules(0).Rule = cCalendarClass.NO_RULES arRules(0).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(0).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(0).SundayRule = cCalendarClass.NO_SUNDAY_RULE arRules(0).YearRule = cCalendarClass.ALL_YEARS arRules(0).NonBusinessDate = False arRules(1).Name = "Eid-al-Fitr" arRules(1).Month = cCalendarClass.SHAWWAL arRules(1).Day = 1 arRules(1).Year = uGreg1.Year arRules(1).RuleClass = cCalendarClass.ISLAMIC_RULES arRules(1).Rule = cCalendarClass.NO_RULES arRules(1).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(1).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(1).SundayRule = cCalendarClass.NO_SUNDAY_RULE arRules(1).YearRule = cCalendarClass.ALL_YEARS arRules(1).NonBusinessDate = False arRules(2).Name = "Al-Quds Day" arRules(2).Month = 0 arRules(2).Day = 0 arRules(2).Year = uGreg1.Year arRules(2).RuleClass = cCalendarClass.ISLAMIC_RULES arRules(2).Rule = cCalendarClass.ISLAMIC_QUDS_DAY arRules(2).Weekday = cCalendarClass.ALL_WEEKDAYS arRules(2).SaturdayRule = cCalendarClass.NO_SATURDAY_RULE arRules(2).SundayRule = cCalendarClass.NO_SUNDAY_RULE arRules(2).YearRule = cCalendarClass.ALL_YEARS arRules(2).NonBusinessDate = False oCalendar.DateCalculation(arRules()) For iIndex = 0 To UBound(arRules) nRow = nRow + 1 oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays1,uGreg1) oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays2,uGreg2) ListView_AddItem(hListView, nRow, 0, "Islamic") wAny = arRules(iIndex).Name ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + "." + format(uGreg1.Day,"00") + _ IIf(arRules(iIndex).Observed = True, _ IIf(arRules(iIndex).ObservedDays1 = arRules(iIndex).ObservedDays2,""," (Observed on " + _ Str(uGreg2.Year) + "." + format(uGreg2.Month,"00") + "." + _ format(uGreg2.Day,"00") + ")")," (Not Observed)") ListView_SetItemText(hListView, nRow, 2, @wAny) Next ' Persian Holidays ReDim arRules(0 To 5) arRules(0).Name = "Nowruz" arRules(0).Month = cCalendarClass.FARVARDIN arRules(0).Day = 1 arRules(0).Year = uGreg1.Year arRules(0).RuleClass = cCalendarClass.PERSIAN_RULES arRules(0).Rule = cCalendarClass.NO_RULES arRules(0).NonBusinessDate = False arRules(1).Name = "Islamic Republic Day" arRules(1).Month = cCalendarClass.FARVARDIN arRules(1).Day = 12 arRules(1).Year = uGreg1.Year arRules(1).RuleClass = cCalendarClass.PERSIAN_RULES arRules(1).Rule = cCalendarClass.NO_RULES arRules(1).NonBusinessDate = False arRules(2).Name = "Sizdah Bedar" arRules(2).Month = cCalendarClass.FARVARDIN arRules(2).Day = 13 arRules(2).Year = uGreg1.Year arRules(2).RuleClass = cCalendarClass.PERSIAN_RULES arRules(2).Rule = cCalendarClass.NO_RULES arRules(2).NonBusinessDate = False arRules(3).Name = "Revolution Day" arRules(3).Month = cCalendarClass.BAHMAN arRules(3).Day = 22 arRules(3).Year = uGreg1.Year arRules(3).RuleClass = cCalendarClass.PERSIAN_RULES arRules(3).Rule = cCalendarClass.NO_RULES arRules(3).NonBusinessDate = False arRules(4).Name = "Oil Nationalization Day" arRules(4).Month = cCalendarClass.ESFAND arRules(4).Day = 29 arRules(4).Year = uGreg1.Year arRules(4).RuleClass = cCalendarClass.PERSIAN_RULES arRules(4).Rule = cCalendarClass.NO_RULES arRules(4).NonBusinessDate = False arRules(5).Name = "Anniversary of Khomeini's Death" arRules(5).Month = cCalendarClass.XORDAD arRules(5).Day = 14 arRules(5).Year = uGreg1.Year arRules(5).RuleClass = cCalendarClass.PERSIAN_RULES arRules(5).Rule = cCalendarClass.NO_RULES arRules(5).NonBusinessDate = False oCalendar.DateCalculation(arRules()) For iIndex = 0 To UBound(arRules) nRow = nRow + 1 oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays1,uGreg1) oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays2,uGreg2) ListView_AddItem(hListView, nRow, 0, "Persian") wAny = arRules(iIndex).Name ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + "." + format(uGreg1.Day,"00") + _ IIf(arRules(iIndex).Observed = True, _ IIf(arRules(iIndex).ObservedDays1 = arRules(iIndex).ObservedDays2,""," (Observed on " + _ Str(uGreg2.Year) + "." + format(uGreg2.Month,"00") + "." + _ format(uGreg2.Day,"00") + ")")," (Not Observed)") ListView_SetItemText(hListView, nRow, 2, @wAny) Next ' Hindu Solar Holidays ReDim arRules(0 To 1) arRules(0).Name = "Sowramana Ugadi" arRules(0).Month = cCalendarClass.VAISAKHA arRules(0).Day = 1 arRules(0).Year = uGreg1.Year arRules(0).RuleClass = cCalendarClass.HINDU_SOLAR_RULES arRules(0).Rule = cCalendarClass.NO_RULES arRules(0).NonBusinessDate = False arRules(1).Name = "Mesha Samkranti" arRules(1).Year = uGreg1.Year arRules(1).RuleClass = cCalendarClass.HINDU_SOLAR_RULES arRules(1).Rule = cCalendarClass.HINDU_SOLAR_MESHA_SAMKRANTI arRules(1).NonBusinessDate = False oCalendar.DateCalculation(arRules()) For iIndex = 0 To UBound(arRules) nRow = nRow + 1 oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays1,uGreg1) oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays2,uGreg2) ListView_AddItem(hListView, nRow, 0, "Hindu Solar") wAny = arRules(iIndex).Name ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + "." + format(uGreg1.Day,"00") ListView_SetItemText(hListView, nRow, 2, @wAny) Next ' Samaritan Holidays ReDim arRules(0 To 8) arRules(0).Name = "Simmut of Passover" arRules(0).Year = uGreg1.Year arRules(0).RuleClass = cCalendarClass.SAMARITAN_RULES arRules(0).Rule = cCalendarClass.SIMMUT_OF_PASSOVER arRules(0).NonBusinessDate = False arRules(1).Name = "Passover" arRules(1).Month = 1 arRules(1).Day = 14 arRules(1).Year = uGreg1.Year arRules(1).RuleClass = cCalendarClass.SAMARITAN_RULES arRules(1).Rule = cCalendarClass.NO_RULES arRules(1).NonBusinessDate = False arRules(2).Name = "Festival of Unleavened Bread" arRules(2).Month = 1 arRules(2).Day = 21 arRules(2).Year = uGreg1.Year arRules(2).RuleClass = cCalendarClass.SAMARITAN_RULES arRules(2).Rule = cCalendarClass.NO_RULES arRules(2).NonBusinessDate = False arRules(3).Name = "Festival of Pentecost" arRules(3).Year = uGreg1.Year arRules(3).RuleClass = cCalendarClass.SAMARITAN_RULES arRules(3).Rule = cCalendarClass.PENTECOST arRules(3).NonBusinessDate = False arRules(4).Name = "Seventh Month" arRules(4).Month = 7 arRules(4).Day = 1 arRules(4).Year = uGreg1.Year arRules(4).RuleClass = cCalendarClass.SAMARITAN_RULES arRules(4).Rule = cCalendarClass.NO_RULES arRules(4).NonBusinessDate = False arRules(5).Name = "Day of Atonement" arRules(5).Month = 7 arRules(5).Day = 10 arRules(5).Year = uGreg1.Year arRules(5).RuleClass = cCalendarClass.SAMARITAN_RULES arRules(5).Rule = cCalendarClass.NO_RULES arRules(5).NonBusinessDate = False arRules(6).Name = "Festival of Tabernacles" arRules(6).Month = 7 arRules(6).Day = 15 arRules(6).Year = uGreg1.Year arRules(6).RuleClass = cCalendarClass.SAMARITAN_RULES arRules(6).Rule = cCalendarClass.NO_RULES arRules(6).NonBusinessDate = False arRules(7).Name = "Eighth Day of Sukkot" arRules(7).Month = 7 arRules(7).Day = 22 arRules(7).Year = uGreg1.Year arRules(7).RuleClass = cCalendarClass.SAMARITAN_RULES arRules(7).Rule = cCalendarClass.NO_RULES arRules(7).NonBusinessDate = False arRules(8).Name = "Simmut of Tabernacles" arRules(8).Year = uGreg1.Year arRules(8).RuleClass = cCalendarClass.SAMARITAN_RULES arRules(8).Rule = cCalendarClass.SIMMUT_OF_TABERNACLES arRules(8).NonBusinessDate = False oCalendar.DateCalculation(arRules()) For iIndex = 0 To UBound(arRules) nRow = nRow + 1 oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays1,uGreg1) oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays2,uGreg2) ListView_AddItem(hListView, nRow, 0, "Samaritan") wAny = arRules(iIndex).Name ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + "." + format(uGreg1.Day,"00") ListView_SetItemText(hListView, nRow, 2, @wAny) Next ReDim arRules(0 To 15) ' Easter based holidays do not apply weekday or year observation rules arRules(0).Name = "Sexagesima Sunday" arRules(0).Year = uGreg1.Year arRules(0).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(0).Rule = cCalendarClass.CHRISTIAN_EASTER_SEXAGESIMASUNDAY arRules(0).NonBusinessDate = False arRules(1).Name = "Shrove Sunday" arRules(1).Year = uGreg1.Year arRules(1).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(1).Rule = cCalendarClass.CHRISTIAN_EASTER_SHROVESUNDAY arRules(1).NonBusinessDate = False arRules(2).Name = "Shrove Monday" arRules(2).Year = uGreg1.Year arRules(2).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(2).Rule = cCalendarClass.CHRISTIAN_EASTER_SHROVEMONDAY arRules(2).NonBusinessDate = False arRules(3).Name = "Mardi Gras" arRules(3).Year = uGreg1.Year arRules(3).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(3).Rule = cCalendarClass.CHRISTIAN_EASTER_MARDIGRAS arRules(3).NonBusinessDate = False arRules(4).Name = "Ash Wednesday" arRules(4).Year = uGreg1.Year arRules(4).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(4).Rule = cCalendarClass.CHRISTIAN_EASTER_ASHWEDNESDAY arRules(4).NonBusinessDate = False arRules(5).Name = "Mothering Sunday" arRules(5).Year = uGreg1.Year arRules(5).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(5).Rule = cCalendarClass.CHRISTIAN_EASTER_MOTHERINGSUNDAY arRules(5).NonBusinessDate = False arRules(6).Name = "Palm Sunday" arRules(6).Year = uGreg1.Year arRules(6).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(6).Rule = cCalendarClass.CHRISTIAN_EASTER_PALMSUNDAY arRules(6).NonBusinessDate = False arRules(7).Name = "Maundy Thursday" arRules(7).Year = uGreg1.Year arRules(7).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(7).Rule = cCalendarClass.CHRISTIAN_EASTER_MAUNDYTHURSDAY arRules(7).NonBusinessDate = False arRules(8).Name = "Good Friday" arRules(8).Year = uGreg1.Year arRules(8).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(8).Rule = cCalendarClass.CHRISTIAN_EASTER_GOODFRIDAY arRules(8).NonBusinessDate = False arRules(9).Name = "Easter" arRules(9).Year = uGreg1.Year arRules(9).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(9).Rule = cCalendarClass.CHRISTIAN_EASTER_EASTER arRules(9).NonBusinessDate = False arRules(10).Name = "Easter Monday" arRules(10).Year = uGreg1.Year arRules(10).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(10).Rule = cCalendarClass.CHRISTIAN_EASTER_EASTERMONDAY arRules(10).NonBusinessDate = False arRules(11).Name = "Rogation Sunday" arRules(11).Year = uGreg1.Year arRules(11).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(11).Rule = cCalendarClass.CHRISTIAN_EASTER_ROGATIONSUNDAY arRules(11).NonBusinessDate = False arRules(12).Name = "Ascension" arRules(12).Year = uGreg1.Year arRules(12).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(12).Rule = cCalendarClass.CHRISTIAN_EASTER_ASCENSION arRules(12).NonBusinessDate = False arRules(13).Name = "Pentecost" arRules(13).Year = uGreg1.Year arRules(13).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(13).Rule = cCalendarClass.CHRISTIAN_EASTER_PENTECOST arRules(13).NonBusinessDate = False arRules(14).Name = "Trinity Sunday" arRules(14).Year = uGreg1.Year arRules(14).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(14).Rule = cCalendarClass.CHRISTIAN_EASTER_TRINITYSUNDAY arRules(14).NonBusinessDate = False arRules(15).Name = "Corpus Christi" arRules(15).Year = uGreg1.Year arRules(15).RuleClass = cCalendarClass.CHRISTIANEASTER_RULES arRules(15).Rule = cCalendarClass.CHRISTIAN_EASTER_CORPUSCHRISTI arRules(15).NonBusinessDate = False oCalendar.DateCalculation(arRules()) For iIndex = 0 To UBound(arRules) nRow = nRow + 1 oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays1,uGreg1) oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays2,uGreg2) ListView_AddItem(hListView, nRow, 0, "Christian") wAny = arRules(iIndex).Name ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + "." + format(uGreg1.Day,"00") ListView_SetItemText(hListView, nRow, 2, @wAny) Next ' Orthodox Churches ReDim arRules(0 To 9) arRules(0).Name = "New Year" arRules(0).Year = uGreg1.Year arRules(0).RuleClass = cCalendarClass.ORTHODOXEASTER_RULES arRules(0).Rule = cCalendarClass.ORTHODOX_EASTER_NEWYEAR arRules(0).NonBusinessDate = False arRules(1).Name = "Great Lent" arRules(1).Year = uGreg1.Year arRules(1).RuleClass = cCalendarClass.ORTHODOXEASTER_RULES arRules(1).Rule = cCalendarClass.ORTHODOX_EASTER_GREATLENT arRules(1).NonBusinessDate = False arRules(2).Name = "Forgiveness Sunday" arRules(2).Year = uGreg1.Year arRules(2).RuleClass = cCalendarClass.ORTHODOXEASTER_RULES arRules(2).Rule = cCalendarClass.ORTHODOX_EASTER_FORGIVENESSSUNDAY arRules(2).NonBusinessDate = False arRules(3).Name = "Palm Sunday" arRules(3).Year = uGreg1.Year arRules(3).RuleClass = cCalendarClass.ORTHODOXEASTER_RULES arRules(3).Rule = cCalendarClass.ORTHODOX_EASTER_PALMSUNDAY arRules(3).NonBusinessDate = False arRules(4).Name = "Good Friday" arRules(4).Year = uGreg1.Year arRules(4).RuleClass = cCalendarClass.ORTHODOXEASTER_RULES arRules(4).Rule = cCalendarClass.ORTHODOX_EASTER_GOODFRIDAY arRules(4).NonBusinessDate = False arRules(5).Name = "Easter" arRules(5).Year = uGreg1.Year arRules(5).RuleClass = cCalendarClass.ORTHODOXEASTER_RULES arRules(5).Rule = cCalendarClass.ORTHODOX_EASTER_EASTER arRules(5).NonBusinessDate = False arRules(6).Name = "Feast of Ascension" arRules(6).Year = uGreg1.Year arRules(6).RuleClass = cCalendarClass.ORTHODOXEASTER_RULES arRules(6).Rule = cCalendarClass.ORTHODOX_EASTER_FEASTOFASCENSION arRules(6).NonBusinessDate = False arRules(7).Name = "Pentecost" arRules(7).Year = uGreg1.Year arRules(7).RuleClass = cCalendarClass.ORTHODOXEASTER_RULES arRules(7).Rule = cCalendarClass.ORTHODOX_EASTER_PENTECOST arRules(7).NonBusinessDate = False arRules(8).Name = "Apostles Fast" arRules(8).Year = uGreg1.Year arRules(8).RuleClass = cCalendarClass.ORTHODOXEASTER_RULES arRules(8).Rule = cCalendarClass.ORTHODOX_EASTER_APOSTLESFAST arRules(8).NonBusinessDate = False arRules(9).Name = "All Saints Sunday" arRules(9).Year = uGreg1.Year arRules(9).RuleClass = cCalendarClass.ORTHODOXEASTER_RULES arRules(9).Rule = cCalendarClass.ORTHODOX_EASTER_ALLSAINTSSUNDAY arRules(9).NonBusinessDate = False oCalendar.DateCalculation(arRules()) For iIndex = 0 To UBound(arRules) nRow = nRow + 1 oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays1,uGreg1) oCalendar.GregorianFromSerial(arRules(iIndex).ObservedDays2,uGreg2) ListView_AddItem(hListView, nRow, 0, "Orthodox") wAny = arRules(iIndex).Name ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + "." + format(uGreg1.Day,"00") ListView_SetItemText(hListView, nRow, 2, @wAny) Next ' Supported Events hListView = AfxGetControlHandle (hwnd, IDC_LVPAGE3) ' Clear List CListView.DeleteAllItems (BYVAL hListView) oCalendar.Sunrise(uLocale,nEventTime,cCalendarClass.ASTRONOMICAL_TWILIGHT_TIME,bBogus,nSerial) oCalendar.GregorianFromSerial(nEventTime,uGreg1) ListView_AddItem(hListView, 0, 0, "Sunrise") wAny = "Astronomical Twilight" ListView_SetItemText(hListView, 0, 1, @wAny) wAny = iif(bBogus = False, _ Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + _ "." + format(uGreg1.Day,"00") + " at " + _ format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00"), _ "Sunrise did not occur") ListView_SetItemText(hListView, 0, 2, @wAny) oCalendar.Sunrise(uLocale,nEventTime,cCalendarClass.NAUTICAL_TWILIGHT_TIME,bBogus,nSerial) oCalendar.GregorianFromSerial(nEventTime,uGreg1) ListView_AddItem(hListView, 1, 0, "Sunrise") wAny = "Nautical Twilight" ListView_SetItemText(hListView, 1, 1, @wAny) wAny = iif(bBogus = False, _ Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + _ "." + format(uGreg1.Day,"00") + " at " + _ format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00"), _ "Sunrise did not occur") ListView_SetItemText(hListView, 1, 2, @wAny) oCalendar.Sunrise(uLocale,nEventTime,cCalendarClass.CIVIL_TWILIGHT_TIME,bBogus,nSerial) oCalendar.GregorianFromSerial(nEventTime,uGreg1) ListView_AddItem(hListView, 2, 0, "Sunrise") wAny = "Civil Twilight" ListView_SetItemText(hListView, 2, 1, @wAny) wAny = iif(bBogus = False, _ Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + _ "." + format(uGreg1.Day,"00") + " at " + _ format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00"), _ "Sunrise did not occur") ListView_SetItemText(hListView, 2, 2, @wAny) oCalendar.Sunrise(uLocale,nEventTime,cCalendarClass.SUNRISE_SUNSET_TIME,bBogus,nSerial) oCalendar.GregorianFromSerial(nEventTime,uGreg1) ListView_AddItem(hListView, 3, 0, "Sunrise") wAny = "Normal" ListView_SetItemText(hListView, 3, 1, @wAny) wAny = iif(bBogus = False, _ Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + _ "." + format(uGreg1.Day,"00") + " at " + _ format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00"), _ "Sunrise did not occur") ListView_SetItemText(hListView, 3, 2, @wAny) nEventTime = oCalendar.SunTransit(uLocale,nSerial) oCalendar.GregorianFromSerial(nEventTime,uGreg1) ListView_AddItem(hListView, 4, 0, "Solar") wAny = "Transit" ListView_SetItemText(hListView, 4, 1, @wAny) wAny = Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + _ "." + format(uGreg1.Day,"00") + " at " + _ format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00") ListView_SetItemText(hListView, 4, 2, @wAny) oCalendar.Sunset(uLocale,nEventTime,cCalendarClass.SUNRISE_SUNSET_TIME,bBogus,nSerial) oCalendar.GregorianFromSerial(nEventTime,uGreg1) ListView_AddItem(hListView, 5, 0, "Sunset") wAny = "Normal" ListView_SetItemText(hListView, 5, 1, @wAny) wAny = iif(bBogus = False, _ Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + _ "." + format(uGreg1.Day,"00") + " at " + _ format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00"), _ "Sunset did not occur") ListView_SetItemText(hListView, 5, 2, @wAny) oCalendar.Sunset(uLocale,nEventTime,cCalendarClass.CIVIL_TWILIGHT_TIME,bBogus,nSerial) oCalendar.GregorianFromSerial(nEventTime,uGreg1) ListView_AddItem(hListView, 6, 0, "Sunset") wAny = "Civil Twilight" ListView_SetItemText(hListView, 6, 1, @wAny) wAny = iif(bBogus = False, _ Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + _ "." + format(uGreg1.Day,"00") + " at " + _ format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00"), _ "Sunset did not occur") ListView_SetItemText(hListView, 6, 2, @wAny) oCalendar.Sunset(uLocale,nEventTime,cCalendarClass.NAUTICAL_TWILIGHT_TIME,bBogus,nSerial) oCalendar.GregorianFromSerial(nEventTime,uGreg1) ListView_AddItem(hListView, 7, 0, "Sunset") wAny = "Nautical Twilight" ListView_SetItemText(hListView, 7, 1, @wAny) wAny = iif(bBogus = False, _ Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + _ "." + format(uGreg1.Day,"00") + " at " + _ format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00"), _ "Sunset did not occur") ListView_SetItemText(hListView, 7, 2, @wAny) oCalendar.Sunset(uLocale,nEventTime,cCalendarClass.ASTRONOMICAL_TWILIGHT_TIME,bBogus,nSerial) oCalendar.GregorianFromSerial(nEventTime,uGreg1) ListView_AddItem(hListView, 8, 0, "Sunset") wAny = "Astronomical Twilight" ListView_SetItemText(hListView, 8, 1, @wAny) wAny = iif(bBogus = False, _ Str(uGreg1.Year) + "." + format(uGreg1.Month,"00") + _ "." + format(uGreg1.Day,"00") + " at " + _ format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00"), _ "Sunset did not occur") ListView_SetItemText(hListView, 8, 2, @wAny) ListView_AddItem(hListView, 9, 0, "Solar") wAny = "Distance" ListView_SetItemText(hListView, 9, 1, @wAny) wAny = Str(oCalendar.SolarDistance(nSerial)) + " km" ListView_SetItemText(hListView, 9, 2, @wAny) oCalendar.LunarRiseAndSet(nSerial,nSerial,cCalendarClass.GEOCENTRIC,uLocale,arLunarTimes()) If UBound(arLunarTimes) < 0 Then ListView_AddItem(hListView, 10, 0, "Lunar") wAny = "Moonrise/Moonset" ListView_SetItemText(hListView, 10, 1, @wAny) wAny = "Geocentric Moon did not rise or set" ListView_SetItemText(hListView, 10, 2, @wAny) nRow = 10 Else nRow = 9 For iIndex = 0 To UBound(arLunarTimes) nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Lunar") wAny = "Moonrise/Moonset" ListView_SetItemText(hListView, nRow, 1, @wAny) oCalendar.GregorianFromSerial(arLunarTimes(iIndex).LunarSerialTime,uGreg1) wAny = "Geocentric " + _ IIf(arLunarTimes(iIndex).RiseOrSet = cCalendarClass.MOONRISE,"Moonrise","Moonset") + " on " + _ Str(uGreg1.Year) + "." + Format(uGreg1.Month,"00") + "." + Format(uGreg1.Day,"00") + " at " + _ Format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00") ListView_SetItemText(hListView, nRow, 2, @wAny) Next End if oCalendar.LunarRiseAndSet(nSerial,nSerial,cCalendarClass.TOPOCENTRIC,uLocale,arLunarTimes()) If UBound(arLunarTimes) < 0 Then nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Lunar") wAny = "Moonrise/Moonset" ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = "Topocentric Moon did not rise or set" ListView_SetItemText(hListView, nRow, 2, @wAny) Else For iIndex = 0 To UBound(arLunarTimes) nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Lunar") wAny = "Moonrise/Moonset" ListView_SetItemText(hListView, nRow, 1, @wAny) oCalendar.GregorianFromSerial(arLunarTimes(iIndex).LunarSerialTime,uGreg1) wAny = "Topocentric " + _ IIf(arLunarTimes(iIndex).RiseOrSet = cCalendarClass.MOONRISE,"Moonrise","Moonset") + " on " + _ Str(uGreg1.Year) + "." + Format(uGreg1.Month,"00") + "." + Format(uGreg1.Day,"00") + " at " + _ Format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00") ListView_SetItemText(hListView, nRow, 2, @wAny) Next End if uGreg1.Month = uGregIn.Month uGreg1.Day = 1 uGreg1.Year = uGregIn.Year nMonthBegin = oCalendar.SerialFromGregorian(uGreg1) uGreg1.Day = oCalendar.GregorianDaysInMonth(uGreg1.Month,uGreg1.Year) nMonthEnd = oCalendar.SerialFromGregorian(uGreg1) oCalendar.LunarPhases(nMonthBegin,nMonthEnd,uLocale,arPhases()) For iIndex = 0 To UBound(arPhases) oCalendar.GregorianFromSerial(arPhases(iIndex).LunarSerialTime,uGreg1) Select Case arPhases(iIndex).Phase Case cCalendarClass.NEWMOON sLunarPhase = "New Moon" Case cCalendarClass.FIRSTQUARTERMOON sLunarPhase = "First Quarter Moon" Case cCalendarClass.FULLMOON sLunarPhase = "Full Moon" Case Else sLunarPhase = "Last Quarter Moon" End Select nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Lunar") wAny = "Month Phases" ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = sLunarPhase + " on " + Str(uGreg1.Year) + "." + Format(uGreg1.Month,"00") + _ "." + Format(uGreg1.Day,"00") + " at " + Format(uGreg1.Hour,"00") + ":" + _ Format(uGreg1.Minute,"00") + ":" + Format(uGreg1.Second,"00") + _ "." + Format(uGreg1.Millisecond,"000") ListView_SetItemText(hListView, nRow, 2, @wAny) Next nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Lunar") wAny = "Distance" ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(oCalendar.LunarDistance(nSerial)) + " km" ListView_SetItemText(hListView, nRow, 2, @wAny) nRow = nRow + 1 oCalendar.LunarIllumination(nSerial,uLocale,nIllumination,bWaxing,bCrescent) ListView_AddItem(hListView, nRow, 0, "Lunar") wAny = "Illumination" ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = format(cint(nIllumination * 100) / 100,"##0.00") + "%" + ",Crescent=" + str(bCrescent) + ",Waxing=" + str(bWaxing) ListView_SetItemText(hListView, nRow, 2, @wAny) nRow = nRow + 1 nEventTime = oCalendar.SeasonalEquinox(uLocale,uGregin.Year,cCalendarClass.SPRING) oCalendar.GregorianFromSerial(nEventTIme,uGreg1) ListView_AddItem(hListView, nRow, 0, "Season") wAny = "Spring Solstice" ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + Format(uGreg1.Month,"00") + "." + Format(uGreg1.Day,"00") + _ " at " + Format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00") + ":" + _ Format(uGreg1.Second,"00") + "." + Format(uGreg1.Millisecond,"000") ListView_SetItemText(hListView, nRow, 2, @wAny) nRow = nRow + 1 nEventTime = oCalendar.SeasonalEquinox(uLocale,uGregin.Year,cCalendarClass.SUMMER) oCalendar.GregorianFromSerial(nEventTIme,uGreg1) ListView_AddItem(hListView, nRow, 0, "Season") wAny = "Summer Solstice" ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + Format(uGreg1.Month,"00") + "." + Format(uGreg1.Day,"00") + _ " at " + Format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00") + ":" + _ Format(uGreg1.Second,"00") + "." + Format(uGreg1.Millisecond,"000") ListView_SetItemText(hListView, nRow, 2, @wAny) nRow = nRow + 1 nEventTime = oCalendar.SeasonalEquinox(uLocale,uGregin.Year,cCalendarClass.AUTUMN) oCalendar.GregorianFromSerial(nEventTIme,uGreg1) ListView_AddItem(hListView, nRow, 0, "Season") wAny = "Autumn Solstice" ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + Format(uGreg1.Month,"00") + "." + Format(uGreg1.Day,"00") + _ " at " + Format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00") + ":" + _ Format(uGreg1.Second,"00") + "." + Format(uGreg1.Millisecond,"000") ListView_SetItemText(hListView, nRow, 2, @wAny) nRow = nRow + 1 nEventTime = oCalendar.SeasonalEquinox(uLocale,uGregin.Year,cCalendarClass.WINTER) oCalendar.GregorianFromSerial(nEventTIme,uGreg1) ListView_AddItem(hListView, nRow, 0, "Season") wAny = "Winter Solstice" ListView_SetItemText(hListView, nRow, 1, @wAny) wAny = Str(uGreg1.Year) + "." + Format(uGreg1.Month,"00") + "." + Format(uGreg1.Day,"00") + _ " at " + Format(uGreg1.Hour,"00") + ":" + Format(uGreg1.Minute,"00") + ":" + _ Format(uGreg1.Second,"00") + "." + Format(uGreg1.Millisecond,"000") ListView_SetItemText(hListView, nRow, 2, @wAny) ' Miscellaneous hListView = AfxGetControlHandle (hwnd, IDC_LVPAGE4) ' Clear List CListView.DeleteAllItems (BYVAL hListView) ListView_AddItem(hListView, 0, 0, "Gregorian") wAny = "Days remaining this year is " + _ Str(oCalendar.GregorianDaysRemaining(uGregIn.Month,uGregIn.Day,uGregIn.Year)) ListView_SetItemText(hListView, 0, 1, @wAny) ListView_AddItem(hListView, 1, 0, "Gregorian") wAny = "Day of year is " + _ Str(oCalendar.GregorianDayNumber(uGregIn.Month,uGregIn.Day,uGregIn.Year)) ListView_SetItemText(hListView, 1, 1, @wAny) ListView_AddItem(hListView, 2, 0, "Gregorian") wAny = "Days in month is " + _ Str(oCalendar.GregorianDaysInMonth(uGregIn.Month,uGregIn.Year)) ListView_SetItemText(hListView, 2, 1, @wAny) ListView_AddItem(hListView, 3, 0, "Gregorian") wAny = "Fiscal Quarter is " + _ Str(oCalendar.GregorianFiscalQuarter(uGregIn.Month,cCalendarClass.OCTOBER)) ListView_SetItemText(hListView, 3, 1, @wAny) ListView_AddItem(hListView, 4, 0, "Gregorian") wAny = "Fiscal Month is " + _ Str(oCalendar.GregorianFiscalMonth(uGregIn.Month,cCalendarClass.OCTOBER)) ListView_SetItemText(hListView, 4, 1, @wAny) ListView_AddItem(hListView, 5, 0, "Gregorian") wAny = "Fiscal Year is " + _ Str(oCalendar.GregorianFiscalYear(uGregIn.Month,uGregIn.Year,cCalendarClass.OCTOBER,False)) ListView_SetItemText(hListView, 5, 1, @wAny) oCalendar.GregorianFiscalMonthYears(uGregIn.Year,cCalendarClass.OCTOBER,False,arFiscalYears()) nRow = 5 For iIndex = 0 To 11 nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Gregorian") wAny = "Month " + Str(iIndex + 1) + " belongs to fiscal year " + Str(arFiscalYears(iIndex)) ListView_SetItemText(hListView, nRow, 1, @wAny) Next nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Business") wAny = "Fiscal Year is " + _ "Maximum limit for saved business date calculations is " + _ Str(oCalendar.NonBusinessDatesLimit) ListView_SetItemText(hListView, nRow, 1, @wAny) nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Business") wAny = "Number dates (USA Federal Holidays) saved for business date calculations is " + _ Str(oCalendar.NonBusinessDatesSaved) ListView_SetItemText(hListView, nRow, 1, @wAny) nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Business") oCalendar.GregorianFromSerial(oCalendar.BusinessMonthBegin(uGregIn.Month,uGregIn.Year),uGreg1) wAny = "Business Begin of Month is " + _ Str(uGreg1.Year) + "." + Format(uGreg1.Month,"00") + "." + Format(uGreg1.Day,"00") ListView_SetItemText(hListView, nRow, 1, @wAny) nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Business") oCalendar.GregorianFromSerial(oCalendar.BusinessMonthEnd(uGregIn.Month,uGregIn.Year),uGreg1) wAny = "Business End of Month is " + _ Str(uGreg1.Year) + "." + Format(uGreg1.Month,"00") + "." + Format(uGreg1.Day,"00") ListView_SetItemText(hListView, nRow, 1, @wAny) nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Business") oCalendar.GregorianFromSerial(oCalendar.AddBusinessDays(nSerial,14),uGreg1) wAny = "+14 Business Days is " + _ Str(uGreg1.Year) + "." + Format(uGreg1.Month,"00") + "." + Format(uGreg1.Day,"00") ListView_SetItemText(hListView, nRow, 1, @wAny) nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Business") oCalendar.GregorianFromSerial(oCalendar.AddBusinessDays(nSerial,-14),uGreg1) wAny = "-14 Business Days is " + _ Str(uGreg1.Year) + "." + Format(uGreg1.Month,"00") + "." + Format(uGreg1.Day,"00") ListView_SetItemText(hListView, nRow, 1, @wAny) uGreg1.Month = uGregIn.Month uGreg1.Day = 1 uGreg1.Year = uGregIn.Year nSerialStart = oCalendar.SerialFromGregorian(uGreg1) - cCalendarClass.ONE_DAY uGreg1.Day = oCalendar.GregorianDaysInMonth(uGreg1.Month,uGreg1.Year) nSerialEnd = oCalendar.SerialFromGregorian(uGreg1) + cCalendarClass.ONE_DAY nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Business") wAny = "Business days this month is " + _ Str(oCalendar.BusinessDaysBetween(nSerialStart,nSerialEnd)) ListView_SetItemText(hListView, nRow, 1, @wAny) nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Business") oCalendar.GregorianFromSerial(oCalendar.AddBusinessDays(nSerial,-14),uGreg1) wAny = "Non Business days this month is " + _ Str(oCalendar.NonBusinessDaysBetween(nSerialStart,nSerialEnd)) ListView_SetItemText(hListView, nRow, 1, @wAny) nRow = nRow + 1 ListView_AddItem(hListView, nRow, 0, "Business") wAny = "Today is a " + iif(oCalendar.IsBusinessDay(nSerial) = True,"","not ") + _ "business day" ListView_SetItemText(hListView, nRow, 1, @wAny) END SUB