CSplitButton 클래스
이 클래스는 CSplitButton
분할 단추 컨트롤을 나타냅니다. 분할 단추 컨트롤은 사용자가 단추의 주요 부분을 클릭할 때 기본 동작을 수행하고 사용자가 단추의 드롭다운 화살표를 클릭하면 드롭다운 메뉴를 표시합니다.
구문
class CSplitButton : public CButton
멤버
공용 생성자
속성 | 설명 |
---|---|
CSplitButton::CSplitButton | CSplitButton 개체를 생성합니다. |
공용 메서드
이름 | 설명 |
---|---|
CSplitButton::Create | 지정한 스타일을 사용하여 분할 단추 컨트롤을 만들고 현재 CSplitButton 개체에 연결합니다. |
CSplitButton::SetDropDownMenu | 사용자가 현재 분할 단추 컨트롤의 드롭다운 화살표를 클릭할 때 표시되는 드롭다운 메뉴를 설정합니다. |
보호된 메서드
속성 | 설명 |
---|---|
CSplitButton::OnDropDown | 사용자가 현재 분할 단추 컨트롤의 드롭다운 화살표를 클릭할 때 시스템에서 보내는 BCN_DROPDOWN 알림을 처리합니다. |
설명
클래스는 CSplitButton
CButton 클래스에서 파생됩니다. 분할 단추 컨트롤은 스타일이 BS_SPLITBUTTON 단추 컨트롤입니다. 사용자가 드롭다운 화살표를 클릭하면 사용자 지정 메뉴가 표시됩니다. 자세한 내용은 단추 스타일의 BS_SPLITBUTTON 및 BS_DEFSPLITBUTTON 스타일을 참조하세요.
다음 그림에서는 페이저 컨트롤과 (1) 분할 단추 컨트롤이 포함된 대화 상자를 보여 줍니다. (2) 드롭다운 화살표를 이미 클릭했으며 (3) 하위 메뉴가 표시됩니다.
상속 계층 구조
CSplitButton
요구 사항
헤더: afxcmn.h
이 클래스는 Windows Vista 이상에서 지원됩니다.
이 클래스에 대한 추가 요구 사항은 Windows Vista 공용 컨트롤의 빌드 요구 사항에 설명 되어 있습니다.
CSplitButton::Create
지정한 스타일을 사용하여 분할 단추 컨트롤을 만들고 현재 CSplitButton
개체에 연결합니다.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
매개 변수
dwStyle
[in] 컨트롤에 적용할 스타일의 비트 조합(OR)입니다. 자세한 내용은 단추 스타일을 참조 하세요.
rect
[in] 컨트롤의 위치와 크기를 포함하는 RECT 구조체에 대한 참조입니다.
pParentWnd
[in] 컨트롤의 부모 창인 CWnd 개체에 대한 null이 아닌 포인터입니다.
nID
[in] 컨트롤의 ID입니다.
Return Value
이 메서드가 성공하면 TRUE입니다. 그렇지 않으면 FALSE입니다.
CSplitButton::CSplitButton
CSplitButton
개체를 생성합니다. 생성자의 매개 변수는 사용자가 분할 단추 컨트롤의 드롭다운 화살표를 클릭할 때 표시되는 하위 메뉴입니다.
CSplitButton();
CSplitButton(
UINT nMenuId,
UINT nSubMenuId)
CSplitButton(CMenu* pMenu)
매개 변수
nMenuId
[in] 메뉴 모음의 리소스 ID입니다.
nSubMenuId
[in] 하위 메뉴의 리소스 ID입니다.
pMenu
[in] 하위 메뉴를 지정하는 CMenu 개체에 대한 포인터입니다. 개체가 CSplitButton
CMenu
범위를 벗어나면 개체와 연결된 HMENU가 CSplitButton
삭제됩니다.
설명
CSplitButton::Create 메서드를 사용하여 분할 단추 컨트롤을 만들고 개체에 CSplitButton
연결합니다.
CSplitButton::OnDropDown
사용자가 현재 분할 단추 컨트롤의 드롭다운 화살표를 클릭할 때 시스템에서 보내는 BCN_DROPDOWN 알림을 처리합니다.
afx_msg void OnDropDown(
NMHDR* pNMHDR,
LRESULT* pResult);
매개 변수
pNMHDR
[in] BCN_DROPDOWN 알림에 대한 정보를 포함하는 NMHDR 구조체에 대한 포인터입니다.
pResult
[out] (사용되지 않음, 값이 반환되지 않습니다.) BCN_DROPDOWN 알림의 값을 반환합니다.
설명
사용자가 분할 단추 컨트롤에서 드롭다운 화살표를 클릭하면 시스템에서 메서드가 처리하는 BCN_DROPDOWN 알림 메시지를 OnDropDown
보냅니다. 그러나 개체는 CSplitButton
분할 단추 컨트롤이 포함된 컨트롤에 BCN_DROPDOWN 알림을 전달하지 않습니다. 따라서 포함 컨트롤은 알림에 대한 응답으로 사용자 지정 작업을 지원할 수 없습니다.
포함하는 컨트롤에서 지원하는 사용자 지정 작업을 구현하려면 개체 대신 BS_SPLITBUTTON 스타일이 있는 CButton 개체를 CSplitButton
사용합니다. 그런 다음 개체에서 BCN_DROPDOWN 알림에 CButton
대한 처리기를 구현합니다. 자세한 내용은 단추 스타일을 참조 하세요.
분할 단추 컨트롤 자체가 지원하는 사용자 지정 작업을 구현하려면 메시지 리플렉션을 사용합니다. 클래스에서 고유한 클래스를 CSplitButton
파생하고 이름을 지정합니다(예: CMySplitButton). 그런 다음 애플리케이션에 다음 메시지 맵을 추가하여 BCN_DROPDOWN 알림을 처리합니다.
BEGIN_MESSAGE_MAP(CMySplitButton,
CSplitButton)
ON_NOTIFY_REFLECT(BCN_DROPDOWN, &CMySplitButton::OnDropDown)
END_MESSAGE_MAP()
CSplitButton::SetDropDownMenu
사용자가 현재 분할 단추 컨트롤의 드롭다운 화살표를 클릭할 때 표시되는 드롭다운 메뉴를 설정합니다.
void SetDropDownMenu(
UINT nMenuId,
UINT nSubMenuId);
void SetDropDownMenu(CMenu* pMenu);
매개 변수
nMenuId
[in] 메뉴 모음의 리소스 ID입니다.
nSubMenuId
[in] 하위 메뉴의 리소스 ID입니다.
pMenu
[in] 하위 메뉴를 지정하는 CMenu 개체에 대한 포인터입니다. 개체가 CSplitButton
CMenu
범위를 벗어나면 개체와 연결된 HMENU가 CSplitButton
삭제됩니다.
설명
nMenuId 매개 변수는 메뉴 모음 항목의 가로 목록인 메뉴 모음을 식별합니다. nSubMenuId 매개 변수는 하위 메뉴를 식별하는 인덱스 번호(각 메뉴 모음 항목과 연결된 메뉴 항목의 드롭다운 목록)입니다. 예를 들어 일반적인 애플리케이션에는 메뉴 모음 항목인 "파일", "편집" 및 "도움말"이 포함된 메뉴가 있습니다. "파일" 메뉴 모음 항목에는 메뉴 항목인 "열기", "닫기" 및 "종료"가 포함된 하위 메뉴가 있습니다. 분할 단추 컨트롤의 드롭다운 화살표를 클릭하면 메뉴 모음이 아닌 지정된 하위 메뉴가 표시됩니다.
다음 그림에서는 페이저 컨트롤과 (1) 분할 단추 컨트롤이 포함된 대화 상자를 보여 줍니다. (2) 드롭다운 화살표를 이미 클릭했으며 (3) 하위 메뉴가 표시됩니다.
예시
다음 코드 예제의 첫 번째 문은 CSplitButton::SetDropDownMenu 메서드를 보여 줍니다. 메뉴 모음 ID의 이름을 자동으로 지정하는 Visual Studio 리소스 편집기가 IDR_MENU1 메뉴를 만들었습니다. nSubMenuId 매개 변수(0)는 메뉴 모음의 유일한 하위 메뉴를 참조합니다.
// Initialize the dropdown menu of the splitbutton control.
m_splitButton.SetDropDownMenu(IDR_MENU1, 0);
// Create the pager control.
BOOL nRet;
CRect rect;
GetClientRect(&rect);
nRet = m_pager.Create(
(WS_VISIBLE | WS_CHILD | PGS_HORZ),
CRect(rect.Width() / 4, 5, (rect.Width() * 3) / 4, 55),
this,
IDC_PAGER1);
m_pager.GetClientRect(&rect);
nRet = m_button.Create(
_T("This is a very, very long button. 012345678901234567890"),
(WS_VISIBLE | WS_CHILD), // Do not use CCS_NORESIZE.
CRect(0, 0, rect.Width(), 30),
&m_pager, IDC_BUTTON1);
m_pager.SetChild(m_button.m_hWnd);
m_pager.SetButtonSize(20);
m_pager.SetBorder(1);