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; } }
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; } } }