阅读背景:

duilib 自定义控件1 CTileLayoutUI

来源:互联网 


XML:



class CPlayCombinationUI : public CTileLayoutUI
{
public:
	enum { SCROLL_TIMERID = 10 };

	CPlayCombinationUI() : m_uButtonState(0), m_dwDelayDeltaY(0), m_dwDelayNum(0), m_dwDelayLeft(0)
	{

	}


	BOOL  AddItem( CDialogBuilder*builder,CContainerUI* pDesk)
	{
		BOOL  bIsSuc =FALSE;
		if( pDesk != NULL ) {
			if( pDesk == NULL ){
				pDesk = static_cast<CContainerUI*>(builder->Create());
			}
			if( pDesk != NULL ) {
				this->Add(pDesk);
				bIsSuc  =TRUE;
			}
			else {
				this->RemoveAll();
			}
		}
		return bIsSuc;
	}
	void DoEvent(TEventUI& event)  
	{
		if( !IsMouseEnabled() && event.Type > UIEVENT__MOUSEBEGIN && event.Type < UIEVENT__MOUSEEND ) {
			if( m_pParent != NULL ) m_pParent->DoEvent(event);
			else CTileLayoutUI::DoEvent(event);
			return;
		}

		if( event.Type == UIEVENT_TIMER && event.wParam == SCROLL_TIMERID )
		{
			if( (m_uButtonState & UISTATE_CAPTURED) != 0 ) {
				POINT pt = m_pManager->GetMousePos();
				LONG cy = (pt.y - m_ptLastMouse.y);
				m_ptLastMouse = pt;
				SIZE sz = GetScrollPos();
				sz.cy -= cy;
				SetScrollPos(sz);
				return;
			}
			else if( m_dwDelayLeft > 0 ) {
				--m_dwDelayLeft;
				SIZE sz = GetScrollPos();
				LONG lDeltaY =  (LONG)(CalculateDelay((double)m_dwDelayLeft / m_dwDelayNum) * m_dwDelayDeltaY);
				if( (lDeltaY > 0 && sz.cy != 0)  || (lDeltaY < 0 && sz.cy != GetScrollRange().cy ) ) {
					sz.cy -= lDeltaY;
					SetScrollPos(sz);
					return;
				}
			}
			m_dwDelayDeltaY = 0;
			m_dwDelayNum = 0;
			m_dwDelayLeft = 0;
			m_pManager->KillTimer(this, SCROLL_TIMERID);
			return;
		}
		if( event.Type == UIEVENT_BUTTONDOWN && IsEnabled() )
		{
			m_uButtonState |= UISTATE_CAPTURED;
			m_ptLastMouse = event.ptMouse;
			m_dwDelayDeltaY = 0;
			m_dwDelayNum = 0;
			m_dwDelayLeft = 0;
			::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_HAND)));
			m_pManager->SetTimer(this, SCROLL_TIMERID, 50U);
			return;
		}
		if( event.Type == UIEVENT_BUTTONUP )
		{
			if( (m_uButtonState & UISTATE_CAPTURED) != 0 ) {
				m_uButtonState &= ~UISTATE_CAPTURED;
				::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));
				if( m_ptLastMouse.y != event.ptMouse.y ) {
					m_dwDelayDeltaY = (event.ptMouse.y - m_ptLastMouse.y);
					if( m_dwDelayDeltaY > 120 ) m_dwDelayDeltaY = 120;
					else if( m_dwDelayDeltaY < -120 ) m_dwDelayDeltaY = -120;
					m_dwDelayNum = (DWORD)sqrt((double)abs(m_dwDelayDeltaY)) * 5;
					m_dwDelayLeft = m_dwDelayNum;
				}
				else 
					m_pManager->KillTimer(this, SCROLL_TIMERID);
			}
			return;
		}
// 		if( event.Type == UIEVENT_SCROLLWHEEL )
// 		{
// 			LONG lDeltaY = 0;
// 			if( m_dwDelayNum > 0 ) lDeltaY =  (LONG)(CalculateDelay((double)m_dwDelayLeft / m_dwDelayNum) * m_dwDelayDeltaY);
// 			switch( LOWORD(event.wParam) ) {
// 			case SB_LINEUP:
// 				if( m_dwDelayDeltaY >= 0 ) m_dwDelayDeltaY = lDeltaY + 8;
// 				else m_dwDelayDeltaY = lDeltaY + 12;
// 				break;
// 			case SB_LINEDOWN:
// 				if( m_dwDelayDeltaY <= 0 ) m_dwDelayDeltaY = lDeltaY - 8;
// 				else m_dwDelayDeltaY = lDeltaY - 12;
// 				break;
// 			}
// 			if( m_dwDelayDeltaY > 100 ) m_dwDelayDeltaY = 100;
// 			else if( m_dwDelayDeltaY < -100 ) m_dwDelayDeltaY = -100;
// 			m_dwDelayNum = (DWORD)sqrt((double)abs(m_dwDelayDeltaY)) * 5;
// 			m_dwDelayLeft = m_dwDelayNum;
// 			m_pManager->SetTimer(this, SCROLL_TIMERID, 50U);
// 			return;
// 		}
		CTileLayoutUI::DoEvent(event);
	}

private:
	UINT m_uButtonState;
	POINT m_ptLastMouse;
	LONG m_dwDelayDeltaY;
	DWORD m_dwDelayNum;
	DWORD m_dwDelayLeft;

};class CPlayCombinationUI 



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: