비고
다음 기술 정보는 온라인 설명서에 처음 포함되었으므로 업데이트되지 않았습니다. 따라서 일부 절차와 항목이 만료되거나 올바르지 않을 수 있습니다. 최신 정보는 온라인 설명서 인덱스의 관심 항목을 검색하는 것이 좋습니다.
이 참고에서는 MFC의 컨트롤 바 클래스인 일반 CControlBar, CStatusBar, CToolBar, CDialogBar 및 CDockBar
에 대해 설명합니다.
CControlBar
A ControlBar
는 다음과 같은 CWnd
파생 클래스입니다.
프레임 창의 위쪽이나 아래쪽에 맞춥니다.
HWND 기반 컨트롤(예:
CDialogBar
) 또는 비 HWND 기반 항목(예:HWND
,CToolBar
)인 자식 항목을 포함할 수 있습니다.
컨트롤 막대는 추가 스타일을 지원합니다.
CBRS_TOP(기본값)은 컨트롤 막대를 맨 위에 고정합니다.
CBRS_BOTTOM 컨트롤 막대를 아래쪽에 고정합니다.
CBRS_NOALIGN 부모 크기가 조정되면 컨트롤 막대의 위치를 변경하지 마세요.
파생된 CControlBar
클래스는 더 흥미로운 구현을 제공합니다.
CStatusBar
상태 표시줄, 항목은 텍스트를 포함하는 상태 표시줄 창입니다.CToolBar
도구 모음, 항목은 행에 정렬된 비트맵 단추입니다.CDialogBar
표준 창 컨트롤(대화 상자 템플릿 리소스에서 생성됨)을 포함하는 도구 모음과 같은 프레임입니다.CDockBar
다른CControlBar
파생 개체에 대한 일반화된 도킹 영역입니다. 이 클래스에서 사용할 수 있는 특정 멤버 함수 및 변수는 향후 릴리스에서 변경될 가능성이 높습니다.
모든 컨트롤 막대 개체/창은 일부 부모 프레임 창의 자식 창입니다. 일반적으로 프레임의 클라이언트 영역에 형제로 추가됩니다(예: MDI 클라이언트 또는 뷰). 컨트롤 막대의 자식 창 ID가 중요합니다. 컨트롤 막대의 기본 레이아웃은 AFX_IDW_CONTROLBAR_LAST AFX_IDW_CONTROLBAR_FIRST 범위의 ID가 있는 컨트롤 막대에 대해서만 작동합니다. 256개의 컨트롤 바 ID 범위가 있더라도 이러한 컨트롤 바 ID의 처음 32개는 인쇄 미리 보기 아키텍처에서 직접 지원되므로 특별합니다.
클래스는 CControlBar
다음을 위한 표준 구현을 제공합니다.
컨트롤 막대를 프레임의 위쪽, 아래쪽 또는 양쪽에 정렬합니다.
컨트롤 항목 배열 할당
파생 클래스의 구현을 지원합니다.
C++ 컨트롤 막대 개체는 일반적으로 파생 클래스의 CFrameWnd
멤버로 포함되며 부모 HWND
및 개체가 제거될 때 정리됩니다. 힙에 컨트롤 막대 개체를 할당해야 하는 경우 m_bAutoDestruct 멤버를 TRUE로 설정하면 컨트롤 막대가 제거될 때 delete this;
컨트롤 막대가 호출 HWND
되도록 할 수 있습니다.
비고
고유한 CControlBar
파생 클래스를 만들고자 한다면, CStatusBar
, CToolBar
, 또는 CDialogBar
와 같은 MFC의 파생 클래스를 사용하는 대신, m_dwStyle 데이터 멤버를 설정해야 합니다. 이 작업은 Create
의 재정의 내에서 수행할 수 있습니다.
// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create(CWnd* pParentWnd,
DWORD dwStyle,
UINT nID)
{
m_dwStyle = dwStyle;
.
.
.
}
컨트롤 막대 레이아웃 알고리즘
컨트롤 막대 레이아웃 알고리즘은 매우 간단합니다. 프레임 창은 컨트롤 막대 범위의 모든 자식에 WM_SIZEPARENT 메시지를 보냅니다. 이 메시지와 함께 부모의 클라이언트 사각형에 대한 포인터가 전달됩니다. 이 메시지는 Z 순서로 자식에게 전송됩니다. 컨트롤 바 자식은 이 정보를 사용하여 자신을 배치하고 부모의 클라이언트 영역 크기를 줄입니다. 일반 클라이언트 영역에 남아 있는 마지막 사각형(제어 막대가 적음)은 주 클라이언트 창(일반적으로 MDI 클라이언트, 뷰 또는 분할자 창)을 배치하는 데 사용됩니다.
자세한 내용은 CWnd::RepositionBars
및 CFrameWnd::RecalcLayout
를 참조하세요.
WM_SIZEPARENT 포함한 MFC 프라이빗 Windows 메시지는 Technical Note 24에 설명되어 있습니다.
CStatusBar
상태 표시줄은 텍스트 출력 창 행이 있는 컨트롤 막대입니다. 텍스트 출력 창을 사용하는 두 가지 일반적인 방법이 있습니다.
메시지라인으로
(예: 표준 메뉴 도움말 메시지 줄). 0 기반 인덱스를 통해 일반적으로 접근됩니다.
상태 표시기
(예: CAP, NUM 및 SCRL 표시기). 일반적으로 문자열/명령 ID로 액세스합니다.
상태 표시줄의 글꼴은 10포인트 MS Sans Serif입니다(Windows 인터페이스 애플리케이션 디자인 가이드에 의해 결정되거나 글꼴 매퍼가 10포인트 스위스 비례 글꼴을 기준으로 가장 잘 일치하는 글꼴을 선택합니다). 일본어 버전과 같은 특정 버전의 Windows에서는 선택한 글꼴이 다릅니다.
상태 표시줄에 사용되는 색은 Windows 인터페이스 애플리케이션 디자인 가이드의 권장 사항과도 일치합니다. 이러한 색은 하드 코딩되지 않으며 제어판의 사용자 사용자 지정에 따라 동적으로 변경됩니다.
항목 | Windows 색상 값 | 기본 RGB |
---|---|---|
상태 표시줄 배경 | COLOR_BTNFACE | RGB 색상코드(192, 192, 192) |
상태 표시줄 텍스트 | 색상_버튼_텍스트 | RGB(000, 000, 000) |
상태 표시줄 위쪽/왼쪽 가장자리 | COLOR_BTNHIGHLIGHT | RGB(255, 255, 255) |
상태 표시줄 봇/오른쪽 가장자리 | COLOR_BTNSHADOW | RGB(128, 128, 128) |
CStatusBar에 대한 CCmdUI 지원
표시기가 일반적으로 업데이트되는 방식은 ON_UPDATE_COMMAND_UI 메커니즘을 통해 이루어집니다. 유휴 시간에 상태 표시줄은 표시기 창의 문자열 ID를 사용하여 ON_UPDATE_COMMAND_UI 처리기를 호출합니다.
ON_UPDATE_COMMAND_UI 처리기는 다음을 호출할 수 있습니다.
Enable
: 창을 사용하거나 사용하지 않도록 설정합니다. 사용하지 않도록 설정된 창은 활성화된 창과 똑같지만 텍스트는 보이지 않습니다(즉, 텍스트 표시기를 끕니다).SetText
: 텍스트를 변경합니다. 창의 크기가 자동으로 조정되지 않으므로 이 값을 사용하는 경우 주의해야 합니다.
생성 및 사용자 지정 API에 대한 자세한 내용은 클래스 라이브러리 참조의 CStatusBar
클래스를 참조하세요. 상태 표시줄을 처음 표시하기 전에 대부분의 상태 표시줄 사용자 지정을 수행해야 합니다.
상태 표시줄은 하나의 스트레치 창(일반적으로 첫 번째 창)만 지원합니다. 해당 창의 크기는 실제로 최소 크기입니다. 상태 표시줄이 모든 창의 최소 크기보다 크면 스트레치 창에 추가 너비가 지정됩니다. 상태 표시줄이 있는 기본 앱에는 첫 번째 패널이 신축성이 있어서 CAP, NUM, SCRL 지표가 오른쪽에 정렬되어 있습니다.
CToolBar
도구 모음은 구분 기호를 포함할 수 있는 비트맵 단추 행이 있는 컨트롤 막대입니다. 단추의 두 가지 스타일, 즉 푸시버튼과 확인란 단추가 지원됩니다. 라디오 그룹 기능은 확인란 단추 및 ON_UPDATE_COMMAND_UI 사용하여 빌드할 수 있습니다.
도구 모음의 모든 비트맵 단추는 하나의 비트맵에서 가져옵니다. 이 비트맵은 각 단추에 대해 하나의 이미지 또는 문자 모양을 포함해야 합니다. 일반적으로 비트맵의 이미지/문자 모양 순서는 화면에 그려지는 순서와 같습니다. (사용자 지정 API를 사용하여 변경할 수 있습니다.)
각 단추의 크기는 같아야 합니다. 기본값은 표준 24x22 픽셀입니다. 각 이미지/문자 모양은 크기가 같아야 하며 비트맵에서 나란히 있어야 합니다. 기본 이미지/문자 모양 크기는 16x15 픽셀입니다. 따라서 표준 크기를 사용하여 10개의 단추가 있는 도구 모음의 경우 너비가 160픽셀이고 높이가 15픽셀인 비트맵이 필요합니다.
각 단추에는 하나의 이미지/문자 모양만 있습니다. 단추의 다양한 상태와 스타일(예: 눌림, 위쪽, 아래쪽, 비활성화됨, 비활성화된 아래쪽, 확정되지 않음)은 그 하나의 이미지/글리프 캡처에서 알고리즘으로 생성됩니다. 모든 색 비트맵 또는 DIB는 이론적으로 사용할 수 있습니다. 원래 이미지가 회색 음영인 경우 다른 단추 상태를 생성하는 알고리즘이 가장 적합합니다. 예제는 MFC 일반 샘플 CLIPART에 제공된 표준 도구 모음 단추 및 도구 모음 단추 클립 아트를 참조하세요.
도구 모음에 사용되는 색은 Windows 인터페이스 애플리케이션 디자인 가이드의 권장 사항과도 일치합니다. 이러한 색은 하드 코딩되지 않으며 제어판의 사용자 사용자 지정에 따라 동적으로 변경됩니다.
항목 | Windows 색상 값 | 기본 RGB |
---|---|---|
도구 모음 배경 | COLOR_BTNFACE | RGB(192,192,192) |
도구 모음의 버튼 위쪽/왼쪽 가장자리 | 버튼 강조 색상 | RGB(255,255,255), 흰색을 나타내는 색상 코드입니다. |
도구 모음 단추의 아래쪽/오른쪽 가장자리 | COLOR_BTNSHADOW | RGB(128,128,128) |
또한 도구 모음 비트맵 단추는 표준 Windows 단추 컨트롤인 것처럼 다시 칠해집니다. 이 다시 칠하기는 리소스에서 비트맵을 로드할 때와 제어판에서 사용자가 색상을 사용자 지정하는 경우 시스템 색상이 변경되면 발생합니다. 도구 모음 비트맵의 다음 색은 자동으로 다시 칠해지므로 주의해서 사용해야 합니다. 비트맵의 일부를 다시 칠하지 않으려면 매핑된 RGB 값 중 하나와 거의 일치하는 색을 사용합니다. 매핑은 정확한 RGB 값을 기반으로 수행됩니다.
RGB 값 | 동적으로 매핑된 색상 값 |
---|---|
RGB(000, 000, 000) | COLOR_BTNTEXT |
RGB(128, 128, 128) | COLOR_BTNSHADOW |
RGB 색상코드(192, 192, 192) | COLOR_BTNFACE |
RGB(255, 255, 255) | COLOR_BTNHIGHLIGHT |
만들기 및 사용자 지정 API에 대한 자세한 내용은 클래스 라이브러리 참조CToolBar
를 참조하세요. 도구 모음을 처음 표시하기 전에 대부분의 도구 모음 사용자 지정을 수행해야 합니다.
사용자 지정 API를 사용하여 단추 ID, 스타일, 스페이서 너비 및 어떤 단추에 사용되는 이미지/문자 모양을 조정할 수 있습니다. 기본적으로 이러한 API를 사용할 필요가 없습니다.
CToolBar에 대한 CCmdUI 지원
도구 모음 단추가 항상 업데이트되는 방식은 ON_UPDATE_COMMAND_UI 메커니즘을 사용하는 것입니다. 유휴 시간에 도구 모음은 해당 단추의 명령 ID를 사용하여 ON_UPDATE_COMMAND_UI 처리기를 호출합니다. ON_UPDATE_COMMAND_UI 구분 기호에 대해 호출되지 않지만 푸쉬버튼 및 확인란 단추에 대해 호출됩니다.
ON_UPDATE_COMMAND_UI 처리기는 다음을 호출할 수 있습니다.
Enable
: 단추를 사용하거나 사용하지 않도록 설정합니다. 이는 푸쉬버튼 및 확인란 단추에 균등하게 작동합니다.SetCheck
: 단추의 확인 상태를 설정하려면 도구 모음 단추에 대해 이를 호출하면 확인란 단추로 바뀝니다.SetCheck
는 0(선택되지 않음), 1(선택됨) 또는 2(확정되지 않음)일 수 있는 매개 변수를 사용합니다.SetRadio
:SetCheck
의 약어입니다.
확인란 단추는 "AUTO" 확인란 단추입니다. 즉, 사용자가 키를 누르면 즉시 상태가 변경됩니다. "우울하거나 침체된 상태가 확인되었습니다." 단추를 "확정되지 않은" 상태로 변경하는 기본 제공 사용자 인터페이스 방법은 없습니다. 코드를 통해 수행해야 합니다.
사용자 지정 API를 사용하면 지정된 도구 모음 단추의 상태를 변경할 수 있습니다. 바람직하게는 도구 모음 단추가 나타내는 명령에 대한 ON_UPDATE_COMMAND_UI 처리기에서 이러한 상태를 변경해야 합니다. 유휴 처리는 ON_UPDATE_COMMAND_UI 처리기를 사용하여 도구 모음 단추의 상태를 변경하므로 SetButtonStyle을 통해 이러한 상태를 변경하면 다음 유휴 상태가 지나면 손실될 수 있습니다.
도구 모음 단추는 일반 단추 또는 메뉴 항목과 같은 WM_COMMAND 메시지를 보내며 일반적으로 ON_UPDATE_COMMAND_UI 처리기를 제공하는 동일한 클래스의 ON_COMMAND 처리기에 의해 처리됩니다.
표시 상태에는 네 가지 도구 모음 단추 스타일(TBBS_ 값)이 사용됩니다.
TBBS_CHECKED: 확인란이 현재 체크된 상태입니다(눌린 상태).
TBBS_INDETERMINATE: 확인란은 현재 확정되지 않습니다.
TBBS_DISABLED: 단추가 현재 비활성화되어 있습니다.
TBBS_PRESSED: 단추가 현재 눌린 상태입니다.
6개의 공식 Windows 인터페이스 애플리케이션 디자인 가이드 단추 스타일은 다음 TBBS 값으로 표시됩니다.
위 = 0
마우스 아래쪽 = TBBS_PRESSED(| 다른 스타일)
비활성화됨 = TBBS_DISABLED
아래쪽 = TBBS_CHECKED
비활성화 = TBBS_CHECKED | TBBS_DISABLED
확정되지 않은 = TBBS_INDETERMINATE
CDialogBar
대화 상자 모음은 표준 Windows 컨트롤을 포함하는 컨트롤 막대입니다. 컨트롤을 포함하고 컨트롤 간의 탭을 지원한다는 측면에서 대화 상자처럼 작동합니다. 또한 대화 상자 템플릿을 사용하여 막대를 나타내는 대화 상자처럼 작동합니다.
A CDialogBar
는 표준 푸시 버튼 컨트롤을 포함하는 인쇄 미리 보기 도구 모음에 사용됩니다.
CDialogBar
를 사용하는 것은 CFormView
를 사용하는 것과 같습니다. 대화 상자 모음에 대한 대화 상자 템플릿을 정의하고 WS_CHILD 제외한 모든 스타일을 제거해야 합니다. 대화 상자는 표시되지 않아야 합니다.
컨트롤 알림 CDialogBar
은 도구 모음 단추와 마찬가지로 컨트롤 막대의 부모로 전송됩니다.
CDialogBar에 대한 CCmdUI 지원
대화 상자 표시줄 단추는 ON_UPDATE_COMMAND_UI 처리기 메커니즘을 통해 업데이트해야 합니다. 유휴 시간에 대화 상자 표시줄은 ID = 0x8000(즉, 명령 ID 범위)가 있는 모든 단추의 명령 ID >를 사용하여 ON_UPDATE_COMMAND_UI 처리기를 호출합니다.
ON_UPDATE_COMMAND_UI 처리기는 다음을 호출할 수 있습니다.
사용: 단추를 사용하거나 사용하지 않도록 설정합니다.
SetText: 단추의 텍스트를 변경합니다.
사용자 지정은 표준 창 관리자 API를 통해 수행할 수 있습니다.
참고하십시오
숫자로 된 기술 노트
범주별 기술 정보