Palette 다이얼로그
팔레트 다이얼로그는 사용자가 다른 다이얼로그 또는 창에서 작업하는 동안 정보 또는 옵션을 표시하는 데 사용할 수 있습니다. 팔레트 다이얼로그에는 사용자가 텍스트를 입력하거나 옵션을 선택하거나 직접 작업을 수행할 수 있는 다이얼로그 항목들이 포함되어 있습니다. 팔레트 다이얼로그는 사용자가 정보를 제공하고 다이얼로그를 닫지 않고 이전 작업으로 돌아갈 수 있게 해줍니다. 팔레트 다이얼로그들을 사용하는 애플리케이션들은 일반적으로 사용자가 메뉴 항목을 선택하고 애플리케이션이 실행되는 한 또는 사용자가 다이얼로그를 명시적으로 닫을 때까지는 팔레트 다이얼로그를 계속 표시합니다.
팔레트 다이얼로그는 Modeless 다이얼로그와 유사합니다. 그러나 그 사이에는 몇 가지 차이가 있는데, 그 중 가장 중요한 것은 팔레트 다이얼로그가 항상 애플리케이션의 다른 창과 Modeless 다이얼로그 앞에 위치한다는 것입니다. 즉, 마지막 팔레트가 항상 Modeless 및 팔레트 다이얼로그의 대기열에서 첫 번째 Modeless 다이얼로그 앞에 있다는 것을 의미합니다. 이것은 그들이 플로팅 팔레트라고 부르는 이유입니다. Macintosh에서 이러한 동작을 수행하려면 당신은 시스템의 창 관리자 루틴 대신 WM 루틴으로 모든 창을 처리해야 합니다. (WM은 Macintosh의 DG 다이얼로그 관리자와 함께 동봉되는 특수 창 관리자입니다)
팔레트 다이얼로그를 만드는 방법은 2가지가 있습니다. 리소스 스크립트에 정의된 팔레트 다이얼로그를 만들려면 애플리케이션이 다이얼로그의 치수, 스타일 및 내용을 설명하기 위한 GRC 파일에 GDLG 리소스를 제공해야 합니다. 또한 애플리케이션은 다이얼로그 콜백 함수를 제공하여 다이얼로그 관련 작업들을 수행해야 합니다. 애플리케이션은 DGModelessInit, DGCreatePalette 또는 DGCreateDockablePalette 함수를 사용하여 다이얼로그를 만들 수 있습니다. 이러한 함수들은 다이얼로그의 GDLG 리소스를 로드하고 리소스 사양과 일치하는 다이얼로그 창과 다이얼로그 항목들을 만듭니다. 이 애플리케이션은 DGCreateBlankPalette 또는 DGCreateBlankDockablePalette 함수를 사용할 수도 있습니다. 이 함수는 리소스를 사용하지 않습니다. 프로그램 코드에서 빈 팔레트 다이얼로그를 만듭니다. 애플리케이션은 생성 방법과는 별도로 DGAppendDialogItem 함수를 사용하여 다이얼로그에 다이얼로그 항목을 추가할 수 있습니다.
팔레트 다이얼로그가 작성된 후, 애플리케이션은 다이얼로그에 입력 메시지를 가져오고 발송하는 역할을 합니다. 대부분의 애플리케이션은 이에 대해 메인 메시지 루프를 사용합니다. 애플리케이션은 메인 메시지 루프에서 시스템 지정 메시지를 받은 직후 DGModelessHandler 함수를 호출해야 합니다. DGModelessHandler는 시스템 지정 메시지들을 DG 메시지들로 변환하여 적절한 팔레트 또는 Modeless 다이얼로그의 다이얼로그 콜백 함수로 보냅니다. DGModelessHandler는 또한 팔레트 다이얼로그에 대한 일반적인 다이얼로그 키보드 인터페이스를 제공합니다.
팔레트 다이얼로그는 다이얼로그 항목들에 대해 문맥에 맞는 도움말을 제공할 수 있습니다. 다이얼로그 항목에는 2가지 타입의 도움말 정보가 있을 수 있습니다: 툴팁과 별도의 세부 정보에 대한 앵커입니다. Macintosh에서는 Macintosh 시스템 도움말 메뉴를 통해 이 기능을 사용할 수 있는 경우 짧은 기능이 풍선 도움말에 표시됩니다. Windows에서 일반적인 툴팁은 짧은 항목 도움말을 표시하는 역할을 합니다. 툴팁은 사용 가능한 경우에만 표시됩니다. DG가 초기화되면 툴팁이 자동으로 활성화됩니다. DGDisableToolTips를 사용하여 툴팁 표시를 비활성화하고, DGEnableToolTips로 다시 툴팁 표시를 활성화 할 수 있습니다. 항목 도움말의 세부 버전은 키보드 포커스를 포커스 가능한 다이얼로그 항목으로 설정한 다음 Windows의 [F1] 키 또는 Macintosh의 [Help] 키를 누르거나 항목의 마우스 오른쪽 버튼을 클릭하여 호출할 수 있습니다.
툴팁과 도움말 앵커 문자열은 DLGH 리소스에 정의되어 있습니다. DLGH 리소스의 리소스 ID는 다이얼로그의 GDLG 리소스의 리소스 ID와 같아야 합니다.
팔레트 다이얼로그는 항상 다이얼로그의 상단 또는 왼쪽에 있을 수 있는 얇은 캡션을 가지고 있습니다. 상단 캡션에는 DG의 작은 일반 글꼴로 그려진 제목이 포함될 수 있습니다. Macintosh에서는 캡션에 접힘 상자와 선택적으로 닫힘 상자가 있습니다. Windows에서 캡션에는 닫힘 상자만 포함될 수 있습니다. 만약 다이얼로그가 성장할 수 있는 경우, Macintosh 다이얼로그의 오른쪽 하단 모서리에 작은 크기의 상자가 나타납니다. Windows에서 두꺼운 프레임은 사용자가 다이얼로그의 크기를 조정할 수 있음을 나타냅니다.
다이얼로그 GRC 사양
'GDLG' resID Palette [| frameFlag | growFlag | captionFlag | closeFlag] x y dx dy "dlgTitle" { dialogItem1 ... dialogItemi ... dialogItemn }
여기서 resID는 팔레트 다이얼로그의 리소스 ID입니다. Palette 키워드는 OR (|) 연산자를 이용하여 선택적으로 growFlag, captionFlag, closeFlag와 결합될 수 있습니다. 이 flag들이 생략되면 상단 캡션과 닫힘 상자 없는 일반 프레임을 사용하여 성장할 수 없는 다이얼로그가 작성됩니다. x와 y는 다이얼로그의 왼쪽 상단 모서리의 픽셀 좌표이고, dx와 dy는 다이얼로그의 폭과 높이의 픽셀 수입니다. dlgTitle은 다이얼로그의 제목을 정의합니다. dialogItemi (1 <= i <= n)은 대화 항목들의 n 조각들을 지정합니다. 다양한 다이얼로그 항목들의 GRC 사양은 DG 다이얼로그 항목들 페이지를 보십시오.
frameFlag의 가능한 값은 다음과 같습니다:
-
값 의미 normalFrame 다이얼로그가 일반 다이얼로그 프레임을 갖고 있습니다. thickFrame 다이얼로그가 두꺼운 프레임을 갖고 있습니다. noFrame 다이얼로그가 프레임이 없습니다.
growFlag의 가능한 값은 다음과 같습니다:
-
값 의미 noGrow 다이얼로그의 크기를 바꿀 수 없습니다. hGrow 다이얼로그의 크기를 가로 방향으로 바꿀 수 있습니다. vGrow 다이얼로그의 크기를 세로 방향으로 바꿀 수 있습니다. grow 다이얼로그의 크기를 가로/세로 양방향으로 바꿀 수 있습니다.
captionFlag의 가능한 값은 다음과 같습니다:
-
값 의미 topCaption 캡션이 다이얼로그의 위에 있습니다. leftCaption 캡션이 다이얼로그의 왼쪽에 있습니다. noCaption 다이얼로그의 캡션이 없습니다.
closeFlag의 가능한 값은 다음과 같습니다:
-
값 의미 noClose 다이얼로그의 캡션에 닫힘 박스가 없습니다. close 다이얼로그의 캡션에 닫힘 박스가 있습니다.
도움말 GRC 사양
설명
DGModelessInit은 팔레트 다이얼로그가 생성되는 즉시 리턴합니다. 만약 팔레트 다이얼로그가 0 show 파라미터로 생성된 경우, DGModelessInit은 리턴되기 전에 다이얼로그를 표시하지 않습니다. 나중에 DGShowModelessDialog 또는 DGHideModelessDialog 함수를 사용하여 다이얼로그를 표시하거나 숨길 수 있습니다. 팔레트 다이얼로그가 보이는지 숨겨져 있는지 여부를 테스트하려면 DGIsModelessDialogVisible을 호출하십시오.
show 파라미터가 1인 경우, DGModelessInit은 팔레트 다이얼로그를 표시할 뿐만 아니라 활성화합니다. 사용자 또는 애플리케이션은 언제든지 활성 다이얼로그를 변경할 수 있습니다. DGActivateModelessDialog를 사용하여 프로그램 코드에서 팔레트 다이얼로그를 활성화합니다. 팔레트 다이얼로그가 활성화되면, Modeless 및 팔레트 다이얼로그의 대기열에 있는 위치도 변경됩니다. (이 위치는 다이얼로그의 Z 순서로도 알려져 있음) 만약 팔레트가 활성화되면 가장 앞쪽 다이얼로그가 됩니다. 팔레트 다이얼로그는 항상 Z 순서로 Modeless 다이얼로그 앞에 있습니다.
DGCreatePalette, DGCreateBlankPalette, DGCreateDockablePalette 함수들은 이벤트 처리를 시작하지 않으며 다이얼로그를 표시하지 않습니다.
DGModelessHandler는 애플리케이션의 열린 Modeless 및 팔레트 다이얼로그에 대한 다이얼로그 관련 메시지들을 처리합니다. 함수가 애플리케이션의 메인 메시지 루프에서 호출되면, 먼저 가져온 시스템 지정 메시지가 다이얼로그 메시지인지 여부를 테스트합니다. 만약 메시지가 다이얼로그를 참조하지 않으면 DGModelessHandler는 0을 리턴하고 메시지는 애플리케이션에 의해 처리되어야 합니다. 그러나 메시지가 다이얼로그를 참조하는 경우, DGModelessHandler는 그것을 DG 메시지로 변환하여 적절한 Modeless 또는 팔레트 다이얼로그 콜백 함수로 보냅니다. 메시지가 콜백 함수에서 처리되자마자 DGModelessHandler는 1을 리턴합니다. 이 경우 메시지는 추가 처리가 필요하지 않으며 다음 메시지를 계속 기다려야 합니다.
모든 Modeless 및 팔레트 다이얼로그에는 소위 상태 flag가 있습니다. 만약 이 플래그가 DG_DS_NORMAL이고 DGModelessHandler의 onlyUpdate 파라미터 값이 0이면 다이얼로그에 대해 모든 메시지들이 처리됩니다. 그러나 onlyUpdate가 1인 경우 DGModelessHandler에서 업데이트 메시지들만 처리됩니다. 만약 상태 flag가 DG_DS_ENABLED로 설정된 경우 모든 메시지는 onlyUpdate 값과 독립적으로 처리됩니다. 만약 상태 flag가 DG_DS_DISABLED로 설정된 경우 업데이트 메시지들만 처리됩니다. 상태 flag의 값은 각각 DGSetModelessDialogStatus와 DGGetModelessDialogStatus로 각각 설정하고 가져올 수 있습니다.
다이얼로그 상태 flag의 사용법은 다음 예제에서 설명할 수 있습니다. 애플리케이션이 시간 소모 계산과 같은 긴 프로세스를 시작한다고 가정합니다. 이 경우 계산이 끝날 때까지 Step 버튼을 사용하는 프로세스 표시기 다이얼로그를 표시하는 것이 좋습니다. 이 기간 동안 시스템 지정 메시지들을 처리할 때 값 1의 onlyUpdate를 가진 DGModelessHandler 함수를 호출해야 합니다. 이를 통해 DG_DS_NORMAL 상태의 Modeless 다이얼로그가 업데이트 메시지 이외의 메시지를 처리하지 않도록 합니다. (이렇게 하면 사용자 액션에 응답하지 않음) 사용자가 Stop 버튼을 누르고 프로세스를 취소할 수 있도록 프로세스 표시기 다이얼로그의 상태를 DG_DS_ENABLED로 설정해야 합니다.
팔레트 다이얼로그는 DGModelessClose 함수 또는 사용자 작업으로 닫을 수 있습니다. 사용자는 보통 Cancel 버튼 또는 닫기 상자를 클릭하여 팔레트 다이얼로그를 닫습니다. 다이얼로그 콜백 함수는 DG_CANCEL 또는 DG_CLOSEBOX 값이 들어 있는 item 파라미터로 DG_MSG_CLICK 메시지를 수신합니다. 다이얼로그는 콜백 함수가 DG_MSG_CLICK 메시지에 대한 0이 아닌 값(일반적으로 DG_CANCEL 또는 DG_CLOSEBOX)을 리턴하는 경우에만 닫힙니다. 만약 사용자가 이러한 방식으로 일부 Modeless 그리고/또는 팔레트 다이얼로그를 닫지 않으면, 애플리케이션은 DGModelessClose 함수를 사용하여 종료하기 전에 이 다이얼로그를 닫아야 합니다.
애플리케이션은 이벤트 처리가 중지된 후 DGDestroyPalette 함수를 사용하여 다이얼로그를 파괴할 수 있습니다. DGEndProcessEvents 함수를 사용하여 이벤트 처리를 중지합니다.
팔레트 다이얼로그는 Modal 다이얼로그가 하는 것처럼 애플리케이션에 값을 리턴할 수 없지만, 다이얼로그 콜백 함수는 DGSendMessage 함수를 사용하여 다른 Modeless 및 팔레트 다이얼로그로 정보를 보낼 수 있습니다.
참고사항
다이얼로그 타입, 콜백 함수, DG 메시지, 다이얼로그 항목 타입, 다이얼로그 키보드 인터페이스
DGActivateModelessDialog, DGAppendDialogItem, DGCreateBlankPalette, DGCreateBlankDockablePalette, DGCreatePalette, DGCreateDockablePalette, DGDestroyPalette, DGEndProcessEvents, DGDisableToolTips, DGEnableToolTips, DGGetModelessDialogStatus, DGHideModelessDialog, DGIsModelessDialogVisible, DGModelessClose, DGModelessHandler, DGModelessInit, DGSendMessage, DGSetItemHelpIndex, DGSetModelessDialogStatus, DGShowModelessDialog
다이얼로그 도움말의 GRC 사양