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

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

예제

다음 코드 예제에서는 컨트롤이 서식 지정 된 텍스트를 수용할 수 있도록 지정 된 컨트롤의 크기를 조정 합니다.The following code example resizes the specified control so the control will accommodate its formatted text. 서식이 지정 된 텍스트는 Text 컨트롤이 텍스트에 적용 되는 속성입니다 Font .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. 안쪽 여백이 동일 하 게 표시 되도록 하려면 MiddleCenter 컨트롤에서 지 원하는 경우 텍스트를의 값과 맞춥니다 System.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

설명

Graphics메서드를 통해 검색 하는 개체는 CreateGraphics 현재 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 와 같은 시각적이 아닌 메서드를 사용 하는 경우를 제외 하 고는 다시 사용할 개체를 캐시할 수 없습니다 Graphics.MeasureString .Therefore you cannot cache the Graphics object for reuse, except to use non-visual methods like Graphics.MeasureString. 대신 개체를 사용할 때마다를 호출한 CreateGraphics Graphics 다음 사용을 마쳤을 때를 호출 해야 합니다 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 EndInvokeCreateGraphics 컨트롤에 대 한 핸들이 이미 생성 된 경우 컨트롤에는,, 및의 네 가지 메서드가 있습니다.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.

적용 대상

추가 정보