Graphisoft®

Dialog ManagerVersion: 2.0

유저 아이템

유저 아이템은 다음 이중 성격을 가진 DG의 특수 타입 다이얼로그 항목입니다:

업데이트가 필요할 때마다 유저 아이템을 그리는 것은 애플리케이션의 책임입니다. 기본적으로 유저 아이템은 프레임 없이 그리지만 3가지 타입의 프레임을 가질 수 있습니다: static edge, client edge and modal frame. 다음 이미지는 client edge 프레임을 가진 유저 아이템을 보여줍니다.

     

항목 타입

DG_ITM_USERITEM

서브 타입

서브 타입 의미
DG_UT_NORMALUPDATE 유저 아이템은 DG_UUT_NORMAL 업데이트 타입만 사용하여 DG_MSG_UPDATE 메시지를 수신합니다.
DG_UT_PARTIALUPDATE 유저 아이템은 DG_UUT_NORMALDG_UUT_PARTIAL 업데이터 타입을 사용하여 DG_MSG_UPDATE 메시지를 수신합니다.

프레임 타입

프레임 타입 의미
DG_FT_NONE 프레임 없이 그려집니다.
DG_FT_STATIC 함몰 모서리를 가진 얇은 3차원 경계입니다.   
DG_FT_CLIENT 함몰 모서리를 가진 두꺼운 3차원 경계입니다.   
DG_FT_MODAL 돌출 모서리를 가진 두꺼운 3차원 경계입니다.   

GRC 사양

    UserItem    x  y  dx  dy  [PartialUpdate]  [frameType]

여기서 xy는 유저 아이템의 좌상단 모서리의 픽셀 좌표이고, dxdy는 항목의 폭과 높이의 픽셀 크기입니다. 부분 업데이트를 사용하기 위해 선택적 PartialUpdate flag를 세트합니다. 만약 선택적 frameType flag가 생략되면, 유저 아이템은 프레임 없이 그려집니다.

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

의미
Default DG_FT_NONE 프레임 타입이 세트됩니다.
StaticEdge DG_FT_STATIC 프레임 타입이 세트됩니다.
ClientEdge DG_FT_CLIENT 프레임 타입이 세트됩니다.
ModalFrame DG_FT_MODAL 프레임 타입이 세트됩니다.

메시지

메시지 의미
DG_MSG_CLICK 유저 아이템을 클릭했습니다. 메시지 데이터 파라미터는 DGMessageData로 캐스팅된 DGUserMsgData structure에 대한 포인터입니다. 이 structure에는 사용자 작업에 대한 정보가 들어 있습니다.
DG_MSG_DOUBLECLICK 유저 아이템을 더블 클릭했습니다. 메시지 데이터 파라미터는 DGMessageData로 캐스팅된 DGUserMsgData structure에 대한 포인터입니다. 이 structure에는 사용자 작업에 대한 정보가 들어 있습니다.
DG_MSG_MOUSEMOVE 마우스가 유저 아이템 위에 있습니다. 메시지 데이터 파라미터는 DGMessageData로 캐스팅된 DGUserMsgData structure에 대한 포인터입니다. 이 structure에는 사용자 작업에 대한 정보가 들어 있습니다.
DG_MSG_UPDATE 유저 아이템은 완전히 혹은 부분적으로 다시 그려져야 합니다. 사용자 업데이트 데이터 파라미터는 DGMessageData로 캐스팅된 DGUserUpdateData structure에 대한 포인터입니다. 이 structure는 애플리케이션이 유저 아이템을 업데이트하기 위해 필요한 모든 정보를 포함하고 있습니다.
DG_MSG_DRAGDROP 드래그 앤 드롭 관련 이벤트가 발생했습니다. 유저 아이템들은 드래그의 소스나 대상 둘 다 될 수 있습니다.

설명

유저 아이템은 업데이트될 때마다 DG_MSG_UPDATE 메시지를 수신합니다. 만약 유저 아이템의 업데이트 프로세스에 시간이 너무 많이 걸리면, 해당 항목에 대한 부분 업데이트를 활성화하는 것이 좋습니다. 만약 부분 업데이트가 활성화되면, 일반 업데이트 메시지 외에도 DG는 부분 업데이트 메시지도 자동으로 보내거나 다음 경우에 애플리케이션의 요구사항에 대해 보냅니다:

다이얼로그 콜백 함수DG_MSG_UPDATE 메시지를 수신할 때, msgData 파라미터는 애플리케이션이 유저 아이템을 업데이트하는 데 필요한 모든 정보를 포함하는 DGUserUpdateData structure에 대한 포인터입니다. 메시지 타입은 DG_UUT_NORMAL, DG_UUT_PARTIAL, DG_UUT_INUPDATE 값 중 하나가 될 수 있습니다. 만약 유저 아이템을 완전히 다시 칠해야 하는 경우, DG는 DG_UUT_NORMAL 타입으로 업데이트 메시지를 보냅니다. 만약 유저 아이템을 부분적으로 업데이트해야 하고 부분 업데이트가 활성화되면 DG_UUT_PARTIAL 타입 업데이트 메시지가 전송됩니다. 일반적으로 애플리케이션은 배경을 지우거나 프레임을 그리거나 부분 업데이트 메시지를 수신할 때 일부 기본 그리기를 수행합니다. DG_UUT_INUPDATE 타입 메시지는 특별한 경우에 전송됩니다: 만약 업데이트 함수가 오래 걸리고 컨트롤이 이벤트 루프로 실행되도록 놔두면, 업데이트 프로세스 중에 다른 업데이트 이벤트가 생성됩니다. (예를 들면 작업 전환 때문에) 이 경우, 애플리케이션은 중단된 업데이트 프로세스의 업데이트 영역으로부터 새로운 무효 영역을 클리핑할 수 있습니다.

업데이트 메시지들을 보내기 전에 DG는 기본 배경색을 가진 유저 아이템의 무효화된 부분을 지웁니다. 이 색상은 DGUserSetBackgroundColorDGUserGetBackgroundColor 함수로 각각 설정하고 가져올 수 있습니다.

모든 업데이트 메시지에 의해 현재 무효 영역이 메시지 데이터로 전송됩니다. 만약 유저 아이템에 대해 부분 업데이트가 활성화되면, 부분 업데이트 메시지와 함께 전송된 영역은 DG에 의해 수집되고, 부분 업데이트가 종료되면 그것들의 조합은 일반 업데이트 메시지와 함께 전송됩니다. 업데이트 영역 핸들은 DGUserUpdateData structure의 updateRgn 멤버에 리턴됩니다. 그것은 Windows에서 HRGN으로, Macintosh에서는 항상 NULL로 캐스팅되어야 합니다.

애플리케이션은 유저 아이템들에 시스템 종속 드로잉 함수들을 사용할 수 있습니다. 만약 DGUserUpdateData structure이면, 그리기 컨텍스트가 drawContext 멤버에 전송됩니다. 이 멤버는 Windows의 HDC와 Macintosh의 CGContextRef로 캐스팅되어야 합니다. 그리기 컨텍스트의 원점을 유저 아이템의 왼쪽 상단 모서리로 설정합니다.

유저 아이템에 대한 부분 업데이트는 GRC 스크립트에서 활성화할 수 있습니다. 기본 유저 아이템 업데이트 메커니즘을 제어하려면 DGEnableNormalUpdateDGDisableNormalUpdate 함수를 사용합니다.

만약 유저 아이템을 즉시 다시 그려야 한다면 DGUserRedrawItem 함수를 displayImmediately = true 파라미터와 함께 사용합니다. 그렇지 않으면 DGUserRedrawItem 함수를 displayImmediately = false 파라미터와 함께 사용할 수 있습니다.

만약 유저 아이템에 프레임이 있는 경우, 프레임은 업데이트 영역에서 잘려나갑니다. DGUserGetClientRect 함수를 사용하여 애플리케이션이 그릴 수 있는 직사각형을 가져옵니다. 만약 유저 아이템에 프레임이 없는 경우 DGUserGetClientRectDGGetItemRect는 동일한 값들을 가져옵니다.

유저 아이템은 커서가 그것들 위로 이동할 때 DG_MSG_MOUSEMOVE 메시지를 수신할 수 있습니다. 기본적으로 DG는 DG_MSG_MOUSEMOVE 메시지를 유저 아이템으로 전송하지 않습니다. 만약 애플리케이션이 이 메시지를 필요로 하는 경우, 유저 아이템에 대해 DG_MSG_MOUSEMOVE를 3번째 파라미터로 한 DGEnableMessage를 호출해야 합니다. 커서를 커스텀 형태로 변경하려면, DG는 유저 아이템 위에서 기본 커서로 설정하지 못하도록 DG_MSG_MOUSEMOVE 메시지를 처리할 때 그것이 리턴되어야 합니다. 만약 0이 리턴되면 DG는 기본 화살표 커서를 설정합니다.

요구사항

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

참고사항

다이얼로그 항목 타입, 아이콘, 그림, 정적 텍스트, 유저 컨트롤
DGUserRedrawItem, DGEnableNormalUpdate, DGDisableNormalUpdate, DGEnableMessage
DGUserUpdateData, DGUserMsgData
콜백 함수, DG_MSG_CLICK, DG_MSG_DOUBLECLICK, DG_MSG_MOUSEMOVE, DG_MSG_UPDATE