Graphisoft®

Dialog ManagerVersion: 2.0

탭 컨트롤

탭 컨트롤은 하나의 다이얼로그의 동일한 영역에 대하여 다중 페이지들을 정의합니다. 각 페이지는 사용자가 해당 탭을 선택할 때 애플리케이션이 표시하는 컨트롤들의 집합으로 구성되어 있습니다. 탭 컨트롤은 2가지 타입이 있습니다: 일반 탭 컨트롤과 단순 탭 컨트롤.

모든 탭 컨트롤은 애플리케이션이 현재 페이지를 표시하는 표시 영역을 갖고 있습니다. 탭 페이지는 탭 컨트롤 항목에 할당됩니다. 탭 페이지들의 파라미터들을 생성, 파괴, 변경하는 방법을 자세히 알고 싶으면 탭 페이지를 보십시오.

일반 탭 컨트롤은 3차원 돌출 경계를 갖고 있으며 표시 영역 위에 1행의 탭 항목 라벨을 표시합니다. 사용자는 현재 표시되는 페이지를 변경하기 위해 라벨 위를 클릭할 수 있습니다. Windows에서 탭 컨트롤들은 키보드 포커스를 가질 수 있습니다. 키보드 포커스는 현재 선택된 페이지의 라벨 주변에 그려지는 포커스 사각형에 의해 표시됩니다. 탭 페이지가 키보드 포커스를 갖게 되면, 사용자는 Home, End 또는 수평 화살표 키를 눌러서 다른 탭 항목들을 선택할 수 있습니다. 각 탭 항목 라벨은 선택적인 아이콘과 텍스트로 구성되어 있습니다. 아이콘은 항상 텍스트 왼쪽에 맞춰져 있습니다. Windows에서는 만약 모든 라벨들을 동시에 그릴 수 없다면 탭 컨트롤은 수평 스핀 컨트롤을 표시합니다. 그러면 사용자는 추가 탭 항목 라벨들을 뷰로 스크롤 할 수 있습니다. Macintosh에서는 탭 컨트롤에 그러한 기능이 없고, 탭 항목 라벨들은 행 끝에서 잘립니다.

단순 탭 컨트롤은 대화식 다이얼로그 항목이 아닙니다. 이것은 단지 탭 페이지의 컨테이너처럼 작동합니다. 이 타입의 탭 컨트롤은 탭 항목 라벨들을 갖지 않습니다. 이것은 동일 다이얼로그의 다른 컨트롤에 의해 동작될 수 있습니다. 예를 들면, 이 목적을 위해 푸시 유사한 라디오 버튼들의 그룹이 좋은 선택이 됩니다. 애플리케이션은 라디오 버튼과 단순 탭 컨트롤 간에 링크를 만들 수 있습니다. 그래서 사용자가 라디오 버튼을 클릭하면 해당 탭 페이지가 표시됩니다. 기본적으로 단순 탭 컨트롤은 프레임을 갖고 있지 않지만 3차원 돌출 경계를 가질 수 있습니다.

항목 타입

DG_ITM_TABCONTROL

서브 타입

서브 타입 의미
DG_TT_NORMALTAB 일반 탭 컨트롤입니다.

  

DG_TT_SIMPLETAB 단순 탭 컨트롤입니다.

GRC 사양

    NormalTab    x  y  dx  dy
                 dlgID1  iconID1  "labelText1"
                           ...
                 dlgIDi  iconIDi  "labelTexti"
                           ...
                 dlgIDn  iconIDn  "labelTextn"

    SimpleTab    x  y  dx  dy  [frameType]
                 dlgID1
                   ...
                 dlgIDi
                   ...
                 dlgIDn

xy는 탭 컨트롤의 좌상단 코너의 픽셀 좌표입니다. dxdy는 컨트롤의 너비와 높이의 픽셀 크기입니다. dlgIDi, iconIDilabelTexti (1 <= i <= n) 파라미터들은 n개의 탭 페이지들과 그것들의 탭 항목들을 초기화합니다. dlgIDi는 GRC에서 i번째 탭 페이지 리소스의 리소스 ID입니다. iconIDilabelTexti는 i번째 탭 페이지의 아이콘과 라벨 텍스트(2개의 인용 마크 사이에 있음)를 정의합니다. 만약 선택적인 frameType flag가 생략되면, 단순 탭 컨트롤은 3차원 돌출 경계와 함께 그려집니다. 만약 프레임이 없는 단순 탭 컨트롤을 원한다면 이 flag를 noFrame으로 세트하십시오.

iconIDi의 가능한 값은 다음과 같습니다:

의미
NoIcon i번째 탭 항목은 아이콘이 없습니다.
129 <= iconID <= SHRT_MAX i번째 탭 항목은 리소스에서 주어진 아이콘을 갖고 있습니다. 아이콘의 크기는 16x16 픽셀이어야 합니다.

frameType의 가능한 값은 다음과 같습니다:

의미
noFrame 단순 탭 컨트롤은 프레임이 없습니다.
frame 단순 탭 컨트롤은 3차원 돌출 경계를 갖게 됩니다.

메시지

메시지 의미
DG_MSG_CHANGE 일반 탭 컨트롤의 현재 (표시된) 탭 페이지가 변경되었습니다. 메시지 데이터 파라미터는 예전에 선택된 탭 항목의 1-기반 인덱스를 포함하고 있습니다.
DG_MSG_CLICK 일반 탭 컨트롤의 현재 탭 페이지가 변경될 예정입니다. 메시지 데이터 파라미터는 사용자가 클릭한 탭 항목의 1-기반 인덱스를 포함하고 있습니다. 탭 페이지 변경을 막으려면 1을 리턴하고, 허용하려면 0을 리턴하십시오.

수정 Flag

DGTabControlSelectItem 함수는 다이얼로그 콜백 함수에서 DG_MSG_INIT 메시지를 처리할 때 호출되는 경우를 제외하고 탭 컨트롤의 수정 flag를 세트합니다. 일반 탭 컨트롤의 경우, flag는 DG_MSG_CLICK 또는 DG_MSG_CHANGE 메시지를 생성하는 사용자 액션에 의해서도 세트될 수 있습니다. 수정 flag의 상태를 가져오거나 리셋(지우기)하려면 DGModified 또는 DGResetModified를 사용하십시오.

설명

탭 페이지는 특수한 다이얼로그입니다. 왜냐하면 이것들은 다이얼로그 콜백 함수를 갖고 있지 않기 때문입니다. 탭 페이지 상에서 컨트롤들에 대한 메시지는 메인 다이얼로그(탭 컨트롤을 포함하는 다이얼로그)의 콜백 함수로 보내집니다. 그러나 이 메시지들의 경우, 탭 페이지 서브 다이얼로그의 ID는 메인 다이얼로그의 ID 대신 dialId 파라미터의 콜백 함수로 전달됩니다. 콜백 함수로 전달되는 탭 페이지 ID들은 보통 GRC에서 정의한 ID들과 동일합니다. 그러나 특수한 경우에는 다를 수도 있습니다. 예를 들어, 당신이 다중 페이지 탭 컨트롤을 가진 Modeless 다이얼로그를 하나 갖고 있다고 한다면, DG는 GRC에서 주어진 탭 페이지 ID들을 콜백 함수에게 전달합니다. 그러나 당신이 Modeless 다이얼로그의 또 다른 인스턴스를 원한다고 가정합니다. DG에서 모든 다이얼로그와 탭 페이지들은 유일한 ID를 갖고 있어야 하기 때문에, DG는 그것들을 생성할 때 2번째 다이얼로그와 그것의 탭 페이지들에게 생성된 유일한 (negative) ID들을 내부적으로 할당해줍니다. 나중에 당신은 내부적으로 생성된 ID들을 이용하여 이 다이얼로그와 탭 페이지들을 참조해야 합니다. 탭 컨트롤 항목에 부착된 탭 페이지 서브 다이얼로그의 ID는 다이얼로그 콜백 함수에서 DG_MSG_INIT 메시지를 처리할 때 DGTabControlGetTabPageId 함수로 가져올 수 있습니다. 탭 페이지의 메인 다이얼로그의 ID를 가져오려면 DGGetTabPageParentId를 사용하십시오.

일반 및 단순 탭 컨트롤들은 GRC 스크립트에서 정의되거나 DGAppendDialogItem 함수를 통해 동적으로 생성될 수 있습니다. GRC 스크립트에서 탭 컨트롤 항목들의 수와 탭 페이지 리소스들의 할당이 탭 컨트롤 항목 리소스 안에 설명되어 있습니다. 새로운 항목은 DGTabControlInsertItem 함수에 의해 탭 컨트롤에 삽입되며, 리소스 파일에서 정의하거나 DGAppendDialogItem 함수로 생성할 수 있습니다. 초기에 비어 있는 탭 항목에 탭 페이지를 할당하려면 DGCreateTabPage 또는 DGCreateBlankTabPage 함수를 사용하십시오. 탭 컨트롤 항목들은 만약 할당된 탭 페이지가 처음에 DGDestroyTabPage로 지웠을 때에만 DGTabControlDeleteItem 함수로 제거할 수 있습니다. 탭 페이지들의 수는 DGTabControlGetItemCount 함수로 가져올 수 있습니다.

일반 탭 컨트롤들의 경우, 사용자는 현재 표시된 페이지를 변경하기 위해 탭 항목 라벨 위를 클릭하면 됩니다. 사용자가 라벨을 마우스로 클릭할 때, DG는 먼저 콜백 함수에게 DG_MSG_CLICK 메시지를 보냅니다. 만약 애플리케이션이 이 메시지에 1로 응답하면, 메시지의 처리는 취소되고 예전에 선택한 탭 페이지를 선택한 채로 남아 있습니다. 0을 리턴하면 DG는 탭 페이지를 변경하게 되고 DG_MSG_CHANGE 메시지를 보냅니다. DG_MSG_CLICK 메시지를 처리할 때, 현재 선택된 탭 항목의 1-기반 인덱스를 가져오기 위해 DGTabControlGetSelectedItem을 사용합니다. 클릭한 탭 항목의 인덱스는 메시지 데이터 파라미터로부터 가져올 수 있습니다.

일반 탭 컨트롤의 활성 (선택된) 페이지는 사용자 액션뿐만 아니라 프로그램 코드를 통해서도 세트될 수 있습니다. 현재 선택된 탭 항목의 인덱스를 세트하고 가져오려면 DGTabControlSelectItemDGTabControlGetSelectedItem을 각각 사용하십시오. 단순 탭 컨트롤들은 대화식 다이얼로그 항목이 아니기 때문에 DG_MSG_CLICKDG_MSG_CHANGE를 받을 수 없고 탭 페이지들은 프로그램 코드로만 전환할 수 있습니다.

탭 컨트롤의 모든 탭 페이지는 상태 flag를 갖고 있습니다. 상태 flag는 DGTabControlEnableItem, DGTabControlDisableItem, DGTabControlSetItemStatus, DGTabControlIsItemEnabled 함수들을 사용하여 변경하거나 가져올 수 있습니다. 탭 페이지가 비활성화될 때, 그 위에 있던 모든 컨트롤들은 DG에 의해 자동으로 비활성화됩니다. DGTabControlEnableItem은 지정한 탭 페이지뿐만 아니라 거기에 있는 모든 컨트롤들도 활성화합니다. 만약 일반 탭 컨트롤의 탭 페이지가 비활성화되면, 해당 탭 라벨은 회색이 되고 사용자는 마우스를 클릭하여 탭 항목을 선택할 수 없게 됩니다.

일반 탭 컨트롤 항목의 라벨 아이콘을 세트하는 방법은 2가지가 있습니다. 하나는 DGTabControlSetItemIcon으로 아이콘 핸들과 함께 아이콘을 지정하는 것이고, 다른 하나는 DGTabControlSetItemIconId 또는 DGTabControlSetItemIconResource로 리소스 ID와 함께 아이콘을 세트하는 것입니다. 아이콘 핸들은 DGTabControlGetItemIcon로 가져올 수 있습니다. 아이콘의 아이콘 ID와 리소스 모듈 ID는 DGTabControlGetItemIconIdDGTabControlGetItemIconResource로 각각 가져올 수 있습니다.

일반 탭 컨트롤의 탭 항목의 라벨 텍스트는 DGTabControlSetItemTextDGTabControlGetItemText 함수로 변경하거나 가져올 수 있습니다. 기본적으로 라벨 텍스트는 large plain 글꼴로 표시됩니다. 프로그램 코드에서 라벨 텍스트의 글꼴을 변경하려면 DGSetItemFont를 사용하고, 일반 탭 컨트롤에 현재 할당된 글꼴을 가져오려면 DGGetItemFont를 사용하십시오.

탭 컨트롤은 DGTabControlSetClientSize로 리사이즈할 수 있습니다. 그래서 표시 (클라이언트) 영역이 원하는 크기로 변경될 수 있습니다. 표시 영역 크기는 DGTabControlGetClientSizeDGTabControlGetClientRect 함수로 가져올 수 있습니다.

주어진 클라이언트 크기에서 탭 컨트롤의 프레임 크기를 계산할 때와 그 역을 계산할 때에는 DGTabControlClientToFrameDGTabControlFrameToClient를 사용하십시오.

DG에서는 중첩된 탭 페이즈들을 허용하지 않는다는 것을 참고하십시오. 예를 들면, 당신은 다른 탭 컨트롤의 탭 페이지 위에 탭 컨트롤을 배치할 수 없습니다.

요구사항

버전: DG 2.0.0 또는 이후
헤더: DG.h

참고사항

다이얼로그 항목 타입, 탭 컨트롤 지정 함수, 탭 페이지, Modeless 다이얼로그
DGAppendDialogItem, DGGetItemFont, DGGetTabPageParentId, DGModified, DGResetModified, DGSetItemFont, 콜백 함수
DG_MSG_CHANGE, DG_MSG_CLICK, DG_MSG_INIT