ButtonRenderer 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
비주얼 스타일을 사용하거나 사용하지 않고 단추 컨트롤을 렌더링하는 데 사용되는 메서드를 제공합니다. 이 클래스는 상속될 수 없습니다.
public ref class ButtonRenderer sealed
public ref class ButtonRenderer abstract sealed
public sealed class ButtonRenderer
public static class ButtonRenderer
type ButtonRenderer = class
Public NotInheritable Class ButtonRenderer
Public Class ButtonRenderer
- 상속
-
ButtonRenderer
예제
다음 코드 예제를 사용 하는 사용자 지정 컨트롤을 만드는 방법을 보여 줍니다는 DrawButton 단추에 그릴 메서드. 단추를 클릭 하 고 컨트롤 경계 내부에서 원래 단추의 작은 단추를 그립니다 컨트롤에서 사용 하는 경우는 DrawParentBackground 원래 단추의 rest를 통해 그릴 메서드.
#using <System.dll>
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Windows::Forms::VisualStyles;
namespace ButtonRendererSample
{
public ref class CustomButton : public Control
{
private:
Rectangle clickRectangleValue;
private:
PushButtonState state;
public:
CustomButton()
{
__super::Control();
this->Size = System::Drawing::Size(100, 40);
this->Location = Point(50, 50);
this->Font = SystemFonts::IconTitleFont;
this->Text = "Click here";
clickRectangleValue = Rectangle();
state = PushButtonState::Normal;
}
// Define the bounds of the smaller pressed button.
public:
property Rectangle ClickRectangle
{
Rectangle get()
{
clickRectangleValue.X = ClientRectangle.X +
(int)(.2 * ClientRectangle.Width);
clickRectangleValue.Y = ClientRectangle.Y +
(int)(.2 * ClientRectangle.Height);
clickRectangleValue.Width = ClientRectangle.Width -
(int)(.4 * ClientRectangle.Width);
clickRectangleValue.Height = ClientRectangle.Height -
(int)(.4 * ClientRectangle.Height);
return clickRectangleValue;
}
}
// Draw the large or small button, depending on the current state.
protected:
virtual void OnPaint(PaintEventArgs^ e) override
{
__super::OnPaint(e);
// Draw the smaller pressed button image
if (state == PushButtonState::Pressed)
{
// Set the background color to the parent if visual styles
// are disabled, because DrawParentBackground will only paint
// over the control background if visual styles are enabled.
if (Application::RenderWithVisualStyles)
{
this->BackColor = Color::Azure;
}
else
{
this->BackColor = this->Parent->BackColor;
}
// If you comment out the call to DrawParentBackground,
// the background of the control will still be visible
// outside the pressed button, if visual styles are enabled.
ButtonRenderer::DrawParentBackground(e->Graphics,
ClientRectangle, this);
ButtonRenderer::DrawButton(e->Graphics, ClickRectangle,
this->Text, this->Font, true, state);
}
// Draw the bigger unpressed button image.
else
{
ButtonRenderer::DrawButton(e->Graphics, ClientRectangle,
this->Text, this->Font, false, state);
}
}
// Draw the smaller pressed button image.
protected:
virtual void OnMouseDown(MouseEventArgs^ e) override
{
__super::OnMouseDown(e);
this->Text = "Clicked!";
state = PushButtonState::Pressed;
Invalidate();
}
// Draw the button in the hot state.
protected:
virtual void OnMouseEnter(EventArgs^ e) override
{
__super::OnMouseEnter(e);
this->Text = "Click here";
state = PushButtonState::Hot;
Invalidate();
}
// Draw the button in the unpressed state.
protected:
virtual void OnMouseLeave(EventArgs^ e) override
{
__super::OnMouseLeave(e);
this->Text = "Click here";
state = PushButtonState::Normal;
Invalidate();
}
// Draw the button hot if the mouse is released on the button.
protected:
virtual void OnMouseUp(MouseEventArgs^ e) override
{
__super::OnMouseUp(e);
OnMouseEnter(e);
}
// Detect when the cursor leaves the button area while
// it is pressed.
protected:
virtual void OnMouseMove(MouseEventArgs^ e) override
{
__super::OnMouseMove(e);
// Detect when the left mouse button is down and
// the cursor has left the pressed button area.
if ((e->Button & ::MouseButtons::Left) == ::MouseButtons::Left &&
!ClientRectangle.Contains(e->Location) &&
state == PushButtonState::Pressed)
{
OnMouseLeave(e);
}
}
};
ref class Form1 : public Form
{
public:
Form1()
{
__super::Form();
CustomButton^ Button1 = gcnew CustomButton();
Controls->Add(Button1);
if (Application::RenderWithVisualStyles)
{
this->Text = "Visual Styles Enabled";
}
else
{
this->Text = "Visual Styles Disabled";
}
}
};
}
using namespace ButtonRendererSample;
[STAThread]
int main()
{
// If you do not call EnableVisualStyles below, then
// ButtonRenderer automatically detects this and draws
// the button without visual styles.
Application::EnableVisualStyles();
Application::Run(gcnew Form1());
}
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
namespace ButtonRendererSample
{
class Form1 : Form
{
public Form1()
: base()
{
CustomButton Button1 = new CustomButton();
Controls.Add(Button1);
if (Application.RenderWithVisualStyles)
this.Text = "Visual Styles Enabled";
else
this.Text = "Visual Styles Disabled";
}
[STAThread]
static void Main()
{
// If you do not call EnableVisualStyles below, then
// ButtonRenderer automatically detects this and draws
// the button without visual styles.
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
public class CustomButton : Control
{
private Rectangle clickRectangleValue = new Rectangle();
private PushButtonState state = PushButtonState.Normal;
public CustomButton()
: base()
{
this.Size = new Size(100, 40);
this.Location = new Point(50, 50);
this.Font = SystemFonts.IconTitleFont;
this.Text = "Click here";
}
// Define the bounds of the smaller pressed button.
public Rectangle ClickRectangle
{
get
{
clickRectangleValue.X = ClientRectangle.X +
(int)(.2 * ClientRectangle.Width);
clickRectangleValue.Y = ClientRectangle.Y +
(int)(.2 * ClientRectangle.Height);
clickRectangleValue.Width = ClientRectangle.Width -
(int)(.4 * ClientRectangle.Width);
clickRectangleValue.Height = ClientRectangle.Height -
(int)(.4 * ClientRectangle.Height);
return clickRectangleValue;
}
}
// Draw the large or small button, depending on the current state.
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// Draw the smaller pressed button image
if (state == PushButtonState.Pressed)
{
// Set the background color to the parent if visual styles
// are disabled, because DrawParentBackground will only paint
// over the control background if visual styles are enabled.
this.BackColor = Application.RenderWithVisualStyles ?
Color.Azure : this.Parent.BackColor;
// If you comment out the call to DrawParentBackground,
// the background of the control will still be visible
// outside the pressed button, if visual styles are enabled.
ButtonRenderer.DrawParentBackground(e.Graphics,
ClientRectangle, this);
ButtonRenderer.DrawButton(e.Graphics, ClickRectangle,
this.Text, this.Font, true, state);
}
// Draw the bigger unpressed button image.
else
{
ButtonRenderer.DrawButton(e.Graphics, ClientRectangle,
this.Text, this.Font, false, state);
}
}
// Draw the smaller pressed button image.
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
this.Text = "Clicked!";
state = PushButtonState.Pressed;
Invalidate();
}
// Draw the button in the hot state.
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
this.Text = "Click here";
state = PushButtonState.Hot;
Invalidate();
}
// Draw the button in the unpressed state.
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
this.Text = "Click here";
state = PushButtonState.Normal;
Invalidate();
}
// Draw the button hot if the mouse is released on the button.
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
OnMouseEnter(e);
}
// Detect when the cursor leaves the button area while
// it is pressed.
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
// Detect when the left mouse button is down and
// the cursor has left the pressed button area.
if ((e.Button & MouseButtons.Left) == MouseButtons.Left &&
!ClientRectangle.Contains(e.Location) &&
state == PushButtonState.Pressed)
{
OnMouseLeave(e);
}
}
}
}
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Windows.Forms.VisualStyles
Namespace ButtonRendererSample
Class Form1
Inherits Form
Public Sub New()
Dim Button1 As New CustomButton()
Controls.Add(Button1)
If Application.RenderWithVisualStyles Then
Me.Text = "Visual Styles Enabled"
Else
Me.Text = "Visual Styles Disabled"
End If
End Sub
<STAThread()> _
Shared Sub Main()
' If you do not call EnableVisualStyles below, then
' ButtonRenderer automatically detects this and draws
' the button without visual styles.
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
End Class
Public Class CustomButton
Inherits Control
Private clickRectangleValue As New Rectangle()
Private state As PushButtonState = PushButtonState.Normal
Public Sub New()
With Me
Size = New Size(100, 40)
Location = New Point(50, 50)
Font = SystemFonts.IconTitleFont
Text = "Click here"
End With
End Sub
' Define the bounds of the smaller pressed button.
Public ReadOnly Property ClickRectangle() As Rectangle
Get
With clickRectangleValue
.X = Me.ClientRectangle.X + CInt(0.2 * _
Me.ClientRectangle.Width)
.Y = Me.ClientRectangle.Y + CInt(0.2 * _
Me.ClientRectangle.Height)
.Width = Me.ClientRectangle.Width - _
CInt(0.4 * Me.ClientRectangle.Width)
.Height = Me.ClientRectangle.Height - _
CInt(0.4 * Me.ClientRectangle.Height)
End With
Return clickRectangleValue
End Get
End Property
' Draw the large or small button, depending on the current state.
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
' Draw the smaller pressed button image.
If state = PushButtonState.Pressed Then
' Set the background color to the parent if visual styles
' are disabled, because DrawParentBackground will only paint
' over the control background if visual styles are enabled.
If Application.RenderWithVisualStyles Then
Me.BackColor = Color.Azure
Else
Me.BackColor = Me.Parent.BackColor
End If
' If you comment out the call to DrawParentBackground,
' the background of the control will still be visible
' outside the pressed button, if visual styles are enabled.
ButtonRenderer.DrawParentBackground(e.Graphics, _
Me.ClientRectangle, Me)
ButtonRenderer.DrawButton(e.Graphics, ClickRectangle, _
Me.Text, Me.Font, True, state)
' Draw the bigger unpressed button image.
Else
ButtonRenderer.DrawButton(e.Graphics, Me.ClientRectangle, _
Me.Text, Me.Font, False, state)
End If
End Sub
' Draw the smaller pressed button image.
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
MyBase.OnMouseDown(e)
With Me
.Text = "Clicked!"
.state = PushButtonState.Pressed
End With
Invalidate()
End Sub
' Draw the button in the hot state.
Protected Overrides Sub OnMouseEnter(ByVal e As EventArgs)
MyBase.OnMouseEnter(e)
With Me
.Text = "Click here"
.state = PushButtonState.Hot
End With
Invalidate()
End Sub
' Draw the button in the unpressed state.
Protected Overrides Sub OnMouseLeave(ByVal e As EventArgs)
MyBase.OnMouseLeave(e)
With Me
.Text = "Click here"
.state = PushButtonState.Normal
End With
Invalidate()
End Sub
' Draw the button hot if the mouse is released on the button.
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
MyBase.OnMouseUp(e)
OnMouseEnter(e)
End Sub
' Detect when the cursor leaves the button area while it
' is pressed.
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
MyBase.OnMouseMove(e)
' Detect when the left mouse button is down and
' the cursor has left the pressed button area.
If (e.Button And MouseButtons.Left) = MouseButtons.Left And Not _
Me.ClientRectangle.Contains(e.Location) And _
state = PushButtonState.Pressed Then
OnMouseLeave(e)
End If
End Sub
End Class
End Namespace
설명
합니다 ButtonRenderer 클래스의 집합을 제공 static
단추 컨트롤을 렌더링 하는 데 사용할 수 있는 방법입니다. 컨트롤 렌더링이란 컨트롤의 사용자 인터페이스를 그리는 것을 말합니다. 단추를 그릴 중 하나를 사용 합니다 DrawButton 메서드. 이러한 메서드는 다양 한 텍스트 그리기 또는 단추 이미지와 같은 옵션을 제공합니다.
운영 체제에서 비주얼 스타일을 사용 하 고 현재 애플리케이션에 비주얼 스타일을 적용 하는 경우 DrawButton 현재 비주얼 스타일을 사용 하 여 단추를 그립니다. 그렇지 않으면 DrawButton 클래식 Windows 스타일을 사용 하 여 단추를 그립니다. 운영 체제의 현재 비주얼 스타일 설정을 자동으로 일치 해야 하는 사용자 지정 컨트롤을 그리는 경우에 유용 합니다.
이 클래스의 함수를 래핑하는 System.Windows.Forms.VisualStyles.VisualStyleRenderer 에서 노출 한 요소 중 하나에 설정 된는 System.Windows.Forms.VisualStyles.VisualStyleElement.Button.PushButton 클래스입니다. 자세한 내용은 비주얼 스타일을 사용하여 컨트롤 렌더링을 참조하세요.
속성
RenderMatchingApplicationState |
렌더러에서 애플리케이션 상태를 사용하여 렌더링 스타일을 결정하는지 여부를 나타내는 값을 가져오거나 설정합니다. |