Graphisoft®

Dialog ManagerVersion: 2.0

Modeless 다이얼로그

사용자가 다른 다이얼로그 또는 창에서 작업하는 동안 Modeless 다이얼로그를 사용하여 정보 또는 옵션을 표시할 수 있습니다. Modeless 다이얼로그에는 사용자가 텍스트를 입력하거나 옵션을 선택하거나 직접 작업을 수행할 수 있는 다이얼로그 항목들이 포함되어 있습니다. Modeless 다이얼로그는 사용자가 정보를 제공하고 다이얼로그를 닫지 않고 이전 작업으로 돌아갈 수 있게 해줍니다. Modeless 다이얼로그를 사용하는 애플리케이션들은 일반적으로 사용자가 메뉴 항목을 선택할 때 Modeless 다이얼로그를 만들고 애플리케이션이 실행되는 동안 또는 사용자가 다이얼로그를 명시적으로 닫을 때까지는 Modeless 다이얼로그를 계속 표시합니다.

Modeless 다이얼로그를 만드는 2가지 방법이 있습니다. 리소스 스크립트에 정의된 Modeless 다이얼로그를 만들려면 애플리케이션이 다이얼로그의 크기, 스타일 및 내용을 설명하기 위해 GRC 파일에 GDLG 리소스를 제공해야 합니다. 또한 애플리케이션은 다이얼로그 콜백 함수를 제공하여 다이얼로그 관련 작업들을 수행해야 합니다. 애플리케이션은 DGModelessInit 또는 DGCreateModelessDialog 함수를 사용하여 다이얼로그를 만들 수 있습니다. 이 함수들은 다이얼로그의 GDLG 리소스를 로드하고 다이얼로그 창과 리소스 사양과 일치하는 다이얼로그 항목들을 만듭니다. 이 애플리케이션은 DGCreateBlankModelessDialog 함수도 사용할 수 있습니다. 이 함수는 리소스를 사용하지 않습니다. 프로그램 코드에서 빈 Modeless 다이얼로그를 만듭니다. 애플리케이션은 생성 방법과는 별개로 DGAppendDialogItem 함수를 사용하여 다이얼로그에 다이얼로그 항목을 추가할 수 있습니다.

Modeless 다이얼로그가 생성된 후, 애플리케이션은 다이얼로그와 통신하여 입력 메시지를 가져오거나 발송할 책임이 있습니다. 대부분의 애플리케이션들은 이에 대해 메인 메시지 루프를 사용합니다. 애플리케이션은 메인 메시지 루프에서 시스템-지정 메시지를 받은 직후 DGModelessHandler 함수를 호출해야 합니다. DGModelessHandler는 시스템-지정 메시지를 DG 메시지로 변환하여 적절한 Modeless 또는 팔레트 다이얼로그의 다이얼로그 콜백 함수로 보냅니다. DGModelessHandler는 또한 Modeless 다이얼로그에 대한 일반적인 다이얼로그 키보드 인터페이스를 제공합니다.

Modeless 다이얼로그는 다이얼로그 항목들에 대해 문맥에 맞는 도움말을 제공할 수 있습니다. 다이얼로그 항목에는 2가지 타입의 도움말 정보가 있을 수 있습니다: 툴팁과 별도의 세부 정보에 대한 앵커. Macintosh에서는 매킨토시 시스템 도움말 메뉴를 통해 이 기능을 사용할 수 있는 경우 짧은 기능이 풍선 도움말에 표시됩니다. Windows에서 일반적인 툴팁은 짧은 항목 도움말을 표시하는 역할을 합니다. 툴팁은 활성화 되어 있을 때에만 표시됩니다. DG가 초기화되면 툴팁이 자동으로 활성화됩니다. DGDisableToolTips를 사용하여 툴팁 표시를 비활성화 하거나, DGEnableToolTips으로 다시 활성화할 수 있습니다. 항목 도움말의 세부 버전은 키보드 포커스를 포커스 가능한 다이얼로그 항목으로 설정한 다음, Windows의 [F1] 키 또는 Macintosh의 [Help] 키를 누르거나 항목의 마우스 오른쪽 버튼을 클릭하여 호출할 수 있다.

툴팁과 도움말 앵커 문자열은 DLGH 리소스에 정의되어 있습니다. DLGH 리소스의 리소스 ID는 다이얼로그의 GDLG 리소스의 리소스 ID와 같아야 합니다.

Modeless 다이얼로그는 항상 다이얼로그의 제목과 함께 두꺼운 상단 캡션을 가지고 있습니다. Macintosh에서는 오른쪽에 붕괴 상자가 있고, 선택적으로 캡션 왼쪽에 닫기 상자가 있습니다. Windows에서 캡션에는 왼쪽에 애플리케이션의 아이콘이 있는 시스템 메뉴와 선택적으로 닫기 상자 그리고/또는 오른쪽에 최소화 버튼이 있습니다. 만약 다이얼로그가 성장할 수 있는 경우 Macintosh에서는 다이얼로그의 오른쪽 하단 모서리에 작은 크기 상자가 나타납니다. Windows에서 두꺼운 프레임은 사용자가 다이얼로그의 크기를 조정할 수 있음을 나타냅니다.

    

다이얼로그 GRC 사양

    'GDLG'  resID  Modeless [| frameFlag | growFlag | captionFlag | closeFlag | minimizeFlag | maximizeFlag]  x  y  dx  dy  "dlgTitle" {
      dialogItem1
          ...
      dialogItemi
          ...
      dialogItemn
    }

여기서 resID는 Modeless 다이얼로그의 리소스 ID입니다. Modeless 키워드는 옵션으로 frameFlag, growFlag, captionFlag, closeFlag, minimizeFlag, maximizeFlagOR (|) 연산자를 사용하여 조합할 수 있습니다. 만약 이러한 flag들이 생략되면, 상단 캡션과 닫기 상자가 없는 일반 프레임으로 성장할 수 없는 다이얼로그가 만들어지고 최소화 및 최대화 버튼이 없습니다. xy는 다이얼로그의 왼쪽 상단 모서리의 픽셀 좌표이고, dxdy는 다이얼로그의 폭과 높이 픽셀 크기입니다. dlgTitle은 다이얼로그의 제목을 정의합니다. dialogItemi (1 <= i <= n)는 다이얼로그 항목들의 n 조각을 지정합니다. 다양한 다이얼로그 항목들의 GRC 사양에 대해서는 DG 다이얼로그 항목 페이지를 보십시오.

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

의미
normalFrame 다이얼로그가 일반 다이얼로그 프레임을 갖고 있습니다.
thickFrame 다이얼로그가 두꺼운 프레임을 갖고 있습니다.
noFrame 다이얼로그가 프레임이 없습니다.

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

의미
noGrow 다이얼로그의 크기를 바꿀 수 없습니다.
hGrow 다이얼로그의 크기를 가로 방향으로 바꿀 수 있습니다.
vGrow 다이얼로그의 크기를 세로 방향으로 바꿀 수 있습니다.
grow 다이얼로그의 크기를 가로/세로 방향으로 모두 바꿀 수 있습니다.

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

의미
noCaption 다이얼로그의 캡션이 없습니다.

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

의미
noClose 다이얼로그의 캡션에 닫기 박스가 없습니다.
close 다이얼로그의 캡션에 닫기 박스가 있습니다.

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

의미
noMinimize 다이얼로그의 캡션에 최소화 버튼이 없습니다.
minimize 다이얼로그의 캡션에 최소화 버튼이 있습니다.

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

의미
noMaximize 다이얼로그의 캡션에 최대화 버튼이 없습니다.
maximize 다이얼로그의 캡션에 최대화 버튼이 있습니다.

도움말 GRC 사양

다이얼로그 도움말의 GRC 사양

설명

DGModelessInit은 Modeless 다이얼로그가 생성되는 즉시 리턴됩니다. show 파라미터를 0으로 설정하여 Modeless 다이얼로그가 생성된 경우, DGModelessInit은 리턴하기 전까지 다이얼로그를 표시하지 않습니다. 나중에 DGShowModelessDialog 또는 DGHideModelessDialog 함수를 사용하여 각각 다이얼로그를 표시하거나 숨길 수 있습니다. Modeless 다이얼로그가 표시되어 있는지 여부를 테스트하려면 DGIsModelessDialogVisible을 호출하십시오.

만약 show 파라미터가 1인 경우, DGModelessInit은 Modeless 다이얼로그를 표시할 뿐만 아니라 그것을 활성화합니다. 사용자 또는 애플리케이션은 언제든지 활성 다이얼로그를 변경할 수 있습니다. DGActivateModelessDialog를 사용하여 프로그램 코드를 통해 Modeless 다이얼로그를 활성화합니다. Modeless 다이얼로그가 활성화되면 Modeless 다이얼로그와 팔레트 다이얼로그의 큐에서의 위치도 변경됩니다. (이 위치는 다이얼로그의 Z 순서로도 알려져 있습니다) Modeless 다이얼로그를 활성화하면 다른 모든 Modeless 다이얼로그보다 위에 올라오게 됩니다. 만약 팔레트가 활성화되면 가장 앞쪽 다이얼로그가 됩니다. 팔레트 다이얼로그는 Z 순서로 항상 Modeless 다이얼로그 앞에 있습니다.

DGCreateModelessDialogDGCreateBlankModelessDialog 함수들은 이벤트 처리를 시작하지 않으며 대화 상자를 표시하지 않습니다.

DGModelessHandler는 애플리케이션의 모든 열린 Modeless 및 팔레트 다이얼로그에 대한 다이얼로그 관련 메시지를 처리합니다. 함수가 애플리케이션의 메인 메시지 루프에서 호출되면, 먼저 가져온 시스템-지정 메시지가 다이얼로그 메시지인지 여부를 테스트합니다. 만약 메시지가 다이얼로그를 참조하지 않으면 DGModelessHandler는 0을 리턴하고 메시지는 애플리케이션에 의해 처리되어야 합니다. 그러나 메시지가 다이얼로그를 참조하는 경우 DGModelessHandler는 DG 메시지로 변환하여 적절한 Modeless 또는 팔레트 다이얼로그 콜백 함수로 보냅니다. 메시지가 콜백 함수에서 처리되자마자 DGModelessHandler는 1을 리턴합니다. 이 경우 메시지는 추가 처리가 필요하지 않으며 다음 메시지를 기다려야 합니다.

모든 Modeless 및 팔레트 다이얼로그에는 소위 상태 flag가 있습니다. 이 flag가 DG_DS_NORMAL이고 DGModelessHandleronlyUpdate 파라미터 값이 0이면, 다이얼로그에 대해 모든 메시지가 처리된다. 그러나 onlyUpdate가 1인 경우, DGModelessHandler에서 업데이트 메시지만 처리됩니다. 만약 상태 flag가 DG_DS_ENABLED로 설정된 경우, 모든 메시지는 onlyUpdate 값과 독립적으로 처리됩니다. 만약 상태 flag가 DG_DS_DISABLED로 설정된 경우, 업데이트 메시지만 처리됩니다. 상태 flag의 값은 각각 DGSetModelessDialogStatusDGGetModelessDialogStatus에 의해 각각 설정되고 가져올 수 있습니다.

다이얼로그 상태 flag의 사용법은 다음 예제에 설명되어 있습니다. 애플리케이션이 시간 소모 계산과 같은 긴 프로세스를 시작한다고 가정합니다. 이 경우 계산이 끝날 때까지 Stop 버튼이 있는 프로세스 표시기 다이얼로그를 표시하는 것이 좋습니다. 이 기간 동안 시스템-지정 메시지를 처리할 때 onlyUpdate의 값을 1로 DGModelessHandler를 호출해야 합니다. 이를 통해 DG_DS_NORMAL 상태의 Modeless 다이얼로그가 업데이트 메시지 이외의 메시지를 처리하지 않도록 합니다. (이렇게 하면 사용자 액션에 응답하지 않습니다) 사용자가 Stop 버튼을 누르고 프로세스를 취소할 수 있도록 프로세스 표시기 다이얼로그의 상태를 DG_DS_ENABLED로 설정해야 합니다.

Modeless 다이얼로그는 DGModelessClose 함수 또는 사용자 작업으로 닫을 수 있습니다. 사용자는 보통 Cancel 버튼 또는 닫기 상자를 클릭하여 Modeless 다이얼로그를 닫습니다. 다이얼로그 콜백 함수는 DG_CANCEL 또는 DG_CLOSEBOX 값을 가진 DG_MSG_CLICK 메시지를 item 파라미터로 받습니다. 다이얼로그는 만약 콜백 함수가 DG_MSG_CLICK 메시지에 대하여 0이 아닌 값(일반적으로 DG_CANCEL 또는 DG_CLOSEBOX)을 리턴하는 경우에만 닫힙니다. 만약 사용자가 이러한 방식으로 일부 Modeless 그리고/또는 팔레트 다이얼로그를 닫지 않으면, 애플리케이션은 DGModelessClose 함수를 사용하여 종료하기 전에 이 다이얼로그를 닫아야 한다.

애플리케이션은 이벤트 처리가 중지된 후 DGDestroyModelessDialog 함수를 사용하여 다이얼로그를 파괴할 수 있습니다. DGEndProcessEvents 함수를 사용하여 이벤트 처리를 중지합니다.

Modeless 다이얼로그는 Modal 다이얼로그처럼 애플리케이션에게 값을 리턴할 수 없지만, 다이얼로그 콜백 함수는 DGSendMessage 함수를 사용하여 다른 Modeless 및 팔레트 다이얼로그로 정보를 보낼 수 있습니다.

참고사항

다이얼로그 타입, 콜백 함수, DG 메시지, 다이얼로그 항목 타입, 다이얼로그 키보드 인터페이스
DGActivateModelessDialog, DGAppendDialogItem, DGCreateModelessDialog, DGCreateBlankModelessDialog, DGEndProcessEvents, DGGetModelessDialogStatus, DGHideModelessDialog, DGIsModelessDialogVisible, DGModelessClose, DGModelessHandler, DGModelessInit, DGSendMessage, DGSetItemHelpIndex, DGSetModelessDialogStatus, DGShowModelessDialog
다이얼로그 도움말의 GRC 사양