TrackBarRenderer 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
비주얼 스타일을 사용하여 트랙 표시줄 컨트롤을 렌더링하는 데 사용되는 메서드를 제공합니다. 이 클래스는 상속될 수 없습니다.
public ref class TrackBarRenderer sealed
public ref class TrackBarRenderer abstract sealed
public sealed class TrackBarRenderer
public static class TrackBarRenderer
type TrackBarRenderer = class
Public NotInheritable Class TrackBarRenderer
Public Class TrackBarRenderer
- 상속
-
TrackBarRenderer
예제
다음 코드 예제를 사용 하는 사용자 지정 컨트롤을 만드는 방법을 보여 줍니다는 TrackBarRenderer 마우스 클릭에 응답 하는 가로 트랙 표시줄을 그리는 방법입니다.
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>
#using <System.dll>
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Windows::Forms::VisualStyles;
namespace TrackBarRendererSample
{
ref class CustomTrackBar : public Control
{
private:
int numberTicks;
Rectangle trackRectangle;
Rectangle ticksRectangle;
Rectangle thumbRectangle;
int currentTickPosition;
float tickSpace;
bool thumbClicked;
TrackBarThumbState thumbState;
public:
CustomTrackBar(int ticks, System::Drawing::Size trackBarSize)
{
this->Location = Point(10, 10);
this->Size = trackBarSize;
this->numberTicks = ticks;
this->BackColor = Color::DarkCyan;
this->DoubleBuffered = true;
numberTicks = 10;
thumbState = TrackBarThumbState::Normal;
// Calculate the initial sizes of the bar,
// thumb and ticks.
SetupTrackBar();
}
// Calculate the sizes of the bar, thumb, and ticks rectangle.
private:
void SetupTrackBar()
{
if (!TrackBarRenderer::IsSupported)
{
return;
}
Graphics^ g = this->CreateGraphics();
// Calculate the size of the track bar.
trackRectangle.X = ClientRectangle.X + 2;
trackRectangle.Y = ClientRectangle.Y + 28;
trackRectangle.Width = ClientRectangle.Width - 4;
trackRectangle.Height = 4;
// Calculate the size of the rectangle in which to
// draw the ticks.
ticksRectangle.X = trackRectangle.X + 4;
ticksRectangle.Y = trackRectangle.Y - 8;
ticksRectangle.Width = trackRectangle.Width - 8;
ticksRectangle.Height = 4;
tickSpace = ((float)ticksRectangle.Width - 1) /
((float)numberTicks - 1);
// Calculate the size of the thumb.
thumbRectangle.Size =
TrackBarRenderer::GetTopPointingThumbSize(g,
TrackBarThumbState::Normal);
thumbRectangle.X = CurrentTickXCoordinate();
thumbRectangle.Y = trackRectangle.Y - 8;
}
private:
int CurrentTickXCoordinate()
{
if (tickSpace == 0)
{
return 0;
}
else
{
return ((int)Math::Round(tickSpace) *
currentTickPosition);
}
}
// Draw the track bar.
protected:
virtual void OnPaint(PaintEventArgs^ e) override
{
if (!TrackBarRenderer::IsSupported)
{
this->Parent->Text = "CustomTrackBar Disabled";
return;
}
this->Parent->Text = "CustomTrackBar Enabled";
TrackBarRenderer::DrawHorizontalTrack(e->Graphics,
trackRectangle);
TrackBarRenderer::DrawTopPointingThumb(e->Graphics,
thumbRectangle, thumbState);
TrackBarRenderer::DrawHorizontalTicks(e->Graphics,
ticksRectangle, numberTicks, EdgeStyle::Raised);
}
// Determine whether the user has clicked the track bar thumb.
protected:
virtual void OnMouseDown(MouseEventArgs^ e) override
{
if (!TrackBarRenderer::IsSupported)
{
return;
}
if (this->thumbRectangle.Contains(e->Location))
{
thumbClicked = true;
thumbState = TrackBarThumbState::Pressed;
}
this->Invalidate();
}
// Redraw the track bar thumb if the user has moved it.
protected:
virtual void OnMouseUp(MouseEventArgs^ e) override
{
if (!TrackBarRenderer::IsSupported)
{
return;
}
if (thumbClicked == true)
{
if (e->Location.X > trackRectangle.X &&
e->Location.X < (trackRectangle.X +
trackRectangle.Width - thumbRectangle.Width))
{
thumbClicked = false;
thumbState = TrackBarThumbState::Hot;
this->Invalidate();
}
thumbClicked = false;
}
}
// Track cursor movements.
protected:
virtual void OnMouseMove(MouseEventArgs^ e) override
{
if (!TrackBarRenderer::IsSupported)
{
return;
}
// The user is moving the thumb.
if (thumbClicked == true)
{
// Track movements to the next tick to the right, if
// the cursor has moved halfway to the next tick.
if (currentTickPosition < numberTicks - 1 &&
e->Location.X > CurrentTickXCoordinate() +
(int)(tickSpace))
{
currentTickPosition++;
}
// Track movements to the next tick to the left, if
// cursor has moved halfway to the next tick.
else if (currentTickPosition > 0 &&
e->Location.X < CurrentTickXCoordinate() -
(int)(tickSpace / 2))
{
currentTickPosition--;
}
thumbRectangle.X = CurrentTickXCoordinate();
}
// The cursor is passing over the track.
else
{
if (thumbRectangle.Contains(e->Location))
{
thumbState = TrackBarThumbState::Hot;
}
else
{
thumbState = TrackBarThumbState::Normal;
}
}
Invalidate();
}
};
ref class Form1 : public Form
{
public:
Form1()
{
CustomTrackBar^ TrackBar1 = gcnew CustomTrackBar(19,
System::Drawing::Size(300, 50));
this->Width = 500;
this->Controls->Add(TrackBar1);
}
};
}
[STAThread]
int main()
{
// Note that the call to EnableVisualStyles below does
// not affect whether TrackBarRenderer.IsSupported is true;
// as long as visual styles are enabled by the operating system,
// IsSupported is true.
Application::EnableVisualStyles();
Application::Run(gcnew TrackBarRendererSample::Form1());
return 0;
}
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
namespace TrackBarRendererSample
{
class Form1 : Form
{
public Form1()
{
CustomTrackBar TrackBar1 = new CustomTrackBar(19,
new Size(300, 50));
this.Width = 500;
this.Controls.Add(TrackBar1);
}
[STAThread]
static void Main()
{
// Note that the call to EnableVisualStyles below does
// not affect whether TrackBarRenderer.IsSupported is true;
// as long as visual styles are enabled by the operating system,
// IsSupported is true.
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
class CustomTrackBar : Control
{
private int numberTicks = 10;
private Rectangle trackRectangle = new Rectangle();
private Rectangle ticksRectangle = new Rectangle();
private Rectangle thumbRectangle = new Rectangle();
private int currentTickPosition = 0;
private float tickSpace = 0;
private bool thumbClicked = false;
private TrackBarThumbState thumbState =
TrackBarThumbState.Normal;
public CustomTrackBar(int ticks, Size trackBarSize)
{
this.Location = new Point(10, 10);
this.Size = trackBarSize;
this.numberTicks = ticks;
this.BackColor = Color.DarkCyan;
this.DoubleBuffered = true;
// Calculate the initial sizes of the bar,
// thumb and ticks.
SetupTrackBar();
}
// Calculate the sizes of the bar, thumb, and ticks rectangle.
private void SetupTrackBar()
{
if (!TrackBarRenderer.IsSupported)
return;
using (Graphics g = this.CreateGraphics())
{
// Calculate the size of the track bar.
trackRectangle.X = ClientRectangle.X + 2;
trackRectangle.Y = ClientRectangle.Y + 28;
trackRectangle.Width = ClientRectangle.Width - 4;
trackRectangle.Height = 4;
// Calculate the size of the rectangle in which to
// draw the ticks.
ticksRectangle.X = trackRectangle.X + 4;
ticksRectangle.Y = trackRectangle.Y - 8;
ticksRectangle.Width = trackRectangle.Width - 8;
ticksRectangle.Height = 4;
tickSpace = ((float)ticksRectangle.Width - 1) /
((float)numberTicks - 1);
// Calculate the size of the thumb.
thumbRectangle.Size =
TrackBarRenderer.GetTopPointingThumbSize(g,
TrackBarThumbState.Normal);
thumbRectangle.X = CurrentTickXCoordinate();
thumbRectangle.Y = trackRectangle.Y - 8;
}
}
private int CurrentTickXCoordinate()
{
if (tickSpace == 0)
{
return 0;
}
else
{
return ((int)Math.Round(tickSpace) *
currentTickPosition);
}
}
// Draw the track bar.
protected override void OnPaint(PaintEventArgs e)
{
if (!TrackBarRenderer.IsSupported)
{
this.Parent.Text = "CustomTrackBar Disabled";
return;
}
this.Parent.Text = "CustomTrackBar Enabled";
TrackBarRenderer.DrawHorizontalTrack(e.Graphics,
trackRectangle);
TrackBarRenderer.DrawTopPointingThumb(e.Graphics,
thumbRectangle, thumbState);
TrackBarRenderer.DrawHorizontalTicks(e.Graphics,
ticksRectangle, numberTicks, EdgeStyle.Raised);
}
// Determine whether the user has clicked the track bar thumb.
protected override void OnMouseDown(MouseEventArgs e)
{
if (!TrackBarRenderer.IsSupported)
return;
if (this.thumbRectangle.Contains(e.Location))
{
thumbClicked = true;
thumbState = TrackBarThumbState.Pressed;
}
this.Invalidate();
}
// Redraw the track bar thumb if the user has moved it.
protected override void OnMouseUp(MouseEventArgs e)
{
if (!TrackBarRenderer.IsSupported)
return;
if (thumbClicked == true)
{
if (e.Location.X > trackRectangle.X &&
e.Location.X < (trackRectangle.X +
trackRectangle.Width - thumbRectangle.Width))
{
thumbClicked = false;
thumbState = TrackBarThumbState.Hot;
this.Invalidate();
}
thumbClicked = false;
}
}
// Track cursor movements.
protected override void OnMouseMove(MouseEventArgs e)
{
if (!TrackBarRenderer.IsSupported)
return;
// The user is moving the thumb.
if (thumbClicked == true)
{
// Track movements to the next tick to the right, if
// the cursor has moved halfway to the next tick.
if (currentTickPosition < numberTicks - 1 &&
e.Location.X > CurrentTickXCoordinate() +
(int)(tickSpace))
{
currentTickPosition++;
}
// Track movements to the next tick to the left, if
// cursor has moved halfway to the next tick.
else if (currentTickPosition > 0 &&
e.Location.X < CurrentTickXCoordinate() -
(int)(tickSpace / 2))
{
currentTickPosition--;
}
thumbRectangle.X = CurrentTickXCoordinate();
}
// The cursor is passing over the track.
else
{
thumbState = thumbRectangle.Contains(e.Location) ?
TrackBarThumbState.Hot : TrackBarThumbState.Normal;
}
Invalidate();
}
}
}
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Windows.Forms.VisualStyles
Namespace TrackBarRendererSample
Class Form1
Inherits Form
Public Sub New()
Dim TrackBar1 As New CustomTrackBar(19, New Size(300, 50))
Me.Width = 500
Me.Controls.Add(TrackBar1)
End Sub
<STAThread()> _
Shared Sub Main()
' Note that the call to EnableVisualStyles below does
' not affect whether TrackBarRenderer.IsSupported is true;
' as long as visual styles are enabled by the operating system,
' IsSupported is true.
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
End Class
Class CustomTrackBar
Inherits Control
Private numberTicks As Integer = 10
Private trackRectangle As New Rectangle()
Private ticksRectangle As New Rectangle()
Private thumbRectangle As New Rectangle()
Private currentTickPosition As Integer = 0
Private tickSpace As Single = 0
Private thumbClicked As Boolean = False
Private thumbState As TrackBarThumbState = TrackBarThumbState.Normal
Public Sub New(ByVal ticks As Integer, ByVal trackBarSize As Size)
With Me
.Location = New Point(10, 10)
.Size = trackBarSize
.numberTicks = ticks
.BackColor = Color.DarkCyan
.DoubleBuffered = True
End With
' Calculate the initial sizes of the bar,
' thumb and ticks.
SetupTrackBar()
End Sub
' Calculate the sizes of the bar, thumb, and ticks rectangle.
Private Sub SetupTrackBar()
If Not TrackBarRenderer.IsSupported Then
Return
End If
Using g As Graphics = Me.CreateGraphics()
' Calculate the size of the track bar.
trackRectangle.X = ClientRectangle.X + 2
trackRectangle.Y = ClientRectangle.Y + 28
trackRectangle.Width = ClientRectangle.Width - 4
trackRectangle.Height = 4
' Calculate the size of the rectangle in which to
' draw the ticks.
ticksRectangle.X = trackRectangle.X + 4
ticksRectangle.Y = trackRectangle.Y - 8
ticksRectangle.Width = trackRectangle.Width - 8
ticksRectangle.Height = 4
tickSpace = (CSng(ticksRectangle.Width) - 1) / _
(CSng(numberTicks) - 1)
' Calculate the size of the thumb.
thumbRectangle.Size = _
TrackBarRenderer.GetTopPointingThumbSize( _
g, TrackBarThumbState.Normal)
thumbRectangle.X = CurrentTickXCoordinate()
thumbRectangle.Y = trackRectangle.Y - 8
End Using
End Sub
Private Function CurrentTickXCoordinate() As Integer
If tickSpace = 0 Then
Return 0
Else
Return CInt(Math.Round(tickSpace)) * currentTickPosition
End If
End Function
' Draw the track bar.
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
If Not TrackBarRenderer.IsSupported Then
Me.Parent.Text = "CustomTrackBar Disabled"
Return
End If
Me.Parent.Text = "CustomTrackBar Enabled"
TrackBarRenderer.DrawHorizontalTrack(e.Graphics, _
trackRectangle)
TrackBarRenderer.DrawTopPointingThumb(e.Graphics, _
thumbRectangle, thumbState)
TrackBarRenderer.DrawHorizontalTicks(e.Graphics, _
ticksRectangle, numberTicks, EdgeStyle.Raised)
End Sub
' Determine whether the user has clicked the track bar thumb.
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
If Not TrackBarRenderer.IsSupported Then
Return
End If
If Me.thumbRectangle.Contains(e.Location) Then
thumbClicked = True
thumbState = TrackBarThumbState.Pressed
End If
Me.Invalidate()
End Sub
' Redraw the track bar thumb if the user has moved it.
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
If Not TrackBarRenderer.IsSupported Then
Return
End If
If thumbClicked = True Then
If e.Location.X > trackRectangle.X And _
e.Location.X < trackRectangle.X + _
trackRectangle.Width - thumbRectangle.Width Then
thumbClicked = False
thumbState = TrackBarThumbState.Hot
Me.Invalidate()
End If
thumbClicked = False
End If
End Sub
' Track cursor movements.
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
If Not TrackBarRenderer.IsSupported Then
Return
End If
' The user is moving the thumb.
If thumbClicked = True Then
' Track movements to the next tick to the right, if the
' cursor has moved halfway to the next tick.
If currentTickPosition < numberTicks - 1 And _
e.Location.X > CurrentTickXCoordinate() + _
CInt(tickSpace) Then
currentTickPosition += 1
' Track movements to the next tick to the left, if
' the cursor has moved halfway to the next tick.
Else
If currentTickPosition > 0 And _
e.Location.X < CurrentTickXCoordinate() - _
CInt(tickSpace / 2) Then
currentTickPosition -= 1
End If
End If
thumbRectangle.X = CurrentTickXCoordinate()
' The cursor is passing over the track.
Else
If thumbRectangle.Contains(e.Location) Then
thumbState = TrackBarThumbState.Hot
Else
thumbState = TrackBarThumbState.Normal
End If
End If
Invalidate()
End Sub
End Class
End Namespace
설명
합니다 TrackBarRenderer 클래스의 집합을 제공 static
운영 체제의 현재 비주얼 스타일을 사용 하 여 트랙 표시줄 컨트롤의 각 부분 렌더링에 사용할 수 있는 방법입니다. 컨트롤 렌더링이란 컨트롤의 사용자 인터페이스를 그리는 것을 말합니다. 현재 비주얼 스타일의 모양이 있어야 하는 사용자 지정 컨트롤을 그리는 경우에 유용 합니다.
운영 체제에서 비주얼 스타일을 사용 하 고 애플리케이션 창의 클라이언트 영역에 비주얼 스타일을 적용 하는 경우이 클래스의 메서드는 현재 비주얼 스타일을 사용 하 여 트랙 표시줄을 그립니다. 이 클래스의 메서드를 발생 시킵니다이 고, 그렇지는 InvalidOperationException합니다. 이 클래스의 멤버를 사용할 수 있는지 여부를 확인 하려면 값을 확인할 수 있습니다는 IsSupported 속성입니다.
이 클래스의 함수를 래핑하는 System.Windows.Forms.VisualStyles.VisualStyleRenderer 에서 노출 한 요소 중 하나에 설정 된는 System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar 클래스입니다. 자세한 내용은 비주얼 스타일을 사용하여 컨트롤 렌더링을 참조하세요.
속성
IsSupported |
비주얼 스타일을 사용하여 트랙 표시줄을 그리는 데 TrackBarRenderer 클래스를 사용할 수 있는지 여부를 나타내는 값을 가져옵니다. |