ControlPaint.DrawReversibleFrame(Rectangle, Color, FrameStyle) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
화면의 지정된 범위 내에 지정된 배경색 및 상태로 복구 가능 프레임을 그립니다.
public:
static void DrawReversibleFrame(System::Drawing::Rectangle rectangle, System::Drawing::Color backColor, System::Windows::Forms::FrameStyle style);
public static void DrawReversibleFrame (System.Drawing.Rectangle rectangle, System.Drawing.Color backColor, System.Windows.Forms.FrameStyle style);
static member DrawReversibleFrame : System.Drawing.Rectangle * System.Drawing.Color * System.Windows.Forms.FrameStyle -> unit
Public Shared Sub DrawReversibleFrame (rectangle As Rectangle, backColor As Color, style As FrameStyle)
매개 변수
- style
- FrameStyle
프레임의 스타일을 지정하는 FrameStyle 값 중 하나입니다.
예제
다음 코드 예제에서는 , Control.PointToScreen및 멤버를 Control.RectangleToScreen사용하는 방법을 보여 줍니다DrawReversibleFrame. 예제를 실행하려면 다음 코드를 여러 컨트롤이 포함된 양식 Form1
에 붙여넣습니다. 이 예제에서는 마우스 이벤트가 예제에 정의된 이벤트 처리기에 연결되어야 합니다.
private:
// The following three methods will draw a rectangle and allow
// the user to use the mouse to resize the rectangle. If the
// rectangle intersects a control's client rectangle, the
// control's color will change.
bool isDrag;
Rectangle theRectangle;
Point startPoint;
void Form1_MouseDown( Object^ sender, System::Windows::Forms::MouseEventArgs^ e )
{
// Set the isDrag variable to true and get the starting point
// by using the PointToScreen method to convert form
// coordinates to screen coordinates.
if ( e->Button == ::MouseButtons::Left )
{
isDrag = true;
}
Control^ control = dynamic_cast<Control^>(sender);
// Calculate the startPoint by using the PointToScreen
// method.
startPoint = control->PointToScreen( Point(e->X,e->Y) );
}
void Form1_MouseMove( Object^ /*sender*/, System::Windows::Forms::MouseEventArgs^ e )
{
// If the mouse is being dragged,
// undraw and redraw the rectangle as the mouse moves.
if ( isDrag )
{
ControlPaint::DrawReversibleFrame( theRectangle, this->BackColor, FrameStyle::Dashed );
// Calculate the endpoint and dimensions for the new
// rectangle, again using the PointToScreen method.
Point endPoint = this->PointToScreen( Point(e->X,e->Y) );
int width = endPoint.X - startPoint.X;
int height = endPoint.Y - startPoint.Y;
theRectangle = Rectangle(startPoint.X,startPoint.Y,width,height);
// Draw the new rectangle by calling DrawReversibleFrame
// again.
ControlPaint::DrawReversibleFrame( theRectangle, this->BackColor, FrameStyle::Dashed );
}
}
void Form1_MouseUp( Object^ /*sender*/, System::Windows::Forms::MouseEventArgs^ /*e*/ )
{
// If the MouseUp event occurs, the user is not dragging.
isDrag = false;
// Draw the rectangle to be evaluated. Set a dashed frame style
// using the FrameStyle enumeration.
ControlPaint::DrawReversibleFrame( theRectangle, this->BackColor, FrameStyle::Dashed );
// Find out which controls intersect the rectangle and
// change their color. The method uses the RectangleToScreen
// method to convert the Control's client coordinates
// to screen coordinates.
Rectangle controlRectangle;
for ( int i = 0; i < Controls->Count; i++ )
{
controlRectangle = Controls[ i ]->RectangleToScreen( Controls[ i ]->ClientRectangle );
if ( controlRectangle.IntersectsWith( theRectangle ) )
{
Controls[ i ]->BackColor = Color::BurlyWood;
}
}
// Reset the rectangle.
theRectangle = Rectangle(0,0,0,0);
}
// The following three methods will draw a rectangle and allow
// the user to use the mouse to resize the rectangle. If the
// rectangle intersects a control's client rectangle, the
// control's color will change.
bool isDrag = false;
Rectangle theRectangle = new Rectangle(new Point(0, 0), new Size(0, 0));
Point startPoint;
private void Form1_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e)
{
// Set the isDrag variable to true and get the starting point
// by using the PointToScreen method to convert form
// coordinates to screen coordinates.
if (e.Button==MouseButtons.Left)
{
isDrag = true;
}
Control control = (Control) sender;
// Calculate the startPoint by using the PointToScreen
// method.
startPoint = control.PointToScreen(new Point(e.X, e.Y));
}
private void Form1_MouseMove(object sender,
System.Windows.Forms.MouseEventArgs e)
{
// If the mouse is being dragged,
// undraw and redraw the rectangle as the mouse moves.
if (isDrag)
// Hide the previous rectangle by calling the
// DrawReversibleFrame method with the same parameters.
{
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed);
// Calculate the endpoint and dimensions for the new
// rectangle, again using the PointToScreen method.
Point endPoint = ((Control) sender).PointToScreen(new Point(e.X, e.Y));
int width = endPoint.X-startPoint.X;
int height = endPoint.Y-startPoint.Y;
theRectangle = new Rectangle(startPoint.X,
startPoint.Y, width, height);
// Draw the new rectangle by calling DrawReversibleFrame
// again.
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed);
}
}
private void Form1_MouseUp(object sender,
System.Windows.Forms.MouseEventArgs e)
{
// If the MouseUp event occurs, the user is not dragging.
isDrag = false;
// Draw the rectangle to be evaluated. Set a dashed frame style
// using the FrameStyle enumeration.
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed);
// Find out which controls intersect the rectangle and
// change their color. The method uses the RectangleToScreen
// method to convert the Control's client coordinates
// to screen coordinates.
Rectangle controlRectangle;
for(int i = 0; i < Controls.Count; i++)
{
controlRectangle = Controls[i].RectangleToScreen
(Controls[i].ClientRectangle);
if (controlRectangle.IntersectsWith(theRectangle))
{
Controls[i].BackColor = Color.BurlyWood;
}
}
// Reset the rectangle.
theRectangle = new Rectangle(0, 0, 0, 0);
}
' The following three methods will draw a rectangle and allow
' the user to use the mouse to resize the rectangle. If the
' rectangle intersects a control's client rectangle, the
' control's color will change.
Dim isDrag As Boolean = False
Dim theRectangle As New rectangle(New Point(0, 0), New Size(0, 0))
Dim startPoint As Point
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
' Set the isDrag variable to true and get the starting point
' by using the PointToScreen method to convert form coordinates to
' screen coordinates.
If (e.Button = MouseButtons.Left) Then
isDrag = True
End If
Dim control As Control = CType(sender, Control)
' Calculate the startPoint by using the PointToScreen
' method.
startPoint = control.PointToScreen(New Point(e.X, e.Y))
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
' If the mouse is being dragged, undraw and redraw the rectangle
' as the mouse moves.
If (isDrag) Then
' Hide the previous rectangle by calling the DrawReversibleFrame
' method with the same parameters.
ControlPaint.DrawReversibleFrame(theRectangle, Me.BackColor, _
FrameStyle.Dashed)
' Calculate the endpoint and dimensions for the new rectangle,
' again using the PointToScreen method.
Dim endPoint As Point = CType(sender, Control).PointToScreen(New Point(e.X, e.Y))
Dim width As Integer = endPoint.X - startPoint.X
Dim height As Integer = endPoint.Y - startPoint.Y
theRectangle = New Rectangle(startPoint.X, startPoint.Y, _
width, height)
' Draw the new rectangle by calling DrawReversibleFrame again.
ControlPaint.DrawReversibleFrame(theRectangle, Me.BackColor, _
FrameStyle.Dashed)
End If
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
' If the MouseUp event occurs, the user is not dragging.
isDrag = False
' Draw the rectangle to be evaluated. Set a dashed frame style
' using the FrameStyle enumeration.
ControlPaint.DrawReversibleFrame(theRectangle, Me.BackColor, _
FrameStyle.Dashed)
' Find out which controls intersect the rectangle and change their color.
' The method uses the RectangleToScreen method to convert the
' Control's client coordinates to screen coordinates.
Dim i As Integer
Dim controlRectangle As Rectangle
For i = 0 To Controls.Count - 1
controlRectangle = Controls(i).RectangleToScreen _
(Controls(i).ClientRectangle)
If controlRectangle.IntersectsWith(theRectangle) Then
Controls(i).BackColor = Color.BurlyWood
End If
Next
' Reset the rectangle.
theRectangle = New Rectangle(0, 0, 0, 0)
End Sub
설명
매개 backColor
변수는 항상 배경에 표시되도록 프레임의 채우기 색을 계산하는 데 사용됩니다.
이 메서드의 결과는 동일한 프레임을 다시 그려서 되돌릴 수 있습니다. 이 메서드를 사용하여 프레임을 그리는 것은 화면의 영역을 반전하는 것과 유사합니다. 단, 더 다양한 색에 더 나은 성능을 제공한다는 점이 다릅니다.