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_PetPaletteTypestructure를 사용하고 있습니다.
다른 공통 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 함수