Control.CreateGraphics 메서드

정의

해당 컨트롤에 대한 Graphics를 만듭니다.Creates the Graphics for the control.

public:
 System::Drawing::Graphics ^ CreateGraphics();
public System.Drawing.Graphics CreateGraphics ();
member this.CreateGraphics : unit -> System.Drawing.Graphics
Public Function CreateGraphics () As Graphics

반환

컨트롤에 대한 Graphics입니다.The Graphics for the control.

예제

다음 코드 예제에서는 컨트롤이 서식 지정 된 텍스트를 수용할 수 있도록 지정 된 컨트롤의 크기를 조정 합니다.The following code example resizes the specified control so the control will accommodate its formatted text. 서식이 지정 된 텍스트는 컨트롤의 할당 된 Font이 텍스트에 적용 된 Text 속성입니다.The formatted text is the Text property with the control's assigned Font applied to the text. 이 예제의 AutoSizeControl 메서드는 컨트롤의 모든 가장자리에 적용할 안쪽 여백을 나타내는 textPadding 매개 변수도 포함 합니다.The AutoSizeControl method in this example also has a textPadding parameter that represents the padding to apply to all edges of the control. 안쪽 여백이 동일 하 게 표시 되도록 하려면 컨트롤에서 지 원하는 경우 MiddleCenterSystem.Drawing.ContentAlignment의 텍스트를 정렬 합니다.To make the padding appear equal, align the text with the MiddleCenter value of System.Drawing.ContentAlignment if your control supports it.

private:
   void AutoSizeControl( Control^ control, int textPadding )
   {
      
      // Create a Graphics object for the Control.
      Graphics^ g = control->CreateGraphics();
      
      // Get the Size needed to accommodate the formatted Text.
      System::Drawing::Size preferredSize = g->MeasureString( control->Text, control->Font ).ToSize();
      
      // Pad the text and resize the control.
      control->ClientSize = System::Drawing::Size( preferredSize.Width + (textPadding * 2), preferredSize.Height + (textPadding * 2) );
      
      // Clean up the Graphics object.
      delete g;
   }
private void AutoSizeControl(Control control, int textPadding)
{
   // Create a Graphics object for the Control.
   Graphics g = control.CreateGraphics();

   // Get the Size needed to accommodate the formatted Text.
   Size preferredSize = g.MeasureString(
      control.Text, control.Font).ToSize();

   // Pad the text and resize the control.
   control.ClientSize = new Size(
      preferredSize.Width + (textPadding * 2), 
      preferredSize.Height+(textPadding * 2) );

   // Clean up the Graphics object.
   g.Dispose();
}
Private Sub AutoSizeControl(control As Control, textPadding As Integer)
   ' Create a Graphics object for the Control.
   Dim g As Graphics = control.CreateGraphics()
   
   ' Get the Size needed to accommodate the formatted Text.
   Dim preferredSize As Size = g.MeasureString( _
     control.Text, control.Font).ToSize()
   
   ' Pad the text and resize the control.
   control.ClientSize = New Size( _
     preferredSize.Width + textPadding * 2, _
     preferredSize.Height + textPadding * 2)
   
   ' Clean up the Graphics object.
   g.Dispose()
End Sub

설명

CreateGraphics 메서드를 통해 검색 하는 Graphics 개체는 현재 Windows 메시지를 처리 한 후에는 일반적으로 유지 되지 않아야 합니다 .이 개체를 사용 하 여 그린 모든 항목은 다음 WM_PAINT 메시지를 사용 하 여 지워집니다.The Graphics object that you retrieve through the CreateGraphics method should not normally be retained after the current Windows message has been processed, because anything painted with that object will be erased with the next WM_PAINT message. 따라서 Graphics.MeasureString과 같은 비시각적 메서드를 사용 하는 경우를 제외 하 고는 Graphics 개체를 캐시 하 여 다시 사용할 수 없습니다.Therefore you cannot cache the Graphics object for reuse, except to use non-visual methods like Graphics.MeasureString. 대신 Graphics 개체를 사용할 때마다 CreateGraphics을 호출 하 고, 사용을 마쳤을 때 Dispose를 호출 해야 합니다.Instead, you must call CreateGraphics every time that you want to use the Graphics object, and then call Dispose when you are finished using it. Windows 메시지에 대 한 자세한 내용은 WndProc을 참조 하세요.For more information about Windows messages, see WndProc.

기본적으로 CreateGraphics은 호출 스레드에 대 한 소유권을 설정 하 고 다른 스레드에서 호출 되는 경우 실패 합니다.By design, CreateGraphics sets ownership to the calling thread, and fails if it is called on other threads.

참고

컨트롤에 대 한 핸들이 이미 생성 된 경우에는 InvokeRequired 속성 외에도 스레드로부터 안전 하 게 보호 되는 컨트롤에는 Invoke, BeginInvoke, EndInvoke, CreateGraphics의 네 가지 메서드가 있습니다.In addition to the InvokeRequired property, there are four methods on a control that are thread safe: Invoke, BeginInvoke, EndInvoke, and CreateGraphics if the handle for the control has already been created. 컨트롤의 핸들이 백그라운드 스레드에서 만들어지기 전에 CreateGraphics을 호출 하면 잘못 된 크로스 스레드 호출이 발생할 수 있습니다.Calling CreateGraphics before the control's handle has been created on a background thread can cause illegal cross thread calls. 다른 모든 메서드 호출의 경우 호출 메서드 중 하나를 사용 하 여 컨트롤의 스레드에 대 한 호출을 마샬링해야 합니다.For all other method calls, you should use one of the invoke methods to marshal the call to the control's thread.

보안

UIPermission
이 메서드를 호출 하 여 안전한 하위 창에서.for safe subwindows to call this method. 연관 된 열거형: SafeSubWindows 의 값 UIPermissionWindow합니다.Associated enumeration: SafeSubWindows value of UIPermissionWindow.

적용 대상

추가 정보