bool TrackBar::OnEventKeyboard(Event event,WPARAM wparam,LPARAM lparam) { if(!GetVisible() || !GetEnabled()) return false; switch(event) { case EventKeyDown: if(wparam == VK_DOWN || wparam == VK_LEFT) { if(GetTrackValue()) SetTrackValue(GetTrackValue() - 1); if(GetParent()) GetParent()->OnEvent(EventChildCommand,ControlEventTrackChange,(LPARAM)this); return true; } if(wparam == VK_UP || wparam == VK_RIGHT) { if(GetTrackValue() < GetTrackRange()) SetTrackValue(GetTrackValue() + 1); if(GetParent()) GetParent()->OnEvent(EventChildCommand,ControlEventTrackChange,(LPARAM)this); return true; } if(wparam == VK_HOME) { SetTrackValue(0); if(GetParent()) GetParent()->OnEvent(EventChildCommand,ControlEventTrackChange,(LPARAM)this); return true; } if(wparam == VK_END) { SetTrackValue(GetTrackRange()); if(GetParent()) GetParent()->OnEvent(EventChildCommand,ControlEventTrackChange,(LPARAM)this); return true; } break; } return Control::OnEventKeyboard(event,wparam,lparam); }
Rect TrackBar::GetTrackBox(void) const { Rect box = GetBoundingBox(); Size size(8,box.GetHeight()); return Rect(Point(box.left + box.GetWidth() * GetTrackValue() / GetTrackRange() - size.cx / 2,box.top + box.GetHeight() / 2 - size.cy / 2 + 2),size); }
bool TrackBar::OnRender(void) { if(!GetVisible()) return false; Rect box = GetBoundingBox(); GetKernel()->GetUserInterface()->DrawTrackBar(box,GetTrackBox(),GetTrackRange(),GetTrackValue(),false,GetEnabled(),GetFocused()); return Control::OnRender(); }
void CKeyControl::DrawKeys(CLinkListNode<KEY> *pSelectNode) { CLinkListNode<KEY> *pNode = m_collKeys.GetHead(); // Draw the background lines if (pNode) { while (pNode->m_pNext) { m_pMemDC->MoveTo(KeyToPos(&pNode->m_Data)); m_pMemDC->LineTo(KeyToPos(&pNode->m_pNext->m_Data)); pNode = pNode->m_pNext; } } // Draw the keys pNode = m_collKeys.GetHead(); CBrush brBlack; brBlack.CreateSolidBrush(RGB(0, 0, 0)); CBrush *pOldBrush = m_pMemDC->SelectObject(&brBlack); while (pNode) { CPoint ptCenter = KeyToPos(&pNode->m_Data); if (pNode == pSelectNode) { m_pMemDC->MoveTo(ptCenter.x, ptCenter.y); m_pMemDC->LineTo(ptCenter.x, m_cy); CBrush brGreen(RGB(255, 0, 0)); CBrush *pOldBrush = m_pMemDC->SelectObject(&brGreen); // Draw the time lines down to the bottom of the screen int nTriSize = 5; POINT ptTri[3]; ptTri[0].x = ptCenter.x - nTriSize; ptTri[0].y = m_cy - nTriSize; ptTri[1].x = ptCenter.x + nTriSize; ptTri[1].y = m_cy - nTriSize; ptTri[2].x = ptCenter.x; ptTri[2].y = m_cy; m_pMemDC->Polygon(ptTri, 3); m_pMemDC->SelectObject(pOldBrush); } if (pNode->m_Data.m_bSelected) { m_pMemDC->FillSolidRect(CRect(ptCenter.x - 5, ptCenter.y - 5, ptCenter.x + 5, ptCenter.y + 5), RGB(255, 0, 0)); m_pMemDC->FrameRect(CRect(ptCenter.x - 5, ptCenter.y - 5, ptCenter.x + 5, ptCenter.y + 5), &brBlack); } else { m_pMemDC->FillSolidRect(CRect(ptCenter.x - 5, ptCenter.y - 5, ptCenter.x + 5, ptCenter.y + 5), RGB(150, 150, 150)); m_pMemDC->FrameRect(CRect(ptCenter.x - 5, ptCenter.y - 5, ptCenter.x + 5, ptCenter.y + 5), &brBlack); } if (pNode == pSelectNode) { CString sVal = GetTrackValue(pSelectNode); CSize szText = m_pMemDC->GetTextExtent(sVal); ptCenter.x += 10; if (ptCenter.x + szText.cx > m_cx) { ptCenter.x = m_cx - szText.cx; } ptCenter.y -= 5; ptCenter.y -= szText.cy; if (ptCenter.y < 0) { ptCenter.y = 0; } m_pMemDC->TextOut(ptCenter.x, ptCenter.y, GetTrackValue(pSelectNode)); } pNode = pNode->m_pNext; } m_pMemDC->SelectObject(pOldBrush); }
bool TrackBar::OnEventMouse(Event event,WPARAM wparam,LPARAM lparam) { if(!GetVisible() || !GetEnabled()) return false; switch(event) { case EventLeftButtonDown: if(PointInTrack(*(Point*)wparam)) { if(!GetFocused()) Focus(); mTracking = true; mTrackingValue = mValue; mTrackingPosition = ((Point*)wparam)->x - GetTrackBox().GetCenter().x; SetCapture(GetKernel()->GetWindowHandle()); return true; } if(PointIn(*(Point*)wparam)) { if(!GetFocused()) Focus(); if(((Point*)wparam)->x > GetTrackBox().GetCenter().x) { if(GetTrackValue() < GetTrackRange()) SetTrackValue(GetTrackValue() + 1); } else { if(GetTrackValue()) SetTrackValue(GetTrackValue() - 1); } return true; } break; case EventLeftButtonUp: if(mTracking) { mTracking = false; ReleaseCapture(); return true; } break; case EventMouseMove: if(mTracking) { Point delta = *(Point*)wparam; delta.x -= GetScreenPosition().x + mTrackingPosition; float val = (float)GetBoundingBox().GetWidth() / (float)GetTrackRange(); if((float)delta.x / val > (float)GetTrackRange()) SetTrackValue(GetTrackRange()); else if((float)delta.x / val < 0.0f) SetTrackValue(0); else SetTrackValue((float)delta.x / val); if(GetParent()) GetParent()->OnEvent(EventChildCommand,ControlEventTrackChange,(LPARAM)this); } break; } return Control::OnEventMouse(event,wparam,lparam); }