SSwitch2.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #pragma once
  2. #include <core/Swnd.h>
  3. #include <event/Events.h>
  4. namespace SOUI
  5. {
  6. #define EVT_SWITCH_CHANGED EVT_EXTERNAL_BEGIN + 800
  7. SEVENT_BEGIN_EX(EventSwitchChanging, EVT_SWITCH_CHANGED, on_init, )
  8. BOOL bTurnOn=FALSE;
  9. BOOL bCacnel = FALSE;
  10. SEVENT_END()
  11. class SSwitch2 : public SWindow, public ITimelineHandler
  12. {
  13. SOUI_CLASS_NAME(SSwitch2, L"switch2")
  14. enum { SwitchSpacing = 4 };
  15. public:
  16. SSwitch2();
  17. ~SSwitch2();
  18. protected://SWindow的虚函数
  19. virtual CSize GetDesiredSize(int wid, int hei);
  20. virtual void OnStateChanged(DWORD dwOldState, DWORD dwNewState);
  21. // 通过 ITimelineHandler 继承
  22. virtual void OnNextFrame();
  23. public://属性处理
  24. BOOL IsOpen();
  25. void SetOpen(BOOL bOpen);
  26. protected:
  27. virtual void GetTextRect(LPRECT pRect);
  28. CRect GetSwitchRect();
  29. void OnPaint(IRenderTarget *pRT);
  30. void OnLButtonUp(UINT nFlags, CPoint point);
  31. void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  32. HRESULT OnAttrOpen(const SStringW& strValue, BOOL bLoading);
  33. //SOUI控件消息映射表
  34. SOUI_MSG_MAP_BEGIN()
  35. MSG_WM_PAINT_EX(OnPaint)
  36. MSG_WM_LBUTTONUP(OnLButtonUp)
  37. MSG_WM_KEYDOWN(OnKeyDown)
  38. SOUI_MSG_MAP_END()
  39. ISkinObj *m_pSkin;
  40. ISkinObj *m_pSkinOn;
  41. ISkinObj *m_pSkinOff;
  42. SOUI_ATTRS_BEGIN()
  43. ATTR_SKIN(L"skin", m_pSkin, TRUE)
  44. ATTR_SKIN(L"skinon", m_pSkinOn, TRUE)
  45. ATTR_SKIN(L"skinoff", m_pSkinOff, TRUE)
  46. ATTR_CUSTOM(L"open", OnAttrOpen)
  47. SOUI_ATTRS_END()
  48. private:
  49. BOOL m_BOpen;
  50. BOOL m_BChangeing; //正在改变状态..
  51. int m_FrameNow; //当前帧
  52. CAutoRefPtr<ISkinObj> m_disableSkin;
  53. };
  54. }