123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #include "stdafx.h"
- #include "SSwitch2.h"
- namespace SOUI
- {
- SSwitch2::SSwitch2() : m_BOpen(TRUE), m_BChangeing(FALSE), m_FrameNow(0), m_pSkin(NULL), m_pSkinOff(NULL), m_pSkinOn(NULL)
- {
- m_style.m_strCursor = _T("hand");
- m_evtSet.addEvent(EVENTID(EventSwitchChanging));
- }
- SSwitch2::~SSwitch2()
- {
- }
- void SSwitch2::GetTextRect(LPRECT pRect)
- {
- GetClientRect(pRect);
- SASSERT(m_pSkin);
- CSize szSwitch = m_pSkin->GetSkinSize();
- pRect->left += szSwitch.cx + SwitchSpacing;
- }
- CRect SSwitch2::GetSwitchRect()
- {
- CRect rcClient;
- GetClientRect(rcClient);
- SASSERT(m_pSkin);
- CSize szCheck = m_pSkin->GetSkinSize();
- CRect rcCheckBox(rcClient.TopLeft(), szCheck);
- rcCheckBox.OffsetRect(0, (rcClient.Height() - szCheck.cy) / 2);
- return rcCheckBox;
- }
- void SSwitch2::OnPaint(IRenderTarget *pRT)
- {
- //背景、前景皮肤中间状态数必须一致。自己保证,不再代码检查
- CRect rcSwitch =GetSwitchRect();
- if (IsDisabled(TRUE))
- {
- if (m_disableSkin == NULL)
- {
- if(m_disableSkin=m_pSkin->Scale(GetScale()))
- m_disableSkin->OnColorize(0XFF888888);
- }
- if (m_disableSkin)
- m_disableSkin->Draw(pRT, rcSwitch, m_BOpen ? m_FrameNow : m_pSkin->GetStates() - m_FrameNow - 1);
- }
- else
- {
- if (m_pSkin)
- m_pSkin->Draw(pRT, rcSwitch, m_BOpen ? m_FrameNow : m_pSkin->GetStates() - m_FrameNow - 1);
- }
- if (!m_pSkinOn || !m_pSkinOff)
- return;
- (m_BOpen ?m_pSkinOn:m_pSkinOff)->Draw(pRT, rcSwitch, m_FrameNow);
- __super::OnPaint(pRT);
- }
-
- CSize SSwitch2::GetDesiredSize(int wid, int hei)
- {
- CSize szSkinRet;
- if (m_pSkin)
- szSkinRet = m_pSkin->GetSkinSize();
- CSize szRet = __super::GetDesiredSize(wid,hei);
- szRet.cx += szSkinRet.cx + SwitchSpacing;
- szRet.cy = (std::max)(szRet.cy, szSkinRet.cy);
- return szRet;
- }
- HRESULT SSwitch2::OnAttrOpen(const SStringW& strValue, BOOL bLoading)
- {
- m_BOpen = (strValue != L"0");
- m_FrameNow = 0;
- if (!bLoading)
- SetOpen(m_BOpen);
-
- return bLoading ? S_FALSE : S_OK;
- }
- void SSwitch2::OnLButtonUp(UINT nFlags, CPoint point)
- {
- __super::OnLButtonUp(nFlags, point);
- if (!GetWindowRect().PtInRect(point)) return;
- SetOpen(!m_BOpen);
- }
- void SSwitch2::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
- {
- if (nChar == VK_SPACE)
- {
- SetOpen(!m_BOpen);
- }
- }
-
- //属性处理
- BOOL SSwitch2::IsOpen() { return m_BOpen; }
- void SSwitch2::SetOpen(BOOL bOpen)
- {
- if ((m_BOpen != bOpen) && !m_BChangeing)
- {
- EventSwitchChanging evt(this);
- evt.bTurnOn = bOpen;
- FireEvent(evt);
- if (evt.bCacnel)
- return;
- m_BOpen = bOpen;
- m_BChangeing = TRUE;
- m_FrameNow = m_pSkinOn->GetStates()-1;
- GetContainer()->RegisterTimelineHandler(this);
- }
- }
- void SSwitch2::OnStateChanged(DWORD dwOldState, DWORD dwNewState)
- {
- InvalidateRect(NULL);
- __super::OnStateChanged(dwOldState, dwNewState);
- }
- void SSwitch2::OnNextFrame()
- {
- if (m_BChangeing&&m_pSkinOn)
- {
- m_FrameNow--;
- if (m_FrameNow <=0)
- {
- m_FrameNow = 0;
- m_BChangeing = FALSE;
- GetContainer()->UnregisterTimelineHandler(this);
- }
- }
- else
- GetContainer()->UnregisterTimelineHandler(this);
- InvalidateRect(NULL);
- }
- }
|