APIIo_PetPaletteID
애드온으로부터 사용자 입력을 수행하기 위한 펫 팔레트를 엽니다.
GSErrCode ACAPI_Interface ( APIIo_PetPaletteID, API_PetPaletteType* petPaletteInfo, APIPetPaletteCallBackProc* petPaletteProc );
파라미터
- petPaletteInfo
- [in] 펫 팔레트를 식별합니다.
- petPaletteProc
- [in] 팔레트를 위한 콜백 프로시저입니다.
리턴 값
NoError
- 함수가 성공적으로 완료되었습니다.
APIERR_BADPARS
- 파라미터들 중 하나 또는 둘이
NULL
입니다. APIERR_NESTING
- 입력이 이미 시작되었을 때에는 펫 팔레트등를 열 수 없습니다.
APIERR_BADWINDOW
- 드로잉 창들 위에서만 펫 팔레트들을 열 수 있습니다.
APIERR_BADID
-
다음 오류들 중 하나가 발생할 수 있습니다:
- petIconIDsHdl이 NULL입니다.
- petIconIDsHdl이
nCols * nRows
로 표시된 것보다 더 많거나 더 적은 ID들을 포함하고 있습니다. - 제공된
petPaletteID
가 빌트인 ArchiCAD 펫 팔레트 식별자와 충돌합니다. 식별자를 위한 예전pictID
를 선택하는 것이 좋습니다. - 제공된
petPaletteID
가 실제 펫 팔레트와 다른 또 다른 펫 팔레트와 충돌합니다: 항목들이 더 많거나 적을 수도 있고, 항목들의 개수가 같을 수도 있지만, 적어도 하나 이상이 서로 다른 아이콘 리소스 식별자를 가지고 있습니다. - 애드온이 예전
API_PetPaletteType
structure를 사용하고 있습니다.
다른 공통 API 오류들에 대해서는 API 오류 문서를 보십시오.
설명
펫 팔레트는 개별적인 'GICN' 아이콘 리소스들로 구성되어 있습니다. (펫 항목들)
팔레트 내의 각 펫 항목은 22 픽셀 너비와 22 픽셀 높이로 간주됩니다.
더 큰 아이콘들은 잘려서 나오게 됩니다.
iconIDs는 short
수들로 이루어진 GSHandle
안에 전달되어야 합니다.
ArchiCAD는 이 아이콘들로 팔레트를 만들어냅니다.
이외에도 서로 다른 각각의 펫 팔레트는 유일한 식별자를 갖고 있어야 합니다.
식별자를 위해 예전 pictID
를 선택하는 것이 좋습니다.
펫 팔레트는 툴팁(노란 바) 문자열들과 도움말 앵커들(도움말 메커니즘이 함께 로드됨)을 가질 수 있습니다.
문자열들은 'DHLP' 리소스 안에 쌍들로 배치되어야 합니다.
'DHLP' 리소스에서 모든 툴팁과 도움말 앵커 쌍은 팔레트의 해당 펫 항목에 속합니다.
이 리소스는 API 리소스 모듈로 컴파일되어야 하며, 그것들의 식별자는 API_PetPaletteType structure로 전달될 수 있습니다.
API는 이 리소스만 검색하게 됩니다. 그리고 도움말 객체를 얻고 액션을 취하기 위해 펫 팔레트의 상대적인 인덱스로 이것을 인덱싱합니다:
이것은 툴팁 문자열을 표시하거나 앵커를 애드온에 의해 구성된 도움말 엔진에 대한 파라미터들로서 전달하게 될 것입니다.
만약 애드온이 이러한 기회들을 얻기를 원한다면, Dialog Manager 모듈의 DGRegisterAdditionalHelpLocation
함수로 자체 도움말 엔진의 위치를 세트해야 합니다.
이것은 Initialize
단계에서 이루어질 수 있으며, FreeData
단계에서 DGUnregisterAdditionalHelpLocation
을 호출하여 도움말 위치를 등록 해제해야 합니다.
developerId와 localId는 당신의 32500 'MDID' 리소스에 저장된 MDID입니다.
팔레트 콜백 프로시저는 펫 팔레트의 실제 값과 함께 호출됩니다. (APIPetPaletteCallBackProc를 보십시오)
예제
static GSErrCode __ACENV_CALL PetPaletteCallBack (short actValue) { GSErrCode err = NoError; short inputMode = actValue + 1; switch (inputMode) { case 1: err = Do_InputAPoint (); break; case 2: err = Do_InputALine (); break; case 3: err = Do_InputAnArc (); break; default: err = APIERR_GENERAL; break; } return err; } static GSErrCode Do_InputWithPetPalette (void) { GSErrCode err; API_PetPaletteType petPaletteInfo; short** petItemIdsHdl; short petItemIds[5] = { 32201, 32202, 32203, 32204, 32205 }; BNZeroMemory (&petPaletteInfo, sizeof (API_PetPaletteType)); // 펫 항목 아이콘들의 리소스 ID들을 퐇마하는 핸들 생성하기 short nIcons = sizeof (petItemIds) / sizeof (short); petItemIdsHdl = (short**) BMhAll (nIcons * sizeof (short)); for (short i = 0; i < nIcons; i++) (*petItemIdsHdl)[i] = petItemIds[i]; // petPaletteInfo 채우기 petPaletteInfo.petPaletteID = 32200; petPaletteInfo.nCols = 5; petPaletteInfo.nRows = 1; petPaletteInfo.value = 0; petPaletteInfo.grayBits = 0; petPaletteInfo.petIconIDsHdl = petItemIdsHdl; petPaletteInfo.dhlpResourceID = 32200; err = ACAPI_Interface (APIIo_PetPaletteID, &petPaletteInfo, PetPaletteCallBack); BMhKill ((GSHandle *) &petItemIdsHdl); return; } GSErrCode __ACENV_CALL Initialize (void) { IO::Location helpLocation; ACAPI_GetOwnLocation (&helpLocation); helpLocation.DeleteLastLocalName (); IO::Path helpPath; helpLoc.ToDisplayText (&helpPath); DGRegisterAdditionalHelpLocation (developerId, localId, (const char*) helpPath); return; } GSErrCode __ACENV_CALL FreeData (void) { DGUnregisterAdditionalHelpLocation (developerId, localId); return; }
Interface Functions 예제 애드온도 연구해 보시기 바랍니다.
요구사항
- 버전: API 5.1 또는 이후
- 헤더: APIdefs_Interface.h
참고사항
API_PetPaletteType, APIPetPaletteCallBackProc
ACAPI_Interface, API 함수