OrderListUI.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #pragma once
  2. inline double CalculateDelay(double state)
  3. {
  4. return pow(state, 2);
  5. }
  6. class OrderListUI : public CTileLayoutUI
  7. {
  8. public:
  9. enum { SCROLL_TIMERID = 10 };
  10. OrderListUI() : m_uButtonState(0), m_dwDelayDeltaY(0), m_dwDelayNum(0), m_dwDelayLeft(0)
  11. {
  12. SetItemSize(CSize(1000, 200));
  13. }
  14. //刷新
  15. void Refresh();
  16. void DoEvent(TEventUI& event)
  17. {
  18. if(!IsMouseEnabled() && event.Type > UIEVENT__MOUSEBEGIN && event.Type < UIEVENT__MOUSEEND)
  19. {
  20. if(m_pParent != NULL)
  21. {
  22. m_pParent->DoEvent(event);
  23. }
  24. else
  25. {
  26. CTileLayoutUI::DoEvent(event);
  27. }
  28. return;
  29. }
  30. if(event.Type == UIEVENT_TIMER && event.wParam == SCROLL_TIMERID)
  31. {
  32. if((m_uButtonState & UISTATE_CAPTURED) != 0)
  33. {
  34. POINT pt = m_pManager->GetMousePos();
  35. LONG cy = (pt.y - m_ptLastMouse.y);
  36. m_ptLastMouse = pt;
  37. SIZE sz = GetScrollPos();
  38. sz.cy -= cy;
  39. SetScrollPos(sz);
  40. return;
  41. }
  42. else if(m_dwDelayLeft > 0)
  43. {
  44. --m_dwDelayLeft;
  45. SIZE sz = GetScrollPos();
  46. LONG lDeltaY = (LONG)(CalculateDelay((double)m_dwDelayLeft / m_dwDelayNum) * m_dwDelayDeltaY);
  47. if((lDeltaY > 0 && sz.cy != 0) || (lDeltaY < 0 && sz.cy != GetScrollRange().cy))
  48. {
  49. sz.cy -= lDeltaY;
  50. SetScrollPos(sz);
  51. return;
  52. }
  53. }
  54. m_dwDelayDeltaY = 0;
  55. m_dwDelayNum = 0;
  56. m_dwDelayLeft = 0;
  57. m_pManager->KillTimer(this, SCROLL_TIMERID);
  58. return;
  59. }
  60. if(event.Type == UIEVENT_BUTTONDOWN && IsEnabled())
  61. {
  62. m_uButtonState |= UISTATE_CAPTURED;
  63. m_ptLastMouse = event.ptMouse;
  64. m_dwDelayDeltaY = 0;
  65. m_dwDelayNum = 0;
  66. m_dwDelayLeft = 0;
  67. ::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_HAND)));
  68. m_pManager->SetTimer(this, SCROLL_TIMERID, 50U);
  69. return;
  70. }
  71. if(event.Type == UIEVENT_BUTTONUP)
  72. {
  73. if((m_uButtonState & UISTATE_CAPTURED) != 0)
  74. {
  75. m_uButtonState &= ~UISTATE_CAPTURED;
  76. ::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));
  77. if(m_ptLastMouse.y != event.ptMouse.y)
  78. {
  79. m_dwDelayDeltaY = (event.ptMouse.y - m_ptLastMouse.y);
  80. if(m_dwDelayDeltaY > 120)
  81. {
  82. m_dwDelayDeltaY = 120;
  83. }
  84. else if(m_dwDelayDeltaY < -120)
  85. {
  86. m_dwDelayDeltaY = -120;
  87. }
  88. m_dwDelayNum = (DWORD)sqrt((double)abs(m_dwDelayDeltaY)) * 5;
  89. m_dwDelayLeft = m_dwDelayNum;
  90. }
  91. else
  92. {
  93. m_pManager->KillTimer(this, SCROLL_TIMERID);
  94. }
  95. }
  96. return;
  97. }
  98. if(event.Type == UIEVENT_SCROLLWHEEL)
  99. {
  100. LONG lDeltaY = 0;
  101. if(m_dwDelayNum > 0)
  102. {
  103. lDeltaY = (LONG)(CalculateDelay((double)m_dwDelayLeft / m_dwDelayNum) * m_dwDelayDeltaY);
  104. }
  105. switch(LOWORD(event.wParam))
  106. {
  107. case SB_LINEUP:
  108. if(m_dwDelayDeltaY >= 0)
  109. {
  110. m_dwDelayDeltaY = lDeltaY + 8;
  111. }
  112. else
  113. {
  114. m_dwDelayDeltaY = lDeltaY + 12;
  115. }
  116. break;
  117. case SB_LINEDOWN:
  118. if(m_dwDelayDeltaY <= 0)
  119. {
  120. m_dwDelayDeltaY = lDeltaY - 8;
  121. }
  122. else
  123. {
  124. m_dwDelayDeltaY = lDeltaY - 12;
  125. }
  126. break;
  127. }
  128. if(m_dwDelayDeltaY > 100)
  129. {
  130. m_dwDelayDeltaY = 100;
  131. }
  132. else if(m_dwDelayDeltaY < -100)
  133. {
  134. m_dwDelayDeltaY = -100;
  135. }
  136. m_dwDelayNum = (DWORD)sqrt((double)abs(m_dwDelayDeltaY)) * 5;
  137. m_dwDelayLeft = m_dwDelayNum;
  138. m_pManager->SetTimer(this, SCROLL_TIMERID, 50U);
  139. return;
  140. }
  141. CTileLayoutUI::DoEvent(event);
  142. }
  143. private:
  144. UINT m_uButtonState;
  145. POINT m_ptLastMouse;
  146. LONG m_dwDelayDeltaY;
  147. DWORD m_dwDelayNum;
  148. DWORD m_dwDelayLeft;
  149. int m_status = 1; //1:未处理 2:已确认 3:配送中 4:成功 5:失败 6:退款中
  150. };