정적 컨트롤 정보

애플리케이션은 정적 컨트롤을 사용하여 다른 컨트롤에 레이블을 지정하거나 컨트롤 그룹을 구분하는 경우가 많습니다. 정적 컨트롤은 자식 창이지만 선택할 수 없습니다. 따라서 키보드 포커스를 받을 수 없으며 키보드 인터페이스를 사용할 수 없습니다. SS_NOTIFY 스타일이 있는 정적 컨트롤은 마우스 입력을 수신하여 사용자가 컨트롤을 클릭하거나 두 번 클릭할 때 부모 창에 알립니다. 정적 컨트롤은 STATIC 창 클래스에 속합니다.

정적 컨트롤은 겹치는 창, 팝업 창 및 자식 창에서 사용할 수 있지만 시스템이 해당 동작을 표준화하는 대화 상자에서 사용하도록 설계되었습니다. 개발자는 대화 상자 외부에서 정적 컨트롤을 사용하여 애플리케이션이 비표준 방식으로 동작할 수 있는 위험을 높입니다. 일반적으로 개발자는 대화 상자에서 정적 컨트롤을 사용하거나 SS_OWNERDRAW 스타일을 사용하여 사용자 지정된 정적 컨트롤을 만듭니다.

이 섹션에서 설명하는 항목은 다음과 같습니다.

정적 컨트롤 형식

정적 컨트롤에는 네 가지 형식이 있습니다. 각 형식에는 하나 이상의 정적 컨트롤 스타일이 있습니다.

간단한 그래픽 정적 컨트롤

간단한 그래픽 정적 컨트롤은 프레임 또는 채워진 사각형을 표시합니다. 프레임은 검은색, 회색 또는 흰색이 포함된 다양한 스타일로 그릴 수 있습니다. 또한 에칭된 스타일로 프레임을 그려 3차원 모양을 제공할 수 있습니다. 프레임 스타일에는 SS_BLACKFRAME, SS_GRAYFRAME, SS_WHITEFRAME, SS_ETCHEDHORZ, SS_ETCHEDVERT 및 SS_ETCHEDFRAME이 포함됩니다.

사각형은 검은색, 회색 또는 흰색의 세 가지 스타일 중 하나의 색으로 채워질 수 있습니다. 이러한 스타일은 상수 SS_BLACKRECT, SS_GRAYRECT 및 SS_WHITERECT에 의해 정의됩니다.

그래픽 스타일을 결합할 수 없습니다.

텍스트 정적 컨트롤

텍스트 정적 컨트롤은 다음의 5가지 스타일 중 하나로 직사각형에 텍스트를 표시합니다.

  • 단어 줄 바꿈 없이 왼쪽 맞춤
  • 단어 줄 바꿈을 사용하여 왼쪽 맞춤
  • 가운데 맞춤
  • 오른쪽 맞춤
  • simple

이러한 스타일은 상수 SS_LEFTNOWORDWRAP, SS_LEFT, SS_CENTER, SS_RIGHT 및 SS_SIMPLE 각각에 의해 정의됩니다. 시스템은 다시 정렬되지 않은 "간단한" 텍스트를 제외하고 미리 정의된 방식으로 이러한 컨트롤의 텍스트를 다시 정렬합니다.

애플리케이션은 SetWindowText 함수 또는 WM_SETTEXT 메시지를 사용하여 언제든지 텍스트 정적 컨트롤의 텍스트를 변경할 수 있습니다.

시스템은 정적 컨트롤에서 가능한 한 많은 텍스트를 표시하고 맞지 않는 텍스트를 잘라 냅니다. 컨트롤에 적합한 크기를 계산하려면 텍스트의 글꼴 메트릭을 검색합니다. 글꼴 및 글꼴 메트릭에 대한 자세한 내용은 글꼴 및 텍스트를 참조하세요.

기본적으로 정적 컨트롤의 창 텍스트는 다른 컨트롤과 마찬가지로 다음 문자를 컨트롤의(또는 대부분의 정적 컨트롤은 탭 순서의 다음 컨트롤인 레이블이 지정되는 컨트롤의) 바로 가기 키로 정의하는 앰퍼샌드를 포함할 수 있습니다. 앰퍼샌드를 사용하여 바로 가기를 정의하는 대신 텍스트에 앰퍼샌드를 표시하려면 SS_NOPREFIX 스타일을 포함합니다.

이미지 정적 컨트롤

이미지 정적 컨트롤은 비트맵, 아이콘(애니메이션 아이콘 포함) 또는 향상된 메타파일을 표시할 수 있습니다. 특정 정적 컨트롤이 표시하는 그래픽 유형은 컨트롤의 스타일(SS_BITMAP, SS_ICON 또는 SS_ENHMETAFILE)에 따라 달라집니다. 애플리케이션은 컨트롤을 만들 때 스타일을 지정하고 컨트롤이 표시할 비트맵, 아이콘 또는 메타파일의 핸들도 지정합니다. 컨트롤을 만든 후 애플리케이션은 STM_SETIMAGE 메시지를 보내고 새 그래픽 개체에 대한 핸들을 지정하여 컨트롤과 다른 그래픽을 연결할 수 있습니다. 애플리케이션은 STM_GETIMAGE 메시지를 보내 현재 정적 컨트롤과 연결된 그래픽 개체에 대한 핸들을 검색할 수 있습니다. 애플리케이션은 SendDlgItemMessage 함수를 사용하여 정적 컨트롤에 메시지를 보냅니다.

소유자가 그린 정적 컨트롤

애플리케이션은 SS_OWNERDRAW 스타일을 사용하여 정적 컨트롤을 그리는 역할을 수행할 수 있습니다. 소유자가 그린 정적 컨트롤(해당 소유자)의 부모 창은 정적 컨트롤을 그려야 할 때마다 WM_DRAWITEM 메시지를 수신합니다. 메시지에는 컨트롤을 그릴 때 소유자 창에서 사용하는 정보가 포함된 DRAWITEMSTRUCT 구조체에 대한 포인터가 포함되어 있습니다.

정적 제어 기본 메시지 처리

미리 정의된 정적 컨트롤 창 클래스에 대한 창 프로시저는 정적 제어 프로시저가 처리하지 않는 모든 메시지에 대해 기본 처리를 수행합니다. 정적 컨트롤이 모든 메시지에 대해 FALSE를 반환하면 미리 정의된 창 프로시저가 메시지를 확인하고 다음 표에 설명된 기본 작업을 수행합니다. 표에서 텍스트 정적 컨트롤은 스타일 SS_LEFTNOWORDWRAP, SS_LEFT, SS_CENTER, SS_RIGHT 또는 SS_SIMPLE이 있는 정적 컨트롤입니다.

메시지 기본 작업
WM_CREATE 그래픽 개체를 로드하고 그래픽 정적 컨트롤의 경우 창 크기를 개체의 크기로 조정합니다. 다른 정적 컨트롤에 대해 아무 작업도 수행하지 않습니다.
WM_DESTROY 그래픽 정적 컨트롤에 대한 모든 그래픽 개체를 해제하고 삭제합니다. 다른 정적 컨트롤에 대해 아무 작업도 수행하지 않습니다.
WM_ENABLE 표시되는 정적 컨트롤을 다시 그립니다.
WM_ERASEBKGND 컨트롤이 배경을 지우는 것을 나타내는 TRUE를 반환합니다.
WM_GETDLGCODE DLGC_STATIC을 반환합니다.
WM_GETFONT 텍스트 정적 컨트롤의 글꼴에 대한 핸들을 반환합니다.
WM_GETTEXT 복사된 문자 수를 반환합니다.
WM_GETTEXTLENGTH 텍스트 정적 컨트롤에 대한 텍스트의 길이(문자)를 반환합니다.
WM_LBUTTONDBLCLK 컨트롤 스타일이 SS_NOTIFY인 경우 부모 창에 STN_DBLCLK 알림 코드를 보냅니다.
WM_LBUTTONDOWN 컨트롤 스타일이 SS_NOTIFY인 경우 부모 창에 STN_CLICKED 알림 코드를 보냅니다.
WM_NCLBUTTONDBLCLK 컨트롤 스타일이 SS_NOTIFY인 경우 부모 창에 STN_DBLCLK 알림 코드를 보냅니다.
WM_NCLBUTTONDOWN 컨트롤 스타일이 SS_NOTIFY인 경우 부모 창에 STN_CLICKED 알림 코드를 보냅니다.
WM_NCHITTEST 컨트롤 스타일이 SS_NOTIFY인 경우 HTCLIENT를 반환하거나 그렇지 않은 경우 HTTRANSPARENT를 반환합니다.
WM_PAINT 컨트롤을 다시 그립니다.
WM_SETFONT 텍스트 정적 컨트롤의 글꼴 및 다시 그리기를 설정합니다.
WM_SETTEXT 텍스트 정적 컨트롤에 대한 텍스트 및 다시 그리기를 설정합니다.

 

미리 정의된 창 프로시저는 기본 처리를 위해 다른 모든 메시지를 DefWindowProc에 전달합니다.