XTPCalendarDayViewTimeScale.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:16k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarDayViewTimeScale.cpp: implementation of the CXTPCalendarDayViewTimeScale class.
  2. //
  3. // This file is a part of the XTREME CALENDAR MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include <math.h>
  22. #include "Common/XTPResourceManager.h"
  23. #include "Common/XTPVC50Helpers.h"
  24. #include "XTPCalendarDayViewTimeScale.h"
  25. #include "XTPCalendarDayView.h"
  26. #include "XTPCalendarOptions.h"
  27. #ifdef _DEBUG
  28. #undef THIS_FILE
  29. static char THIS_FILE[] = __FILE__;
  30. #define new DEBUG_NEW
  31. #endif
  32. //////////////////////////////////////////////////////////////////////
  33. // Construction/Destruction
  34. //////////////////////////////////////////////////////////////////////
  35. IMPLEMENT_DYNAMIC(CXTPCalendarDayViewTimeScale, CCmdTarget)
  36. CXTPCalendarDayViewTimeScale::CXTPCalendarDayViewTimeScale(CXTPCalendarDayView* pDayView, BOOL bVisible, BOOL bDrawNowLine)
  37. : m_pDayView(pDayView), m_bVisible(bVisible), m_bDrawNowLine(bDrawNowLine)
  38. {
  39. m_Layout.m_rcHeader.SetRectEmpty();
  40. m_Layout.m_rcTimeZone.SetRectEmpty();
  41. m_Layout.m_nXPosBase = 0;
  42. m_nTimeshift_min = 0;
  43. m_nWidth = 48; // default value for default WinXP settings.
  44.                // Actual width to be recalculated later on call of CalcWidth.
  45. m_bDrawNowLineDyn = FALSE;
  46. }
  47. int CXTPCalendarDayViewTimeScale::CalcWidth(CDC* pDC)
  48. {
  49. // calculate actual correct width
  50. int nWidth1 = m_nWidth, nWidth2 = m_nWidth;
  51. // calculate width for midnight
  52. COleDateTime dtMid(0, 0);
  53. CString strHour, strMin;
  54. Format(dtMid, TRUE, &strHour, &strMin);
  55. COleDateTimeSpan spScaleInterval = GetScaleInterval();
  56. int nRowHeight = XTP_SAFE_GET1(m_pDayView, GetRowHeight(), 1);
  57. int nHourHeight = nRowHeight * (GETTOTAL_MINUTES_DTS(spScaleInterval) < 60 ? 2 : 1);
  58. XTP_SAFE_CALL3(m_pDayView, GetPaintManager(), GetDayViewTimeScaleCellPart(),
  59. CalcWidth(pDC, strHour, strMin, nHourHeight, nWidth1));
  60. // calculate width for midday
  61. dtMid += COleDateTimeSpan(0, 12, 0, 0);
  62. Format(dtMid, TRUE, &strHour, &strMin);
  63. XTP_SAFE_CALL3(m_pDayView, GetPaintManager(), GetDayViewTimeScaleCellPart(),
  64. CalcWidth(pDC, strHour, strMin, nHourHeight, nWidth2));
  65. // choose the widest one
  66. m_nWidth = max(nWidth1, nWidth2);
  67. return m_nWidth;
  68. }
  69. void CXTPCalendarDayViewTimeScale::Draw(CDC* pDC)
  70. {
  71. ASSERT(pDC && m_pDayView);
  72. if (!pDC || !m_pDayView)
  73. {
  74. return;
  75. }
  76. pDC->FillSolidRect(m_Layout.m_rcHeader, GetSysColor(COLOR_3DFACE));
  77. pDC->SetBkMode(TRANSPARENT);
  78. int nRowHeight = XTP_SAFE_GET1(m_pDayView, GetRowHeight(), 0);
  79. if (nRowHeight <= 0)
  80. return;
  81. const int nRowCount = m_pDayView->GetVisibleRowCount();
  82. const int nTopRow = m_pDayView->GetTopRow();
  83. COleDateTimeSpan spScaleInterval = GetScaleInterval();
  84. if (GETTOTAL_MINUTES_DTS(spScaleInterval) < 1)
  85. {
  86. ASSERT(FALSE);
  87. spScaleInterval.SetDateTimeSpan(0, 0, 5, 0);
  88. }
  89. //=== Calculate 'now' line. Draw it's BK ================================
  90. int nNowLineY = 0;
  91. if (m_bDrawNowLineDyn)
  92. {
  93. int nBottomRow = nTopRow + m_pDayView->GetVisibleRowCount();
  94. COleDateTime dtTopTime = m_pDayView->GetCellTime(nTopRow);
  95. COleDateTime dtBottomTime = m_pDayView->GetCellTime(nBottomRow);
  96. COleDateTimeSpan spView = dtBottomTime - dtTopTime;
  97. COleDateTime dtNow = CXTPCalendarUtils::GetCurrentTime();
  98. dtNow = CXTPCalendarUtils::ResetDate(dtNow);
  99. COleDateTimeSpan spNow = dtNow - dtTopTime;
  100. double dPixelPerSecond = m_Layout.m_rcTimeZone.Height() / (double)GETTOTAL_SECONDS_DTS(spView);
  101. int nDlta = int(GETTOTAL_SECONDS_DTS(spNow) * dPixelPerSecond);
  102. nNowLineY = m_Layout.m_rcTimeZone.top + nDlta;
  103. XTP_SAFE_CALL3(m_pDayView, GetPaintManager(), GetDayViewTimeScaleHeaderPart(),
  104. DrawNowLine(pDC, m_pDayView, m_Layout.m_rcTimeZone, nNowLineY, TRUE) );
  105. }
  106. //================================================================
  107. int nTimeShiftCorrectorY = 0;
  108. COleDateTimeSpan spShiftCorrector(0);
  109. int nScaleInterval_min = max(1, (int)GETTOTAL_MINUTES_DTS(spScaleInterval));
  110. double dPixelPerMin = (double)nRowHeight / (double)nScaleInterval_min;
  111. if (GETTOTAL_HOURS_DTS(spScaleInterval) < 1)
  112. {
  113. int nMul = m_nTimeshift_min / 60;
  114. int nMod = m_nTimeshift_min % 60;
  115. int nShiftCorrector_min = (nMul + (nMod ? 1 :0))*60 - m_nTimeshift_min;
  116. //-------------------------------------------------------------------
  117. int nMul2 = nShiftCorrector_min / nScaleInterval_min;
  118. int nMod2 = nShiftCorrector_min % nScaleInterval_min;
  119. int nShiftCorrector2_min = (nMul2 + (nMod2 ? 1 :0)) * nScaleInterval_min;
  120. nTimeShiftCorrectorY = (int)(dPixelPerMin * nShiftCorrector2_min);
  121. spShiftCorrector = CXTPCalendarUtils::Minutes2Span(nShiftCorrector_min);
  122. }
  123. // draw time scale header
  124. COleDateTimeSpan spShift = CXTPCalendarUtils::Minutes2Span(m_nTimeshift_min);
  125. // draw time scale rows
  126. if (GETTOTAL_HOURS_DTS(spScaleInterval) >= 1)
  127. {
  128. // draw time scale cells one by one
  129. for (int i = 0; i < nRowCount; i++)
  130. {
  131. CRect rcCell(m_Layout.m_rcTimeZone.left,
  132. m_Layout.m_rcTimeZone.top + nRowHeight * i,
  133. m_Layout.m_rcTimeZone.right,
  134. m_Layout.m_rcTimeZone.top + nRowHeight * (i + 1));
  135. COleDateTime dtTime = m_pDayView->GetCellTime(nTopRow + i);
  136. dtTime += spShift;
  137. CString str = Format(dtTime, FALSE);
  138. XTP_SAFE_CALL3(m_pDayView, GetPaintManager(), GetDayViewTimeScaleCellPart(),
  139. DrawHourCell(pDC, rcCell, str, FALSE));
  140. }
  141. }
  142. else
  143. {
  144. COleDateTimeSpan spHour(0, 1, 0, 0);
  145. spShift += spShiftCorrector;
  146. int nRowPerHour = (int)((double)spHour / (double)spScaleInterval + XTP_HALF_SECOND);
  147. ASSERT(nRowPerHour > 0);
  148. nRowPerHour = max(1, nRowPerHour);
  149. const int nHourCellHeight = nRowHeight*nRowPerHour;
  150. // Adjust time font size
  151. CRect rcStartCell(m_Layout.m_rcTimeZone);
  152. rcStartCell.top += nTimeShiftCorrectorY;
  153. rcStartCell.bottom = rcStartCell.top + nHourCellHeight;
  154. //XTP_SAFE_CALL3(m_pDayView, GetPaintManager(), GetDayViewTimeScaleCellPart(),
  155. //              AdjustTimeFont(pDC, rcStartCell));
  156. //-------------------------------------------------------------------
  157. int nHrCellDiv = m_Layout.m_rcTimeZone.Height() / rcStartCell.Height();
  158. int nHrCellMod = m_Layout.m_rcTimeZone.Height() / rcStartCell.Height();
  159. int nDrawCellCount = nHrCellDiv + (nHrCellMod ? 1 :0);
  160. COleDateTime dtStartCell = m_pDayView->GetCellTime(nTopRow);
  161. dtStartCell += spShift;
  162. int nSCMinute = dtStartCell.GetMinute();
  163. if (nSCMinute != 0)
  164. {
  165. int nMinutesShiftY = (int)(dPixelPerMin * nSCMinute);
  166. rcStartCell.top -= nMinutesShiftY;
  167. rcStartCell.bottom -= nMinutesShiftY;
  168. dtStartCell.SetTime(dtStartCell.GetHour(), 0, 0);
  169. nDrawCellCount++;
  170. }
  171. //while (rcStartCell.top > m_rcTimeZone.top)
  172. for (int n = 0; rcStartCell.top > m_Layout.m_rcTimeZone.top && n < 100; n++)
  173. {
  174. dtStartCell -= spHour;
  175. rcStartCell.top -= nHourCellHeight;
  176. rcStartCell.bottom -= nHourCellHeight;
  177. nDrawCellCount++;
  178. }
  179. // draw time scale cells with only one big hour number
  180. BOOL bTopCell = TRUE;
  181. CRect rcCell = rcStartCell;
  182. for (int i = 0; i < nDrawCellCount; i++)
  183. {
  184. COleDateTime dtCell = dtStartCell + COleDateTimeSpan(i * (double)spHour);
  185. ASSERT(dtCell.GetMinute() == 0);
  186. CString strHour, strMin;
  187. Format(dtCell, bTopCell, &strHour, &strMin);
  188. if (rcCell.top >= m_Layout.m_rcTimeZone.top)
  189. {
  190. bTopCell = FALSE;
  191. }
  192. // draw text
  193. XTP_SAFE_CALL3(m_pDayView, GetPaintManager(), GetDayViewTimeScaleCellPart(),
  194. DrawBigHourCell(pDC, rcCell, strHour, strMin, nRowPerHour, FALSE));
  195. rcCell.top += nHourCellHeight;
  196. rcCell.bottom += nHourCellHeight;
  197. }
  198. }
  199. //*** draw 'now' line
  200. if (m_bDrawNowLineDyn)
  201. {
  202. XTP_SAFE_CALL3(m_pDayView, GetPaintManager(), GetDayViewTimeScaleHeaderPart(),
  203. DrawNowLine(pDC, m_pDayView, m_Layout.m_rcTimeZone, nNowLineY, FALSE) );
  204. }
  205. //*** Draw Expand Signs
  206. XTP_SAFE_CALL3(m_pDayView, GetPaintManager(), GetDayViewTimeScaleHeaderPart(),
  207. DrawExpandSigns(pDC, m_pDayView, m_Layout.m_rcTimeZone) );
  208. //*** Draw header
  209. CRect rcHeader(m_Layout.m_rcHeader.left, m_Layout.m_rcHeader.top, m_Layout.m_rcHeader.right, m_Layout.m_rcTimeZone.top);
  210. XTP_SAFE_CALL3(m_pDayView, GetPaintManager(), GetDayViewTimeScaleHeaderPart(),
  211. OnDraw(pDC, m_pDayView, rcHeader, m_strCaption));
  212. }
  213. CString CXTPCalendarDayViewTimeScale::Format(COleDateTime dtTime, BOOL bTopCell,
  214.  CString* pHour, CString* pMin)
  215. {
  216. long localeItlZero = CXTPCalendarUtils::GetLocaleLong(LOCALE_ITLZERO);
  217. long localeITime = CXTPCalendarUtils::GetLocaleLong(LOCALE_ITIME);
  218. CString strHour = localeITime == 0 ? dtTime.Format(_T("%I")) : dtTime.Format(_T("%H"));
  219. if ((strHour.GetLength() == 2) && (strHour[0] == _T('0')) && (localeItlZero == 0))
  220. {
  221. DELETE_S(strHour, 0, 1);
  222. }
  223. CString strTime = dtTime.Format(_T("%M"));
  224. if ((localeITime == 0) && ((bTopCell || strHour == _T("12")) && dtTime.GetMinute() == 0))
  225. {
  226. CString localeAmPm = CXTPCalendarUtils::GetLocaleString(dtTime.GetHour() < 12 ? LOCALE_S1159 : LOCALE_S2359, 20);
  227. localeAmPm.MakeLower();
  228. if (pHour)
  229. {
  230. *pHour = strHour;
  231. }
  232. if (pMin)
  233. {
  234. *pMin = localeAmPm;
  235. }
  236. strHour += _T(" ");
  237. strHour += localeAmPm;
  238. return strHour;
  239. }
  240. if (pHour)
  241. {
  242. *pHour = strHour;
  243. }
  244. if (pMin)
  245. {
  246. *pMin = strTime;
  247. }
  248. return strHour + CXTPCalendarUtils::GetLocaleString(LOCALE_STIME, 5) + strTime;
  249. }
  250. CXTPCalendarDayViewTimeScale::~CXTPCalendarDayViewTimeScale()
  251. {
  252. }
  253. void CXTPCalendarDayViewTimeScale::MoveTo(int nXPos)
  254. {
  255. int nWidth = m_Layout.m_rcHeader.Width();
  256. m_Layout.m_rcHeader.left = m_Layout.m_nXPosBase + nXPos;
  257. m_Layout.m_rcHeader.right = m_Layout.m_rcHeader.left + nWidth;
  258. m_Layout.m_rcTimeZone.left = m_Layout.m_rcHeader.left;
  259. m_Layout.m_rcTimeZone.right = m_Layout.m_rcHeader.right;
  260. }
  261. void CXTPCalendarDayViewTimeScale::AdjustLayout(CDC* pDC)
  262. {
  263. UNREFERENCED_PARAMETER(pDC);
  264. ASSERT(pDC);
  265. ASSERT(m_pDayView);
  266. if (!m_pDayView || !pDC)
  267. {
  268. return;
  269. }
  270. CRect rcAllDayEvents = m_pDayView->GetAllDayEventsRectangle();
  271. m_Layout.m_nXPosBase = m_Layout.m_rcHeader.left;
  272. m_Layout.m_rcTimeZone = m_Layout.m_rcHeader;
  273. m_Layout.m_rcTimeZone.top = rcAllDayEvents.bottom;
  274. //----------------------------------------------------
  275. int nNowLineFlags = XTP_SAFE_GET3(m_pDayView, GetCalendarControl(), GetCalendarOptions(), nDayView_CurrentTimeMarkVisible, 0);
  276. m_bDrawNowLineDyn = m_bDrawNowLine;
  277. if (m_bDrawNowLineDyn)
  278. {
  279. if (m_pDayView->IsTodayVisible())
  280. {
  281. int nTAMask = xtpCalendarCurrentTimeMarkVisibleForToday | xtpCalendarCurrentTimeMarkVisibleAlways;
  282. m_bDrawNowLineDyn = m_bDrawNowLineDyn && (nNowLineFlags & nTAMask);
  283. }
  284. else
  285. {
  286. m_bDrawNowLineDyn = m_bDrawNowLineDyn && (nNowLineFlags & xtpCalendarCurrentTimeMarkVisibleAlways);
  287. }
  288. if (pDC->IsPrinting())
  289. {
  290. m_bDrawNowLineDyn = m_bDrawNowLineDyn && (nNowLineFlags & xtpCalendarCurrentTimeMarkPrinted);
  291. }
  292. }
  293. }
  294. BOOL CXTPCalendarDayViewTimeScale::HitTestDateTime(XTP_CALENDAR_HITTESTINFO_DAY_VIEW* pHitTest)
  295. {
  296. if (!pHitTest || !m_pDayView)
  297. {
  298. ASSERT(FALSE);
  299. return FALSE;
  300. }
  301. int nVisibleRowCount = m_pDayView->GetVisibleRowCount();
  302. if (m_Layout.m_rcTimeZone.PtInRect(pHitTest->pt) && nVisibleRowCount > 0)
  303. {
  304. int nCell = (pHitTest->pt.y - m_Layout.m_rcTimeZone.top) / max(1, m_pDayView->GetRowHeight());
  305. if (nCell >= 0 && nCell < nVisibleRowCount)
  306. {
  307. pHitTest->dt = m_pDayView->GetCellTime(nCell + m_pDayView->GetTopRow());
  308. pHitTest->uHitCode |= xtpCalendarHitTestDayViewTimeScale;
  309. return TRUE;
  310. }
  311. }
  312. return FALSE;
  313. }
  314. COleDateTimeSpan CXTPCalendarDayViewTimeScale::GetScaleInterval() const
  315. {
  316. return XTP_SAFE_GET1(m_pDayView, GetScaleInterval(), COleDateTimeSpan(0, 0, 1, 0));
  317. }
  318. //////////////////////////////////////////////////////////////////////////
  319. // CXTPCalendarTimeScalePropertiesDlg dialog
  320. CXTPCalendarTimeScalePropertiesDlg::CXTPCalendarTimeScalePropertiesDlg(CWnd* pParent, UINT nIDTemplate)
  321. {
  322. InitModalIndirect(XTPResourceManager()->LoadDialogTemplate(nIDTemplate), pParent);
  323. m_bShowScale2 = FALSE;
  324. TIME_ZONE_INFORMATION m_tziScale2;
  325. ::ZeroMemory(&m_tziScale2, sizeof(m_tziScale2));
  326. VERIFY(::GetTimeZoneInformation(&m_tziScale2) != TIME_ZONE_ID_INVALID);
  327. m_bAutoAdjustDayLight2 = FALSE;
  328. }
  329. void CXTPCalendarTimeScalePropertiesDlg::DoDataExchange(CDataExchange* pDX)
  330. {
  331. CDialog::DoDataExchange(pDX);
  332. DDX_Text(pDX, XTP_IDC_LABEL1, m_strCaption1);
  333. DDX_Text(pDX, XTP_IDC_LABEL2, m_strCaption2);
  334. DDX_Check(pDX, XTP_IDC_CHECK_ADDITIONAL_TIMEZONE, m_bShowScale2);
  335. DDX_Check(pDX, XTP_IDC_CHECK_ADJUST_DAYLIGHT_TIMEZONE2, m_bAutoAdjustDayLight2);
  336. DDX_Control(pDX, XTP_IDC_LABEL1, m_edtCaption1);
  337. DDX_Control(pDX, XTP_IDC_LABEL2, m_edtCaption2);
  338. DDX_Control(pDX, XTP_IDC_COMBO_TIMEZONE1, m_cmbZones1);
  339. DDX_Control(pDX, XTP_IDC_COMBO_TIMEZONE2, m_cmbZones2);
  340. DDX_Control(pDX, XTP_IDC_CHECK_ADJUST_DAYLIGHT_TIMEZONE1, m_btnAutoAdjustDayLight1);
  341. DDX_Control(pDX, XTP_IDC_CHECK_ADJUST_DAYLIGHT_TIMEZONE2, m_btnAutoAdjustDayLight2);
  342. }
  343. void CXTPCalendarTimeScalePropertiesDlg::OnBnClickedScale2()
  344. {
  345. UpdateData();
  346. m_edtCaption2.EnableWindow(m_bShowScale2);
  347. m_cmbZones2.EnableWindow(m_bShowScale2);
  348. m_btnAutoAdjustDayLight2.EnableWindow(m_bShowScale2);
  349. if(m_bShowScale2) {
  350. OnSelchangeZones2();
  351. }
  352. }
  353. BEGIN_MESSAGE_MAP(CXTPCalendarTimeScalePropertiesDlg, CDialog)
  354. ON_BN_CLICKED(XTP_IDC_CHECK_ADDITIONAL_TIMEZONE, OnBnClickedScale2)
  355. ON_CBN_SELCHANGE(XTP_IDC_COMBO_TIMEZONE2, OnSelchangeZones2)
  356. END_MESSAGE_MAP()
  357. BOOL CXTPCalendarTimeScalePropertiesDlg::OnInitDialog()
  358. {
  359. CDialog::OnInitDialog();
  360. //===========================================================================
  361. if(!m_arTimeZones.InitFromRegistry()) {
  362. ASSERT(FALSE);
  363. return TRUE;
  364. }
  365. TIME_ZONE_INFORMATION tziCurrent;
  366. ::ZeroMemory(&tziCurrent, sizeof(tziCurrent));
  367. if(::GetTimeZoneInformation(&tziCurrent) != TIME_ZONE_ID_INVALID)
  368. {
  369. CXTPCalendarTimeZone* pTZIcurr;
  370. pTZIcurr = m_arTimeZones.Find(&tziCurrent);
  371. if(pTZIcurr)
  372. {
  373. CString strGMT = pTZIcurr->GetDisplayString();
  374. m_cmbZones1.SetWindowText(strGMT);
  375. }
  376. BOOL bIsAutoAdjustDT = tziCurrent.StandardBias != 0 || tziCurrent.DaylightBias != 0;
  377. m_btnAutoAdjustDayLight1.SetCheck(bIsAutoAdjustDT);
  378. m_cmbZones1.EnableWindow(FALSE);
  379. m_btnAutoAdjustDayLight1.EnableWindow(FALSE);
  380. }
  381. else
  382. {
  383. ASSERT(FALSE);
  384. }
  385. int nSelIndex2 = 0;
  386. int nCount = m_arTimeZones.GetCount();
  387. for(int i = 0; i < nCount; i++)
  388. {
  389. CXTPCalendarTimeZone* pTZI2;
  390. pTZI2 = m_arTimeZones.GetAt(i);
  391. if(pTZI2)
  392. {
  393. CString strGMT = pTZI2->GetDisplayString();
  394. int nIdx = m_cmbZones2.AddString(strGMT);
  395. m_cmbZones2.SetItemDataPtr(nIdx, pTZI2);
  396. if(pTZI2->IsEqual(&m_tziScale2)) {
  397. nSelIndex2 = i;
  398. }
  399. }
  400. }
  401. m_cmbZones2.SetCurSel(nSelIndex2);
  402. m_bAutoAdjustDayLight2 = m_tziScale2.StandardBias != 0 ||
  403.  m_tziScale2.DaylightBias != 0;
  404. // update data
  405. UpdateData(FALSE);
  406. OnBnClickedScale2();
  407. return TRUE;
  408. }
  409. void CXTPCalendarTimeScalePropertiesDlg::OnOK()
  410. {
  411. UpdateData();
  412. if(m_bShowScale2)
  413. {
  414. int nSelIndex2 = m_cmbZones2.GetCurSel();
  415. if(nSelIndex2 != CB_ERR)
  416. {
  417. CXTPCalendarTimeZone* pTZI2;
  418. pTZI2 = (CXTPCalendarTimeZone*)m_cmbZones2.GetItemData(nSelIndex2);
  419. if(pTZI2) {
  420. m_tziScale2 = *pTZI2;
  421. }
  422. }
  423. if(!m_bAutoAdjustDayLight2)
  424. {
  425. m_tziScale2.StandardBias    = 0;
  426. m_tziScale2.DaylightBias    = 0;
  427. }
  428. }
  429. CDialog::OnOK();
  430. }
  431. void CXTPCalendarTimeScalePropertiesDlg::OnSelchangeZones2()
  432. {
  433. int nSelIndex2 = m_cmbZones2.GetCurSel();
  434. if (nSelIndex2 == CB_ERR)
  435. return;
  436. CXTPCalendarTimeZone* pTZI2;
  437. pTZI2 = (CXTPCalendarTimeZone*)m_cmbZones2.GetItemData(nSelIndex2);
  438. if(!pTZI2)
  439. return;
  440. if (pTZI2->StandardDate.wMonth == 0 && pTZI2->DaylightDate.wMonth == 0)
  441. {
  442. m_btnAutoAdjustDayLight2.EnableWindow(FALSE);
  443. m_btnAutoAdjustDayLight2.SetCheck(0);
  444. }
  445. else
  446. {
  447. m_btnAutoAdjustDayLight2.EnableWindow(TRUE);
  448. }
  449. }