⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trackbar.cpp

📁 XOSL 多操作系统管理工具 源代码 多系统引导工具
💻 CPP
字号:
/*
 * Extended Operating System Loader (XOSL)
 * Copyright (c) 1999 by Geurt Vos
 *
 * This code is distributed under GNU General Public License (GPL)
 *
 * The full text of the license can be found in the GPL.TXT file,
 * or at http://www.gnu.org
 */

#include <trackbar.h>
#include <graph.h>
#include <key.h>

#define TRACKBAR_HEIGHT 15

CTrackBar::CTrackBar(int Min, int Max, int Value, int Left, int Top, int Width, int Visible, void *HandlerClass):
		CAnimatedControl(Left,Top,Width,TRACKBAR_HEIGHT,Visible,false,HandlerClass)
{
	this->Min = Min;
	this->Max = Max;
	this->Value = Value;
	SetSliderPos();
	ButtonDown = false;
	TrackBarChange = NULL;
}

CTrackBar::~CTrackBar()
{
}

void CTrackBar::SetMin(int Min)
{
	this->Min = Min;
	SetSliderPos();
	Refresh();
}

void CTrackBar::SetMax(int Max)
{
	this->Max = Max;
	SetSliderPos();
	Refresh();
}

void CTrackBar::SetValue(int Value)
{
	if (Value > Max)
		Value = Max;
	if (Value < Min)
		Value = Min;
	if (Value != this->Value) {
		this->Value = Value;
		SetSliderPos();
		Refresh();
		if (TrackBarChange && HandlerClass)
			TrackBarChange(HandlerClass,Value);
	}
}

int CTrackBar::GetValue()
{
	return Value;
}

void CTrackBar::Draw(long, long, long, long)
{
	Graph->HLine(4,4,Width - 9,18);
	Graph->VLine(4,5,4,18);
	if (Enabled && MouseIsOver) {
		Graph->HLine(5,5,Width - 11,17);
		Graph->PutPixel(5,6,17);
		Graph->PutPixel(5,7,17);

		Graph->HLine(6,8,Width - 10,20);
		Graph->VLine(Width - 6,5,3,20);

		Graph->Bar(6,6,Width - 12,2,21);

	}
	else {
		Graph->Bar(5,5,Width - 10,4,21);
	}

	Graph->HLine(4,9,Width - 8,21);
	Graph->VLine(Width - 5,4,5,21);
	if (GotFocus)
		Graph->Rectangle(0,0,Width,Height,18);
	DrawSlider();
}

void CTrackBar::DrawSlider()
{
	Graph->HLine(SliderPos,3,4,21);
	Graph->VLine(SliderPos,4,7,21);
	if (Enabled && MouseIsOver) {
		Graph->HLine(SliderPos,11,5,17);
		Graph->VLine(SliderPos + 4,3,8,17);
		Graph->VLine(SliderPos + 1,4,6,20);
		Graph->PutPixel(SliderPos + 2,4,20);
		Graph->VLine(SliderPos + 2,5,5,19);
		Graph->HLine(SliderPos + 1,10,3,18);
		Graph->VLine(SliderPos + 3,4,6,18);
	}
	else {
		Graph->HLine(SliderPos,11,5,18);
		Graph->VLine(SliderPos + 4,3,8,18);
		Graph->Bar(SliderPos + 1,4,3,7,19);
	}
}

void CTrackBar::SetSliderPos()
{
	SliderPos = 4 + ((long)(Value - Min) * (Width - 13)) / (Max - Min);
}

void CTrackBar::SetMetrics(int Width, int Height)
{
	CControl::SetMetrics(Width,Height);
	SetValue(Value);
}

int CTrackBar::MouseDown(int MouseX, int MouseY)
{
	int Status;

	Status = CControl::MouseDown(MouseX,MouseY);
	if (Status != -1) {
		ButtonDown = true;
		MouseMove(MouseX,MouseY);
	}
	return Status;
}

int CTrackBar::MouseMove(int X, int Y)
{
	int Status;

	Status = CAnimatedControl::MouseMove(X,Y);

	if (ButtonDown)
		SetValue(((long)(X - Left - 4) * (Max - Min)) / (Width - 13) + Min);

	return Status;
}

void CTrackBar::MouseUp()
{
	ButtonDown = false;
}

void CTrackBar::OnChange(TTrackBarChange TrackBarChange)
{
	this->TrackBarChange = TrackBarChange;
}

void CTrackBar::KeyPress(unsigned short Key)
{
	switch (Key) {
		case KEY_NONE:
			break;
		case KEY_LEFT:
		case KEY_LEFT_EXT:
			SetValue(Value - 1);
			break;
		case KEY_RIGHT:
		case KEY_RIGHT_EXT:
			SetValue(Value + 1);
			break;
		case KEY_HOME:
		case KEY_HOME_EXT:
			SetValue(Min);
			break;
		case KEY_END:
		case KEY_END_EXT:
			SetValue(Max);
			break;
		case KEY_PAGEUP:
		case KEY_PU_EXT:
		case KEY_CTRLLEFT:
		case KEY_CTRLL_EXT:
			SetValue(Value - 8);
			break;
		case KEY_PAGEDOWN:
		case KEY_PD_EXT:
		case KEY_CTRLRIGHT:
		case KEY_CTRLR_EXT:
			SetValue(Value + 8);
			break;
		default:
			break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -