SHEETREPORT.CPP
上传用户:shgx688
上传日期:2009-12-27
资源大小:855k
文件大小:19k
源码类别:

SNMP编程

开发平台:

MultiPlatform

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon
  4.   Revised on 7/21/98 10:12:24 AM
  5.   Comments: SheetAlpha.cpp: implementation of the CSheetReport class.
  6.  ************************************/
  7. #include "stdafx.h"
  8. #include "SheetReport.h"
  9. //////////////////////////////////////////////////////////////////////
  10. // Construction/Destruction
  11. //////////////////////////////////////////////////////////////////////
  12. #define IDTIMERWAITTODRAG 1000
  13. #define WAITTODRAG 500
  14. #define IDTIMERSCROLL 1001
  15. #define IDTIMERSPLASH 1002
  16. #define WAITSCROLL 10
  17. BEGIN_MESSAGE_MAP(CSheetReport, CSheetsWnd)
  18. //{{AFX_MSG_MAP(CSheetReport)
  19. ON_WM_LBUTTONDOWN()
  20. ON_WM_CREATE()
  21. ON_WM_HSCROLL()
  22. ON_WM_MOUSEMOVE()
  23. ON_WM_LBUTTONUP()
  24. ON_WM_SETCURSOR()
  25. ON_WM_TIMER()
  26. //}}AFX_MSG_MAP
  27. END_MESSAGE_MAP()
  28. // Function name : CSheetReport::CSheetReport
  29. // Description     : Default constructor of object
  30. // Return type : 
  31. CSheetReport::CSheetReport()
  32. {
  33. m_nActive = -1;
  34. m_fDXScrollBar = (double)2 / 5;
  35. m_nDXSplitter = 5;
  36. m_bCaptured = FALSE;
  37. }
  38. // Function name : CSheetReport::~CSheetReport
  39. // Description     : Destructor of this object
  40. // Return type : 
  41. CSheetReport::~CSheetReport()
  42. {
  43. int nCount = m_arrViews.GetSize();
  44. for (int i = 0; i < nCount; i++)
  45. delete m_arrViews.GetAt(i);
  46. m_arrViews.RemoveAll();
  47. }
  48. // Function name : CSheetReport::GetFirstView overridable
  49. // Description     : See CSheetsWnd::GetFirstView
  50. // Return type : CWnd* 
  51. CWnd* CSheetReport::GetFirstView()
  52. {
  53. m_nFind = -1;
  54. return GetNextView();
  55. }
  56. // Function name : CSheetReport::GetNextView overridable
  57. // Description     : See CSheetsWnd::GetNextView
  58. // Return type : CWnd* 
  59. CWnd* CSheetReport::GetNextView()
  60. {
  61. if (++m_nFind < m_arrViews.GetSize())
  62. return m_arrViews[m_nFind];
  63. return NULL;
  64. }
  65. // Function name : CSheetReport::GetActiveView overridable
  66. // Description     : See: CSheetsWnd::GetActiveView
  67. // Return type : CWnd* 
  68. CWnd* CSheetReport::GetActiveView()
  69. {
  70. if ((m_nActive>=0) && (m_nActive < m_arrViews.GetSize()))
  71. {
  72. m_nFind = m_nActive;
  73. return m_arrViews[m_nActive];
  74. }
  75. return NULL;
  76. }
  77. // Function name : CSheetReport::SetActiveView
  78. // Description     : Sets the active view
  79. // Return type : void 
  80. // Argument         : CWnd* pView
  81. void CSheetReport::SetActiveView(CWnd* pView)
  82. {
  83. // CSheetsWnd::SetActiveView(pView);
  84. CWnd* pOldActiveView = GetActiveView(), *pParent = GetParent();
  85. if (pView)
  86. if (pView != pOldActiveView)
  87. {
  88. // pParent->SendMessage(GetMessagePageChanging(), (WPARAM)pOldActiveView, (LPARAM)pView);
  89. if (!pOldActiveView || (pOldActiveView && pOldActiveView->m_hWnd != pView->m_hWnd))
  90. {
  91. pView->ShowWindow(SW_SHOW);
  92. if (pOldActiveView)
  93. pOldActiveView->ShowWindow(SW_HIDE);
  94. // Invalidate();
  95. // pParent->SendMessage(GetMessagePageChanged(), (WPARAM)pView, 0);
  96. }
  97. ((COutputReport *)pView)->m_nHasAlert = 0;
  98. // ((COutputReport *)pView)->SetSel();
  99. }
  100. if (pView)
  101. {
  102. CWnd* pParent = GetParent();
  103. int n = GetPageIndex(pView);
  104. pParent->SendMessage(GetMessagePageChanging(), (WPARAM)GetActiveView(), (LPARAM)pView);
  105. {
  106. if (n != m_nActive)
  107. {
  108. m_nActive = n;
  109. Invalidate();
  110. pParent->SendMessage(GetMessagePageChanged(), (WPARAM)pView, 0);
  111. }
  112. }
  113. }
  114. }
  115. // Function name : CSheetReport::GetViewTitle overridable
  116. // Description     : See CSheetsWnd::GetViewTitle
  117. // Return type : CString 
  118. // Argument         : CWnd* pView
  119. CString CSheetReport::GetViewTitle(CWnd* pView)
  120. {
  121. CString result = ((COutputReport*) pView)->m_strName;
  122. if (result.IsEmpty())
  123. result = _T("Sheet");
  124. return result;
  125. // return CSheetsWnd::GetViewTitle(pView);
  126. }
  127. // Function name : CSheetReport::OnLButtonDown
  128. // Description     : When user click in one of the pages..., it's different by CSheetsWnd::OnLButtonDown,
  129. // because in that object pages are not childs of parent object!
  130. // Return type : void 
  131. // Argument         : UINT nFlags
  132. // Argument         : CPoint point
  133. void CSheetReport::OnLButtonDown(UINT nFlags, CPoint point) 
  134. {
  135. SetFocus();
  136. if (GetSplitterRect().PtInRect(point))
  137. {
  138. m_bPointCaptured = point;
  139. m_bCaptured = TRUE;
  140. SetCapture();
  141. }
  142. BeginDrag(point);
  143. CSheetsWnd::OnLButtonDown (nFlags, point);
  144. }
  145. // Function name : CSheetReport::OnMouseMove
  146. // Description     : When user move mouse and drag the splitter...
  147. // Return type : void 
  148. // Argument         : UINT nFlags
  149. // Argument         : CPoint point
  150. void CSheetReport::OnMouseMove(UINT nFlags, CPoint point) 
  151. {
  152. if (m_bCaptured)
  153. {
  154. CRect rect; GetClientRect(rect);
  155. m_fDXScrollBar = 1 - (double)point.x / rect.Width();
  156. Resize(GetParent()->m_hWnd);
  157. Invalidate();
  158. }
  159. TrackDrag(point);
  160. CSheetsWnd::OnMouseMove(nFlags, point);
  161. }
  162. // Function name : CSheetReport::OnLButtonUp
  163. // Description     : Release the capture if object is captured. Remember spliter
  164. // Return type : void 
  165. // Argument         : UINT nFlags
  166. // Argument         : CPoint point
  167. void CSheetReport::OnLButtonUp(UINT nFlags, CPoint point) 
  168. {
  169. if (m_bCaptured)
  170. {
  171. m_bCaptured = FALSE;
  172. ReleaseCapture();
  173. }
  174. EndDrag(point);
  175. CSheetsWnd::OnLButtonUp(nFlags, point);
  176. }
  177. // Function name : CSheetReport::OnSetCursor
  178. // Description     : When user scan splitter rect must be LR cursor.
  179. // Return type : BOOL 
  180. // Argument         : CWnd* pWnd
  181. // Argument         : UINT nHitTest
  182. // Argument         : UINT message
  183. BOOL CSheetReport::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
  184. {
  185. CPoint p;
  186. if (GetCursorPos(&p))
  187. {
  188. ScreenToClient(&p);
  189. if (GetSplitterRect().PtInRect(p))
  190. if (!m_sPageDrag.IsDragging())
  191. {
  192. ::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZEWE));
  193. return TRUE;
  194. }
  195. }
  196. return CSheetsWnd::OnSetCursor(pWnd, nHitTest, message);
  197. }
  198. // Function name : CSheetReport::RecalcDrawRect
  199. // Description     : If something occurs in that object, like scroll bar, splitter then
  200. // m_DrawRect member variable, must be overwrite, for painting message.
  201. // Return type : void 
  202. void CSheetReport::RecalcDrawRect()
  203. {
  204. CRect rect; GetClientRect(rect);
  205. if (m_sbHorz.IsWindowVisible())
  206. {
  207. m_sbHorz.GetWindowRect(rect);
  208. ScreenToClient(rect);
  209. rect.right = rect.left;
  210. }
  211. m_DrawRect.right = rect.right - (bSplitter() ? m_nDXSplitter : 0);
  212. }
  213. // Function name : CSheetReport::Resize
  214. // Description     : Do not call base Resize, because it's not the same situation
  215. // Return type : void 
  216. // Argument         : HWND hWndParent
  217. void CSheetReport::Resize(HWND hWndParent)
  218. {
  219. CRect rect = GetRect(hWndParent);
  220. MoveWindow(rect);
  221. rect.bottom = rect.top;
  222. rect.top = 0;
  223. int nIndex = 0;
  224. CWnd* pChild;// = GetFirstView();
  225. while (nIndex<m_arrViews.GetSize())
  226. {
  227. pChild = m_arrViews[nIndex];
  228. pChild->MoveWindow(rect);
  229. nIndex++;
  230. }
  231. GetWindowRect(rect);
  232. ScreenToClient(rect);
  233. CRect rectBtns; m_btns.GetWindowRect(rectBtns);
  234. ScreenToClient(rectBtns);
  235. rect.left = min(max(rectBtns.right + GetSplitterRect().Width(), rect.right - (int)((double)rect.Width() * m_fDXScrollBar)), rect.Width() - 8);
  236. m_sbHorz.MoveWindow(rect);
  237. RecalcDrawRect();
  238. Invalidate();
  239. }
  240. // Function name : CSheetReport::OnCreate
  241. // Description     : Create a new scrollbar, for substitute an just in case that parent object 
  242. // need a horizontal scroll bar
  243. // Return type : int 
  244. // Argument         : LPCREATESTRUCT lpCreateStruct
  245. int CSheetReport::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  246. {
  247. if (CSheetsWnd::OnCreate(lpCreateStruct) == -1)
  248. return -1;
  249. m_sbHorz.Create(WS_CHILD | SBS_HORZ, CRect(0,0,0,0), this, IDBTNS + 1);
  250. SetTimer(IDTIMERSPLASH,1000,NULL);
  251. return 0;
  252. }
  253. // Function name : CSheetReport::Draw
  254. // Description     : Draw the pages of object, like CSheetsWnd::Draw() and complete the image of splitter.
  255. // Return type : void 
  256. // Argument         : CDC * pDC
  257. void CSheetReport::Draw(CDC * pDC)
  258. {
  259. CSheetsWnd::Draw(pDC);
  260. CRect rSplitter = GetSplitterRect();
  261. if (!rSplitter.IsRectEmpty())
  262. {
  263. pDC->FillRect(rSplitter, &CBrush(RGB(192,192,192)));
  264. static CPen pWhite(PS_SOLID,1,RGB(255,255,255));
  265. static CPen  pGray(PS_SOLID,1,RGB(128,128,128));
  266. pDC->SelectObject(&pGray);
  267. CPoint p = rSplitter.TopLeft() + CPoint(1,1);
  268. p += CPoint(2,0);
  269. pDC->MoveTo(p);
  270. p += CPoint(0,rSplitter.Height() - 2);
  271. pDC->LineTo(p);
  272. p += CPoint(-2,0);
  273. pDC->LineTo(p);
  274. pDC->SelectObject(&pWhite);
  275. p += CPoint(0,-(rSplitter.Height() - 2));
  276. pDC->LineTo(p);
  277. p += CPoint(2,0);
  278. pDC->LineTo(p);
  279. }
  280. }
  281. // Function name : CSheetReport::ShowScrollBar
  282. // Description     : Show or hide the scroll bar.m_sbHorz
  283. // Return type : void 
  284. // Argument         : BOOL bShow
  285. void CSheetReport::ShowScrollBar(BOOL bShow)
  286. {
  287. m_sbHorz.ShowWindow(bShow ? SW_SHOW : SW_HIDE);
  288. RecalcDrawRect();
  289. Invalidate();
  290. }
  291. // Function name : CSheetReport::OnHScroll
  292. // Description     : If the control receive a scroll message from m_sbHorz, then treat this
  293. // Return type : void 
  294. // Argument         : UINT nSBCode
  295. // Argument         : UINT nPos
  296. // Argument         : CScrollBar* pScrollBar
  297. void CSheetReport::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  298. {
  299. if (pScrollBar->m_hWnd == m_sbHorz.m_hWnd)
  300. {
  301. CWnd* pParent = GetActiveView();
  302. ASSERT (pParent && GetParent()->m_hWnd);
  303. switch (nSBCode)
  304. {
  305. case SB_THUMBTRACK:
  306. {
  307. int npp = m_sbHorz.GetScrollPos();
  308. int n = nPos - npp;
  309. UINT nCode = n < 0 ? SB_LINELEFT : SB_LINERIGHT;
  310. int nStep = n < 0 ? -1 : 1;
  311. n = abs(n);
  312. for (int i = 0; i < n; i++ )
  313. {
  314. pParent->SendMessage(WM_HSCROLL, MAKELONG(nCode,1), (long)pScrollBar->m_hWnd);
  315. npp = npp + nStep;
  316. m_sbHorz.SetScrollPos(npp);
  317. }
  318. break;
  319. }
  320. default:
  321. {
  322. pParent->SendMessage(WM_HSCROLL, MAKELONG(nSBCode,nPos), (long)pScrollBar->m_hWnd);
  323. int x = m_sbHorz.GetScrollPos();
  324. int min = 0;
  325. int max = 1024;
  326. int page = 10;
  327. CWnd * pWnd = GetActiveView();
  328. if(pWnd && pWnd->GetSafeHwnd())
  329. {
  330. pWnd->GetScrollRange(SB_HORZ,&min,&max);
  331. CRect rc;
  332. pWnd->GetClientRect(&rc);
  333. page = rc.Width();
  334. }
  335. switch (nSBCode)
  336. {
  337. case SB_TOP:
  338. x = 0;
  339. break;
  340. case SB_BOTTOM:
  341. x = INT_MAX;
  342. break;
  343. case SB_LINEUP:
  344. x -= 1;
  345. break;
  346. case SB_LINEDOWN:
  347. x += 1;
  348. break;
  349. case SB_PAGEUP:
  350. x -= page;
  351. break;
  352. case SB_PAGEDOWN:
  353. x += page;
  354. break;
  355. case SB_THUMBTRACK:
  356. x = nPos;
  357. break;
  358. }
  359. if(x>max)
  360. x = max;
  361. m_sbHorz.SetScrollPos(x);//pParent->GetScrollPos(SB_HORZ));
  362. break;
  363. }
  364. }
  365. }
  366. CSheetsWnd::OnHScroll(nSBCode, nPos, pScrollBar);
  367. }
  368. // Function name : CSheetReport::bSplitter
  369. // Description     : Return TRUE if splitter is showen in object, Private function.
  370. // Return type : BOOL 
  371. BOOL CSheetReport::bSplitter()
  372. {
  373. return !(GetSplitterRect().IsRectEmpty());
  374. }
  375. // Function name : CSheetReport::EraseExclude
  376. // Description     : When WM_ERASEBKGND occurs, then CSheetsWnd::OnEraseBkGnd,
  377. // require a rect that will be excluded from area erased.
  378. // Return type : CRect 
  379. CRect CSheetReport::EraseExclude()
  380. {
  381. CRect rSplitter = GetSplitterRect();
  382. return m_DrawRect + CRect(0,0, rSplitter.IsRectEmpty() ? 0 : m_nDXSplitter,0);
  383. }
  384. // Function name : CSheetReport::GetSplitterRect
  385. // Description     : If user want no splitter, must override this function, and return empty rect
  386. // Return type : CRect 
  387. CRect CSheetReport::GetSplitterRect()
  388. {
  389. CRect result(0,0,0,0);
  390. if (m_sbHorz.IsWindowVisible())
  391. result = CRect(m_DrawRect.right, m_DrawRect.top, m_DrawRect.right + m_nDXSplitter, m_DrawRect.bottom);
  392. return result;
  393. }
  394. // Function name : CSheetReport::GetScrollBar
  395. // Description     : Return the scroll bar of this object, created in OnCreate function
  396. // Return type : CScrollBar& 
  397. CScrollBar& CSheetReport::GetScrollBar()
  398. {
  399. return m_sbHorz;
  400. }
  401. // Function name : CSheetReport::GetPageIndex
  402. // Description     : Search for a pags with title lpszTitle, and return its position
  403. // Return type : int 
  404. // Argument         : LPCTSTR lpszTitle
  405. int CSheetReport::GetPageIndex(CWnd * pWnd)
  406. {
  407. int n = -1;
  408. for (int i = 0; i < m_arrViews.GetSize(); i++)
  409. {
  410. if (pWnd == m_arrViews[i])
  411. {
  412. n = i;
  413. break;
  414. }
  415. }
  416. return n;
  417. }
  418. // Function name : CSheetReport::AddPage
  419. // Description     : Add a new page to object, and return index position
  420. // Return type : int 
  421. // Argument         : LPCTSTR lpszTitle
  422. int CSheetReport::AddPage(LPCTSTR lpszTitle)
  423. {
  424. COutputReport * pWnd = new COutputReport();
  425. pWnd->m_strName = lpszTitle;
  426. if(!pWnd->Create(NULL,"123",WS_CHILD|WS_VISIBLE,CRect(0,0,100,100),GetParent(),100))
  427. {
  428. delete pWnd;
  429. return -1;
  430. }
  431. static COLORREF rgbText[16] = 
  432. {
  433. RGB(0,128,0),
  434. RGB(0,0,255),
  435. RGB(255,255,0),
  436. RGB(255,0,0),
  437. RGB(0,0,128),
  438. RGB(255,0,255),
  439. RGB(0,255,255),
  440. RGB(0,0,0),
  441. RGB(0,0,0),
  442. RGB(0,0,0),
  443. RGB(0,0,0),
  444. RGB(0,0,0),
  445. RGB(0,0,0),
  446. RGB(0,0,0),
  447. RGB(0,0,0),
  448. RGB(255,255,255)
  449. };
  450. pWnd->SetColourTable(rgbText);
  451. //CShowCase
  452. /* if(!pWnd->Create(WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL|WS_VSCROLL|ES_AUTOHSCROLL,CRect(0,0,0,0),GetParent(),1111))
  453. {
  454. delete pWnd;
  455. return -1;
  456. }
  457. */
  458. // pWnd->SetBackgroundColor(FALSE,RGB(0,0,0));
  459. //C
  460. /* if(!pWnd->Create(NULL,"",WS_CHILD|WS_VISIBLE|WS_VSCROLL,CRect(0,0,0,0),GetParent(),1111))
  461. {
  462. delete pWnd;
  463. return -1;
  464. }
  465. */
  466. // LOGFONT  LogFont;
  467. // m_fontSys.GetLogFont( &LogFont );
  468. //// pWnd->SetFont(&m_fontSys);
  469. //// pWnd->SetReadOnly();
  470. // pWnd->SetWindowText(lpszTitle);
  471. pWnd->ShowWindow(SW_HIDE);
  472. //// pWnd->Initialize();
  473. /* pWnd->SetCaseSensitive(FALSE);
  474. pWnd->SetStringQuotes(_T("""));
  475. pWnd->SetSLComment(_T('''));
  476. pWnd->SetSLComment(_T("rem"));
  477. */
  478. // pWnd->AddKeywords(szKeywords);
  479. // pWnd->AddConstants(szConstants);
  480. int nResult = m_arrViews.Add(pWnd);
  481. pWnd->m_nChildID = nResult;
  482. Invalidate();
  483. return nResult;
  484. }
  485. // Function name : CSheetReport::RemovePage
  486. // Description     : Remove page with title lpszTitle if founded
  487. // Return type : void 
  488. // Argument         : LPCTSTR lpszTitle
  489. void CSheetReport::RemovePage(LPCTSTR lpszTitle)
  490. {
  491. int nPage = GetPageIndex(lpszTitle);
  492. if (nPage >= 0)
  493. {
  494. COutputReport * pWnd = m_arrViews.GetAt(nPage);
  495. m_arrViews.RemoveAt(nPage);
  496. delete pWnd;
  497. Invalidate();
  498. }
  499. }
  500. // Function name : CSheetReport::RemovePage
  501. // Description     : Remove page by position
  502. // Return type : void 
  503. // Argument         : int nPage
  504. void CSheetReport::RemovePage(int nPage)
  505. {
  506. COutputReport * pWnd = m_arrViews.GetAt(nPage);
  507. m_arrViews.RemoveAt(nPage);
  508. delete pWnd;
  509. Invalidate();
  510. }
  511. // Function name : CSheetReport::BeginDrag
  512. // Description     : Start the dragging page if is case
  513. // Return type : void 
  514. // Argument         : CPoint ptn
  515. void CSheetReport::BeginDrag(CPoint ptn)
  516. {
  517. if (GetDrawRect().PtInRect(ptn))
  518. if (CWnd* pView = GetViewFromPoint(ptn))
  519. {
  520. m_sPageDrag.SetTrackDrag(pView);
  521. SetTimer(IDTIMERWAITTODRAG, WAITTODRAG, NULL);
  522. SetTimer(IDTIMERSCROLL,WAITSCROLL,NULL);
  523. }
  524. }
  525. // Function name : CSheetReport::TrackDrag
  526. // Description     : Continue the dragging page
  527. // Return type : void 
  528. // Argument         : CPoint ptn
  529. void CSheetReport::TrackDrag(CPoint ptn)
  530. {
  531. if (m_sPageDrag.IsDragging())
  532. {
  533. m_sPageDrag.SetTrackDrag(GetViewFromPoint(ptn));
  534. m_sPageDrag.Draw(this);
  535. }
  536. }
  537. // Function name : CSheetReport::EndDrag
  538. // Description     : Stop the draging page
  539. // Return type : void 
  540. // Argument         : CPoint ptn
  541. void CSheetReport::EndDrag(CPoint ptn)
  542. {
  543. KillTimer(IDTIMERWAITTODRAG);
  544. if (m_sPageDrag.IsDragging())
  545. {
  546. KillTimer(IDTIMERSCROLL);
  547. m_sPageDrag.SetTrackDrag(GetViewFromPoint(ptn));
  548. CDragPage sPageDrag(m_sPageDrag);
  549. // Reset the current values drag
  550. m_sPageDrag.Reset();
  551. ReleaseCapture();
  552. // Draw
  553. m_sPageDrag.Draw(this);
  554. // If case, change pages between them
  555. if (sPageDrag.GetTrackDrag() && sPageDrag.GetStartDrag())
  556. if (sPageDrag.GetTrackDrag() != sPageDrag.GetStartDrag())
  557. {
  558. int nS = GetPageIndex(sPageDrag.GetStartDrag());
  559. int nE = GetPageIndex(sPageDrag.GetTrackDrag());
  560. COutputReport * s = m_arrViews.GetAt(nS);
  561. COutputReport * e = m_arrViews.GetAt(nE);
  562. m_arrViews.SetAt(nS,e);
  563. m_arrViews.SetAt(nE,s);
  564. m_nActive = nE;
  565. Invalidate();
  566. }
  567. }
  568. }
  569. // Function name : CSheetReport::OnTimer
  570. // Description     : Wait starting to drag
  571. // Return type : void 
  572. // Argument         : UINT nIDEvent
  573. void CSheetReport::OnTimer(UINT nIDEvent) 
  574. {
  575. CPoint p;
  576. if (GetCursorPos(&p))
  577. {
  578. ScreenToClient(&p);
  579. switch (nIDEvent)
  580. {
  581. case IDTIMERWAITTODRAG:
  582. {
  583. if (CWnd* pViewTrackDrag = m_sPageDrag.GetTrackDrag())
  584. if (GetViewFromPoint(p) == pViewTrackDrag)
  585. {
  586. m_sPageDrag.Set(TRUE, pViewTrackDrag);
  587. m_sPageDrag.Draw(this);
  588. SetCapture();
  589. }
  590. KillTimer(IDTIMERWAITTODRAG);
  591. break;
  592. }
  593. case IDTIMERSCROLL:
  594. {
  595. if (m_sPageDrag.IsDragging())
  596. if (!m_DrawRect.PtInRect(p))
  597. if (p.y > m_DrawRect.top)
  598. if (p.y < m_DrawRect.bottom)
  599. {
  600. m_sPageDrag.SetTrackDrag(GetViewFromPoint(p));
  601. m_sPageDrag.Draw(this);
  602. SendMessage(WM_HSCROLL, MAKEWPARAM(p.x < m_DrawRect.left ? SB_LINELEFT : SB_LINERIGHT, 0), (LPARAM)m_btns.m_hWnd);
  603. }
  604. break;
  605. }
  606. }
  607. }
  608. if(nIDEvent == IDTIMERSPLASH)
  609. {
  610. int nIndex = 0;
  611. COutputReport* pChild;
  612. while (nIndex<m_arrViews.GetSize())
  613. {
  614. pChild = m_arrViews[nIndex];
  615. if(pChild->m_nHasAlert)
  616. {
  617. pChild->m_nSplashCnt = !pChild->m_nSplashCnt;
  618. InvalidateRect(GetPageRect(pChild));
  619. }
  620. nIndex++;
  621. }
  622. }
  623. CSheetsWnd::OnTimer(nIDEvent);
  624. }
  625. int CSheetReport::GetPageIndex(LPCTSTR lpszTitle)
  626. {
  627. int n = -1;
  628. CString str;
  629. for (int i = 0; i < m_arrViews.GetSize(); i++)
  630. {
  631. str = m_arrViews[i]->m_strName;
  632. if (str.CompareNoCase(lpszTitle) == 0)
  633. {
  634. n = i;
  635. break;
  636. }
  637. }
  638. return n;
  639. }
  640. int CSheetReport::AddPage(CWnd *pWnd)
  641. {
  642. int nResult = m_arrViews.Add((COutputReport*)pWnd);
  643. Invalidate();
  644. return nResult;
  645. }
  646. COutputReport * CSheetReport::GetPageAt(int nIndex)
  647. {
  648. if (nIndex < m_arrViews.GetSize() && nIndex>=0)
  649. return m_arrViews[nIndex];
  650. return NULL;
  651. }
  652. void CSheetReport::Splash(int nPage)
  653. {
  654. COutputReport * pView = GetPageAt(nPage);
  655. Splash(pView);
  656. }
  657. CBrush * CSheetReport::GetPageBkBrush(int nPage)
  658. {
  659. COutputReport * pView = GetPageAt(nPage);
  660. return GetPageBkBrush(pView);
  661. }
  662. CBrush * CSheetReport::GetPageBkBrush(CWnd *pView)
  663. {
  664. static CBrush br(RGB(0,255,0));
  665. static CBrush br1(RGB(255,0,0));
  666. static CBrush br2(RGB(255,255,0));
  667. static CBrush br3(RGB(0,0,255));
  668. if(pView)
  669. if(((COutputReport *)pView)->m_nHasAlert && ((COutputReport *)pView)->m_nSplashCnt)
  670. {
  671. switch(((COutputReport *)pView)->m_nChildID)
  672. {
  673. case 0:
  674. return &br;
  675. break;
  676. case 1:
  677. return &br1;
  678. break;
  679. case 2:
  680. return &br2;
  681. break;
  682. default:
  683. return &br3;
  684. break;
  685. }
  686. }
  687. return CSheetsWnd::GetPageBkBrush(pView);
  688. }
  689. void CSheetReport::Splash(CWnd *pView)
  690. {
  691. ((COutputReport*)pView)->m_nSplashCnt = 1;
  692. InvalidateRect(GetPageRect(pView));
  693. }