Share via


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

사용자 지정 그리기라고도 하는 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로 설정하고 MeasureItem 및 DrawItem 이벤트를 모두 처리합니다. 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로 설정된 경우 각 하위 항목 또는 열 머리글을 컨트롤에 그리려면 DrawSubItem 및 DrawColumnHeader 이벤트를 처리합니다.

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

TreeView 컨트롤

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

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

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

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

DataGridView 컨트롤

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

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

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

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

ToolStrip 컨트롤

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

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

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

참고 항목

기타 리소스

Windows Forms에 사용할 수 있는 컨트롤