AlarmTipDlg.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:6k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. // AlarmTipDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "..stkui.h"
  5. #include "AlarmTipDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAlarmTipDlg dialog
  13. CAlarmTipDlg & CAlarmTipDlg::GetInstance()
  14. {
  15. static CAlarmTipDlg s_alarmtip;
  16. if( !::IsWindow(s_alarmtip.GetSafeHwnd()) )
  17. VERIFY( s_alarmtip.Create( CAlarmTipDlg::IDD, CWnd::GetDesktopWindow() ) );
  18. return s_alarmtip;
  19. }
  20. CAlarmTipDlg::CAlarmTipDlg(CWnd* pParent /*=NULL*/)
  21. : CTipDialog(CAlarmTipDlg::IDD, pParent)
  22. {
  23. //{{AFX_DATA_INIT(CAlarmTipDlg)
  24. // NOTE: the ClassWizard will add member initialization here
  25. //}}AFX_DATA_INIT
  26. m_nIndexStart = 0;
  27. m_nPageCount = 9;
  28. m_nItemHeight = 15;
  29. }
  30. void CAlarmTipDlg::SetItemHeight( int nHeight )
  31. {
  32. if( nHeight > 0 )
  33. m_nItemHeight = nHeight;
  34. if( ::IsWindow(GetSafeHwnd()) )
  35. {
  36. CRect rectClient;
  37. GetClientRect( &rectClient );
  38. m_nPageCount = (rectClient.Height()-25) / m_nItemHeight;
  39. m_nPageCount -= 1;
  40. if( m_nPageCount < 1 )
  41. m_nPageCount = 1;
  42. }
  43. }
  44. void CAlarmTipDlg::Show( )
  45. {
  46. m_nIndexStart = 0;
  47. UpdateButtons( );
  48. CTipDialog::Show();
  49. }
  50. void CAlarmTipDlg::Hide( )
  51. {
  52. CTipDialog::Hide();
  53. }
  54. void CAlarmTipDlg::ShowGradual( )
  55. {
  56. m_nIndexStart = 0;
  57. UpdateButtons( );
  58. CTipDialog::ShowGradual();
  59. }
  60. void CAlarmTipDlg::HideGradual( )
  61. {
  62. CTipDialog::HideGradual();
  63. }
  64. void CAlarmTipDlg::UpdateButtons( )
  65. {
  66. m_btnPrior.EnableWindow( m_nIndexStart > 0 );
  67. m_btnNext.EnableWindow( m_nIndexStart + m_nPageCount < AfxGetAlarmContainer().GetSize() );
  68. }
  69. void CAlarmTipDlg::DoDataExchange(CDataExchange* pDX)
  70. {
  71. CTipDialog::DoDataExchange(pDX);
  72. //{{AFX_DATA_MAP(CAlarmTipDlg)
  73. DDX_Control(pDX, IDC_NEXT, m_btnNext);
  74. DDX_Control(pDX, IDC_PRIOR, m_btnPrior);
  75. //}}AFX_DATA_MAP
  76. }
  77. BEGIN_MESSAGE_MAP(CAlarmTipDlg, CTipDialog)
  78. //{{AFX_MSG_MAP(CAlarmTipDlg)
  79. ON_WM_CHAR()
  80. ON_BN_CLICKED(IDC_PRIOR, OnPrior)
  81. ON_BN_CLICKED(IDC_NEXT, OnNext)
  82. ON_WM_PAINT()
  83. ON_WM_LBUTTONDOWN()
  84. //}}AFX_MSG_MAP
  85. END_MESSAGE_MAP()
  86. /////////////////////////////////////////////////////////////////////////////
  87. // CAlarmTipDlg message handlers
  88. BOOL CAlarmTipDlg::OnInitDialog() 
  89. {
  90. CTipDialog::OnInitDialog();
  91. // TODO: Add extra initialization here
  92. SetItemHeight( );
  93. UpdateButtons();
  94. return TRUE;  // return TRUE unless you set the focus to a control
  95.               // EXCEPTION: OCX Property Pages should return FALSE
  96. }
  97. void CAlarmTipDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
  98. {
  99. if( VK_PRIOR == nChar )
  100. {
  101. OnPrior();
  102. }
  103. else if( VK_NEXT == nChar )
  104. {
  105. OnNext();
  106. }
  107. CTipDialog::OnChar(nChar, nRepCnt, nFlags);
  108. }
  109. void CAlarmTipDlg::OnPrior() 
  110. {
  111. m_nIndexStart -= m_nPageCount;
  112. if( m_nIndexStart < 0 )
  113. m_nIndexStart = 0;
  114. UpdateButtons();
  115. Invalidate( );
  116. }
  117. void CAlarmTipDlg::OnNext() 
  118. {
  119. m_nIndexStart += m_nPageCount;
  120. if( m_nIndexStart >= AfxGetAlarmContainer().GetSize() )
  121. m_nIndexStart -= m_nPageCount;
  122. UpdateButtons();
  123. Invalidate( );
  124. }
  125. void CAlarmTipDlg::OnPaint() 
  126. {
  127. // Do not call CTipDialog::OnPaint() for painting messages
  128. // CTipDialog::OnPaint();
  129. CPaintDC dc(this); // device context for painting
  130. dc.SetBkMode( TRANSPARENT );
  131. CFont * pOldFont = AfxSelectDCFont(&dc,14);
  132. CRect rectAll;
  133. GetClientRect( &rectAll );
  134. int nWidthTotal = rectAll.Width();
  135. double o = (nWidthTotal-10) / 26;
  136. CRect rect;
  137. int x = 5, y = 5;
  138. int nCount = 0;
  139. CAlarmContainer & container = AfxGetAlarmContainer();
  140. // Draw Header Title
  141. {
  142. CString strCode = AfxGetVariantName(SLH_CODE,FALSE);
  143. CString strDiffPercent = AfxGetVariantName(SLH_DIFFPERCENT,FALSE);
  144. CString strReason;
  145. strReason.LoadString( IDS_ALARMRESULT_REASON );
  146. dc.SetTextColor( AfxGetProfile().GetColor(CColorClass::clrTitle) );
  147. rect = CRect(x,y,x+6*o,y+m_nItemHeight-1);
  148. dc.DrawText( strCode, rect, DT_VCENTER | DT_CENTER | DT_SINGLELINE | DT_WORD_ELLIPSIS );
  149. rect = CRect(x+6*o,y,x+14*o,y+m_nItemHeight-1);
  150. dc.DrawText( strDiffPercent, rect, DT_VCENTER | DT_CENTER | DT_SINGLELINE | DT_WORD_ELLIPSIS );
  151. rect = CRect(x+14*o,y,rectAll.right-5,y+m_nItemHeight-1);
  152. dc.DrawText( strReason, rect, DT_VCENTER | DT_CENTER | DT_SINGLELINE | DT_WORD_ELLIPSIS );
  153. y += m_nItemHeight;
  154. }
  155. y += 2;
  156. dc.SetTextColor( AfxGetProfile().GetColor(CColorClass::clrText) );
  157. for( int nIndex=m_nIndexStart; nIndex<container.GetSize(); nIndex++ )
  158. {
  159. nCount ++;
  160. if( nCount > m_nPageCount )
  161. break;
  162. ALARM & alarm = container.ElementAt(nIndex);
  163. CString strCode = alarm.report.m_szCode;
  164. CString strDiffPercent = "-";
  165. if( alarm.report.m_fLast > 1e-4 )
  166. strDiffPercent.Format( ".2f", alarm.report.m_fNew/alarm.report.m_fLast-1 );
  167. CString strReason = container.GetDescript( alarm );
  168. rect = CRect(x,y,x+6*o,y+m_nItemHeight-1);
  169. dc.DrawText( strCode, rect, DT_VCENTER | DT_RIGHT | DT_SINGLELINE | DT_WORD_ELLIPSIS );
  170. rect = CRect(x+6*o,y,x+14*o,y+m_nItemHeight-1);
  171. dc.DrawText( strDiffPercent, rect, DT_VCENTER | DT_RIGHT | DT_SINGLELINE | DT_WORD_ELLIPSIS );
  172. rect = CRect(x+14*o,y,rectAll.right-10,y+m_nItemHeight-1);
  173. dc.DrawText( strReason, rect, DT_VCENTER | DT_LEFT | DT_SINGLELINE | DT_WORD_ELLIPSIS );
  174. y += m_nItemHeight;
  175. }
  176. dc.SelectObject(pOldFont);
  177. }
  178. void CAlarmTipDlg::OnLButtonDown(UINT nFlags, CPoint point) 
  179. {
  180. ClientToScreen( &point );
  181. CRect rect;
  182. m_btnPrior.GetWindowRect( &rect );
  183. rect.InflateRect( 5, 5, 5, 5 );
  184. if( rect.PtInRect(point) )
  185. return;
  186. m_btnNext.GetWindowRect( &rect );
  187. rect.InflateRect( 5, 5, 5, 5 );
  188. if( rect.PtInRect(point) )
  189. return;
  190. CTipDialog::OnLButtonDown(nFlags, point);
  191. }