다음을 통해 공유


소유자가 그린 기본 제공 컨트롤 지원

사용자 지정 그리기라고도 하는 Windows Forms의 소유자 그리기는 특정 컨트롤을 시각적 모양으로 변경하는 기술입니다.

참고

이 항목에 “컨트롤”이라는 단어는 Control 또는 Component에서 파생된 클래스를 의미하는 데 사용됩니다.

일반적으로 Windows는 BackColor와 같은 속성 설정을 사용하여, 그리기를 자동으로 처리하여 컨트롤 모양을 결정합니다. 소유자 그리기를 통해 속성을 사용하여 사용할 수 없는 모양의 요소를 변경하며 그리기 프로세스를 사용합니다. 예를 들어 많은 컨트롤을 사용하여 표시되는 텍스트의 색을 설정할 수 있지만 단색으로 제한됩니다. 소유자 그리기를 사용하면 검정과 빨강 부분에 있는 텍스트의 일부를 표시하는 같은 작업을 수행할 수 있습니다.

실제로 소유자 그리기는 양식에 그래픽을 그리는 것과 비슷합니다. 예를 들어, 양식의 Paint 이벤트에 대한 처리기에서 그래픽 메서드를 사용하여 ListBox 컨트롤을 에뮬레이션할 수 있지만, 모든 사용자 상호 작용을 처리하는 고유 코드를 작성해야 합니다. 소유자 그리기를 통해 컨트롤은 사용자 코드를 사용하여 해당 콘텐츠를 그리지만 그렇지 않은 경우 해당 내장 기능을 모두 유지합니다. 각 항목의 다른 측면에 대한 기본 모양을 사용하는 동안 각 항목의 일부 측면을 사용자 지정하거나 컨트롤의 각 항목을 그릴 수 있는 그래픽 메서드를 사용할 수 있습니다.

Windows Forms 컨트롤의 소유자 그리기

소유자 그리기를 지원하는 컨트롤에서 소유자 그리기를 수행하려면 일반적으로 하나의 속성을 설정하고 하나 이상의 이벤트를 처리합니다.

소유자 그리기를 지원하는 대부분의 컨트롤에는 컨트롤 자체가 그려질 때 해당 그리기 관련 이벤트가 발생할 지 여부를 나타내는 OwnerDraw 또는 DrawMode 속성이 있습니다.

OwnerDraw 또는 DrawMode 속성이 없는 컨트롤에는 자동으로 발생하는 그리기 이벤트를 제공하는 DataGridView 컨트롤이 포함되고 자체 그리기 관련 이벤트가 있는 외부 렌더링 클래스를 사용하여 그려지는 ToolStrip 컨트롤이 포함됩니다.

다양한 종류의 그리기 이벤트가 있지만 컨트롤 내에서 단일 항목을 그릴 수 있도록 일반적인 그리기 이벤트가 발생합니다. 이벤트 처리기는 그려지고 있는 항목 및 그리는 데 사용할 수 있는 도구에 대한 정보를 포함하는 EventArgs 개체를 수신합니다. 예를 들어, 이 개체는 일반적으로 부모 컬렉션 내 항목의 인덱스 번호, 항목의 표시 경계를 나타내는 Rectangle 및 그리기 메서드를 호출하기 위한 Graphics 개체를 포함합니다. 일부 이벤트에서 EventArgs 개체는 기본적으로 배경이나 포커스 영역과 같은 항목의 일부 측면을 그리도록 호출할 수 있는 메서드와 항목에 대한 추가 정보를 제공합니다.

소유자가 그린 사용자 지정 항목을 포함하는 재사용 가능한 컨트롤을 만들려면, 소유자 그리기를 지원하는 컨트롤 클래스에서 파생되는 새 클래스를 만듭니다. 그리기 이벤트를 처리하는 대신 적절한 OnEventName 메서드 또는 새 클래스의 메소드에 대한 재정의에 소유자 그리기 코드를 포함합니다. 이 경우 컨트롤 사용자가 소유자 그리기 이벤트를 처리하고 추가 사용자 지정을 제공할 수 있도록 기본 클래스 OnEventName 메서드를 호출하는지 확인하십시오.

다음 Windows Forms 컨트롤은 모든 버전의 .NET Framework에서 소유자 그리기를 지원합니다.

다음 컨트롤은 .NET Framework 2.0에서만 소유자 그리기를 지원합니다.

다음 컨트롤은 소유자 그리기를 지원하며 .NET Framework 2.0에서는 새로운 기능입니다.

다음 섹션에서는 이 컨트롤에 대한 각각의 추가 세부 정보를 제공합니다.

ListBox 및 ComboBox 컨트롤

ListBoxComboBox 컨트롤을 사용하여 하나의 크기 또는 다양한 크기로 컨트롤에서 개별 항목을 그릴 수 있습니다.

참고

CheckedListBox 컨트롤은 ListBox 컨트롤에서 파생되었음에도 소유자 그리기를 지원하지 않습니다.

각 항목을 같은 크기로 그리려면 DrawMode 속성을 OwnerDrawFixed로 설정하고 DrawItem 이벤트를 처리합니다.

각 항목을 서로 다른 크기를 사용하여 그리려면 DrawMode 속성을 OwnerDrawVariable로 설정하고 MeasureItemDrawItem 이벤트 모두를 처리합니다. MeasureItem 이벤트를 사용하여 DrawItem 이벤트가 해당 항목에 대해 발생하기 전에 항목의 크기를 나타낼 수 있습니다.

코드 예제를 포함한 자세한 내용은 다음 항목을 참조하십시오.

MenuItem 구성 요소는 MainMenu 또는 ContextMenu 구성 요소의 단일 메뉴 항목을 나타냅니다.

MenuItem을 그리려면, 해당 OwnerDraw 속성을 true로 설정하고 DrawItem 이벤트를 처리합니다. DrawItem 이벤트가 발생하기 전에 메뉴 항목의 크기를 사용자 지정하려면, 항목의 MeasureItem 이벤트를 처리합니다.

코드 예제를 포함한 자세한 내용은 다음 항목을 참조하십시오.

TabControl 컨트롤

TabControl 컨트롤을 사용하면 컨트롤에서 개별 탭을 그릴 수 있습니다. 소유자 그리기는 탭에만 영향을 줍니다. TabPage 콘텐츠는 영향을 받지 않습니다.

TabControl에서 각 탭을 그리려면 DrawMode 속성을 OwnerDrawFixed설정하고 DrawItem 이벤트를 처리합니다. 이 이벤트는 탭이 컨트롤에 표시되는 경우에만 각 탭에 대해 한 번 발생합니다.

코드 예제를 포함한 자세한 내용은 다음 항목을 참조하십시오.

ToolTip 구성 요소

ToolTip 구성 요소를 사용하면 표시되는 경우 도구 설명 전체를 그릴 수 있습니다.

ToolTip을 그리려면, 해당 OwnerDraw 속성을 true로 설정하고 Draw 이벤트를 처리합니다. Draw 이벤트가 발생하기 전에 ToolTip의 크기를 사용자 지정하려면, Popup 이벤트를 처리하고 이벤트 처리기에서 ToolTipSize 속성을 설정합니다.

코드 예제를 포함한 자세한 내용은 다음 항목을 참조하십시오.

ListView 컨트롤

ListView 컨트롤을 사용하면 컨트롤에서 개별 항목, 하위 항목 및 열 헤더를 그릴 수 있습니다.

소유자 그리기를 컨트롤에서 사용하려면 OwnerDraw 속성을 true(으)로 설정합니다.

컨트롤의 각 항목을 그리려면 DrawItem 이벤트를 처리합니다.

View 속성이 Details로 설정된 경우 각 하위 항목 또는 열 헤더를 컨트롤에서 그리려면, DrawSubItemDrawColumnHeader 이벤트를 처리합니다.

코드 예제를 포함한 자세한 내용은 다음 항목을 참조하십시오.

TreeView 컨트롤

TreeView 컨트롤을 사용하면 컨트롤에서 개별 노드를 그릴 수 있습니다.

각 노드에 표시되는 텍스트에만 그리려면 DrawMode 속성을 OwnerDrawText로 설정하고 텍스트를 그리도록 DrawNode 이벤트를 처리합니다.

각 노드의 모든 요소를 그리려면 DrawMode 속성을 OwnerDrawAll로 설정하고 텍스트, 아이콘, 확인란, 더하기 및 빼기 기호 및 노드를 연결하는 선과 같은 필요한 요소를 그리도록 DrawNode 이벤트를 처리합니다.

코드 예제를 포함한 자세한 내용은 다음 항목을 참조하십시오.

DataGridView 컨트롤

DataGridView 컨트롤을 사용하면 컨트롤에서 개별 셀 및 행을 그릴 수 있습니다.

개별 셀을 그리려면 CellPainting 이벤트를 처리합니다.

개별 행이나 행의 요소를 그리려면 RowPrePaintRowPostPaint 이벤트 중 하나 또는 모두를 처리합니다. RowPrePaint 이벤트는 행의 셀이 그려지기 전에 발생하며 RowPostPaint 이벤트는 셀이 그려진 후에 발생합니다. 두 이벤트 및 CellPainting 이벤트 모두를 처리하여 별도로 행 배경, 개별 셀 및 행 전경을 그리거나, 필요한 곳에 특정 사용자 지정을 제공하고 행의 다른 요소에 대한 기본 표시를 사용할 수 있습니다.

코드 예제를 포함한 자세한 내용은 다음 항목을 참조하십시오.

ToolStrip 컨트롤

ToolStrip 및 파생된 컨트롤을 사용하면 모양의 모든 측면을 사용자 지정할 수 있습니다.

ToolStrip 컨트롤에 대한 사용자 지정 렌더링을 제공하려면, ToolStrip, ToolStripManager, ToolStripPanel 또는 ToolStripContentPanel, ToolStripRenderer 개체의 Renderer 속성을 설정하고 ToolStripRenderer 클래스에서 제공하는 여러 그리기 이벤트 중 하나 이상을 처리합니다. 또는 Renderer 속성을 ToolStripRenderer, ToolStripProfessionalRenderer에서 파생된 고유 클래스의 인스턴스 또는 특정 OnEventName 메서드를 구현하거나 재정의하는 ToolStripSystemRenderer로 설정합니다.

코드 예제를 포함한 자세한 내용은 다음 항목을 참조하십시오.

참고 항목