void CDuiScrollBar::OnLButtonUp(UINT nFlags, CPoint point)
{
    ReleaseDuiCapture();
    if(m_bDrag)
    {
        m_bDrag=FALSE;
        m_si.nPos=m_si.nTrackPos;
        m_si.nTrackPos=-1;
        OnMouseMove(nFlags,point);
        NotifySbCode(SB_THUMBPOSITION,m_si.nPos);
    }
    else if(m_uClicked!=-1)
    {
        if(m_bNotify)
        {
            KillDuiTimer(TIMERID_NOTIFY1);
            m_bNotify=FALSE;
        }
        else
        {
            KillDuiTimer(TIMERID_DELAY1);
        }
        if(m_uClicked==SB_LINEUP||m_uClicked==SB_LINEDOWN)
        {
            CRect rc=GetPartRect(m_uClicked);
            HDC hdc=GetDuiDC(&rc,OLEDC_PAINTBKGND);
            m_pSkin->Draw(hdc,rc,MAKESBSTATE(m_uClicked,SBST_NORMAL,m_bVertical),m_byAlpha);
            ReleaseDuiDC(hdc);
        }
        m_uClicked=-1;
    }
}
Exemple #2
0
	bool CDuiTimer::SetDuiTimer( HWND hWnd,LPARAM lParam,WPARAM wParam,int iInterval,int iTotalTimer /*= NULL*/,bool bAutoRun /*= true*/,bool bLoop /*= false*/,bool bRevers /*= false*/ )
	{
		if(GetTimerID())
			KillDuiTimer();

		SetTimerParam(hWnd,lParam,wParam,iInterval,iTotalTimer,bAutoRun,bLoop,bRevers);

		return InnerSetTimer();
	}
void CDuiScrollBar::OnTimer(char nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    if(nIDEvent==TIMERID_NOTIFY1)
    {
        DUIASSERT(m_uClicked!=-1 && m_uClicked!=SB_THUMBTRACK);

        switch(m_uClicked)
        {
        case SB_LINEUP:
            if(m_si.nPos==m_si.nMin)
            {
                KillDuiTimer(TIMERID_NOTIFY1);
                break;
            }
            break;
        case SB_LINEDOWN:
            if(m_si.nPos==m_si.nMax)
            {
                KillDuiTimer(TIMERID_NOTIFY1);
                break;
            }
            break;
        case SB_PAGEUP:
        case SB_PAGEDOWN:
        {
            CPoint pt;
            ::GetCursorPos(&pt);
            ::ScreenToClient(GetContainer()->GetHostHwnd(),&pt);
            CRect rc=GetPartRect(SB_THUMBTRACK);
            if(rc.PtInRect(pt))
            {
                KillDuiTimer(TIMERID_NOTIFY1);
                break;
            }
        }
        break;
        default:
            DUIASSERT(FALSE);
            break;
        }
    }
}