NumSpinCtrl.cpp
上传用户:jiyingjie
上传日期:2007-01-02
资源大小:16k
文件大小:3k
源码类别:

编辑框

开发平台:

Visual C++

  1. // NumSpinCtrl.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "NumSpinCtrl.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CNumSpinCtrl
  12. IMPLEMENT_DYNAMIC(CNumSpinCtrl, CSpinButtonCtrl)
  13. CNumSpinCtrl::CNumSpinCtrl()
  14. {
  15. }
  16. CNumSpinCtrl::~CNumSpinCtrl()
  17. {
  18. }
  19. BEGIN_MESSAGE_MAP(CNumSpinCtrl, CSpinButtonCtrl)
  20. //{{AFX_MSG_MAP(CNumSpinCtrl)
  21. ON_NOTIFY_REFLECT(UDN_DELTAPOS, OnDeltapos)
  22. //}}AFX_MSG_MAP
  23. END_MESSAGE_MAP()
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CNumSpinCtrl message handlers
  26. void CNumSpinCtrl::SetPos(float val)
  27. {
  28. CSpinButtonCtrl::SetPos(500);
  29. CNumEdit *m_Edit = GetBuddy();
  30. if (m_Edit)
  31. if (m_Edit->IsKindOf(RUNTIME_CLASS(CNumEdit)))
  32. m_Edit->SetValue(val);
  33. }
  34. float CNumSpinCtrl::GetPos()
  35. {
  36. CNumEdit *m_Edit = GetBuddy();
  37. if (m_Edit)
  38. if (m_Edit->IsKindOf(RUNTIME_CLASS(CNumEdit)))
  39. return m_Edit->GetValue();
  40. return 0.0f;
  41. }
  42. void CNumSpinCtrl::SetRange(float nLower, float nUpper)
  43. {
  44. CSpinButtonCtrl::SetRange(0, 1000);
  45. CNumEdit *m_Edit = GetBuddy();
  46. if (m_Edit)
  47. if (m_Edit->IsKindOf(RUNTIME_CLASS(CNumEdit)))
  48. m_Edit->SetRange(nLower, nUpper);
  49. }
  50. void CNumSpinCtrl::GetRange(float & lower, float & upper) const
  51. {
  52. CNumEdit *m_Edit = GetBuddy();
  53. if (m_Edit)
  54. if (m_Edit->IsKindOf(RUNTIME_CLASS(CNumEdit)))
  55. m_Edit->GetRange(lower, upper);
  56. }
  57. CNumEdit* CNumSpinCtrl::GetBuddy() const
  58. {
  59. return (CNumEdit *)CSpinButtonCtrl::GetBuddy();
  60. }
  61. void CNumSpinCtrl::SetBuddy(CNumEdit * edit)
  62. {
  63. CSpinButtonCtrl::SetBuddy(edit);
  64. if (edit)
  65. if (edit->IsKindOf(RUNTIME_CLASS(CNumEdit)))
  66. edit->SetValue(0.0f);
  67. }
  68. void CNumSpinCtrl::OnDeltapos(NMHDR* pNMHDR, LRESULT* pResult) 
  69. {
  70. NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
  71. // TODO: Add your control notification handler code here
  72. if ((pNMUpDown->iPos <= pNMUpDown->iDelta) ||
  73. (pNMUpDown->iPos >= 1000 - pNMUpDown->iDelta)) pNMUpDown->iPos = 500;
  74. CNumEdit *m_Edit = GetBuddy();
  75. if (m_Edit)
  76. if (m_Edit->IsKindOf(RUNTIME_CLASS(CNumEdit)))
  77. m_Edit->ChangeAmount(pNMUpDown->iDelta);
  78. *pResult = 0;
  79. }
  80. float CNumSpinCtrl::GetDelta()
  81. {
  82. CNumEdit *m_Edit = GetBuddy();
  83. if (m_Edit)
  84. if (m_Edit->IsKindOf(RUNTIME_CLASS(CNumEdit)))
  85. return m_Edit->GetDelta();
  86. return 0.0f;
  87. }
  88. void CNumSpinCtrl::SetDelta(float delta)
  89. {
  90. CNumEdit *m_Edit = GetBuddy();
  91. if (m_Edit)
  92. if (m_Edit->IsKindOf(RUNTIME_CLASS(CNumEdit)))
  93. m_Edit->SetDelta(delta);
  94. }