티스토리 뷰
동일한 화면 영역에 서로 다른 내용을 표시하려고 할때 유용하다.
1. 탭 컨트롤 스타일
- Alignment
탭의 정렬 방식을 나타내는 Right Justify(기본값), Fixed Width, Ragged Right 3가지가 있다.
- Focus
탭이 키보드 포커스를 가질 수 있는 방법에 따라 Default(마우스 또는 키보드), OnButton Down(마우스), Never(키보드 포커스를 가지지 않음) 3 종류가 있다. 포커스를 가진 탭은 빗금 표시가 생긴다.
- Buttons
탭이 버튼 형태로 표시된다.
- TooTips
각각의 탭에 대해 툴팁을 생성한다.
- Border
탭 컨트롤 주식에 경계선을 그린다.
- Multiline
탭의 개수가 많을 경우 여러 줄로 표시할 수 있도록한다.
- Owner draw fixed
부모 윈도우가 탭을 다시 그릴 수 있도록한다. 하지만 이 경우에는 고정 길이으 탭만 가능하고, 부모 윈도우는 WM_MEASUREITEM 과 WM_DRAWITEM 메시지를 처리해야 한다.
- Force label left
Alignment 스타일에서 Fixed Width 를 선택한 경우에만 사용할 수 있으며, 이이콘과 레이블을 무도 왼쪽 정렬한다.
- Force icon left
Alignment 스타일에서 Fixed Width 를 선택한 경우에만 사용할 수 있으며, 이이콘은 왼쪽 정렬하고, 레이블은 가운데 정렬한다.
- HotTrack
마우스 커서가 지나갈때 탭의 레이블 색상이 바뀐다.
- Buttom
탭을 바닥에 표시한다.
- MultiSelect
Buttons 스타일을 설정한 경우에만 사용할 수 있으며, Ctrl키를 이용해서 여러개의 탭을 선택할 수 있도록 한다.
- Scroll opposite
현재 선택한 탭을 포함하는 줄을 제외한 나머지 탭을 모두 반대쪽으로 이동 시킨다.
- Vertical
탭을 왼쪽에 표시한다. 이 스타일과 Bottoms 스타일을 모두 설장하면 탭을 오른쪽에 표시한다.
<탭 건트롤은 WM_NOTIFY 통지 메시지를 발생키시며 이때 통지 코드와 의미>
통지코드 |
의미 |
TCN_SELCHANGING |
탭 선택이 변경되기 직전이다. |
TCN_SELCHANGE |
탭 선택이 변경되었다. |
2. 탭 컨트롤 클래스
- 탭에 사용할 이미지 리스트 설정하기
1 |
CImageList* CTabCtrl::SetImageList(CImageList* pImageList); |
cs |
탭 이미지를 사용할 경우 이 함수를 이용하여 탭 컨트롤에서 사용할 이미지를 넘겨준다.
- 탭 추가하기
1
2
3 |
LONG CTabCtrl::InsertItem(int nItem, TCITEM* pTabCtrlItem);
LONG CTabCtrl::InsertItem(int nItem, LPCTSTR lpszItem);
LONG CTabCtrl::InsertItem(int nItem, LPCTSTR lpszItem, int nImage); |
cs |
nItem : 탭의 인덱스 (0 부터 시작), 일반적으로 TCITEM 구조체에 추가할 탭에 대한 모든 정보를 채워서 1행 함수를 호출하면 되지만 2행, 3행 함수를 사용하면 좀더 간단히 탭을 추가할 수 있다.
lpszItem : 새로운 탭에 표시할 텍스트(레이블)
nImage : 탭에 표시할 이미지로서 이미지 리스트에서의 인덱스 값을 주면된다.
1
2
3
4
5
6
7
8
9
10
11
12
13 |
TCITEM tcitem; // 구조체 이용해서 탭 추가
tcitem.mask = TCIF_TEXT;
tcitem.pszText = L"Tab #0";
m_tab.InsertItem(0, &tcitem);
tcitem.pszText = L"Tab #1";
m_tab.InsertItem(1, &tcitem);
tcitem.pszText = L"Tab #2";
m_tab.InsertItem(2, &tcitem);
// 구조체 탭 추가보다 간단
m_tab.InsertItem(0, L"Tab #0");
m_tab.InsertItem(0, L"Tab #0");
m_tab.InsertItem(0, L"Tab #0"); |
cs |
- 탭 선택 변경과 선택된 탭 알아내기
1
2 |
int CTabCtrl::SetCurSel(int nItem);
int CTabCtrl::GetCurSel(); |
cs |
nItem : 선택할 탭의 인덱스 (0 부터 시작)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 |
class CMFCApplication15View : public CFormView
{
...
public:
CTabCtrl m_tab;
CEdit m_edit;
afx_msg void OnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult);
};
BEGIN_MESSAGE_MAP(CMFCApplication15View, CFormView)
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CMFCApplication15View::OnSelchangeTab1)
END_MESSAGE_MAP()
void CMFCApplication15View::OnInitialUpdate()
{
...
CImageList il; // 탭에 사용할 이미지 리스트를 설정
il.Create(IDB_BITMAP1, 16, 1, RGB(255, 255, 255));
m_tab.SetImageList(&il);
il.Detach();
m_tab.InsertItem(0, L"Tab #0", 0); // 3개의 탭을 추가
m_tab.InsertItem(1, L"Tab #1", 0);
m_tab.InsertItem(2, L"Tab #2", 0);
m_tab.SetCurSel(1);
m_edit.SetWindowTextW(L"1번째 탭을 선택했습니다.");
}
void CMFCApplication15View::OnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
int nIndex = m_tab.GetCurSel();
CString str;
str.Format(L"%d번째 탭을 선택했습니다.", nIndex);
m_edit.SetWindowTextW(str);
*pResult = 0;
}
|
cs |