IShellFolder::CompareIDs 메서드(shobjidl_core.h)
항목 식별자 목록이 지정된 경우 두 파일 개체 또는 폴더의 상대 순서를 결정합니다.
구문
HRESULT CompareIDs(
[in] LPARAM lParam,
[in] PCUIDLIST_RELATIVE pidl1,
[in] PCUIDLIST_RELATIVE pidl2
);
매개 변수
[in] lParam
형식: LPARAM
비교를 수행하는 방법을 지정하는 값입니다.
lParam의 하위 16비트는 정렬 규칙을 정의합니다. 대부분의 애플리케이션은 정렬 규칙을 기본값 0으로 설정하여 두 항목을 이름으로 비교해야 함을 나타냅니다. 시스템은 다른 정렬 규칙을 정의하지 않습니다. 일부 폴더 개체를 사용하면 호출 애플리케이션이 lParam 의 하위 16비트를 사용하여 폴더별 정렬 규칙을 지정할 수 있습니다. 규칙 및 관련 lParam 값은 폴더에 의해 정의됩니다.
시스템 폴더 뷰 개체가 IShellFolder::CompareIDs를 호출하는 경우 lParam 의 하위 16비트는 비교에 사용할 열을 지정하는 데 사용됩니다.
lParam의 상위 16비트는 정렬 규칙을 수정하는 플래그에 사용됩니다. 시스템은 현재 이러한 한정자 플래그를 정의합니다.
SHCIDS_ALLFIELDS
버전 5.0. 표시 이름뿐만 아니라 ITEMIDLIST 구조에 포함된 모든 정보를 비교합니다. 이 플래그는 IShellFolder2 인터페이스를 지원하는 폴더 개체에만 유효합니다. instance 경우 두 항목이 파일인 경우 폴더는 해당 이름, 크기, 파일 시간, 특성 및 구조체의 다른 정보를 비교해야 합니다. 이 플래그가 설정되면 lParam 의 하위 16비트는 0이어야 합니다.
SHCIDS_CANONICALONLY
버전 5.0. 이름으로 비교할 때 시스템 이름을 비교하지만 표시 이름은 비교하지 않습니다. 이 플래그가 전달되면 두 항목은 일관된 정렬 함수를 구현하는 한 Shell 폴더가 가장 효율적이라고 판단하는 기준과 비교됩니다. 이 플래그는 같음을 비교하거나 정렬 결과가 사용자에게 표시되지 않는 경우에 유용합니다. 이 플래그는 다른 플래그와 결합할 수 없습니다.
[in] pidl1
형식: PCUIDLIST_RELATIVE
첫 번째 항목의 ITEMIDLIST 구조체에 대한 포인터입니다. 폴더를 기준으로 합니다. 이 ITEMIDLIST 구조체는 둘 이상의 요소를 포함할 수 있습니다. 따라서 첫 번째 요소뿐만 아니라 전체 구조체를 비교해야 합니다.
[in] pidl2
형식: PCUIDLIST_RELATIVE
두 번째 항목의 ITEMIDLIST 구조체에 대한 포인터입니다. 폴더를 기준으로 합니다. 이 ITEMIDLIST 구조체는 둘 이상의 요소를 포함할 수 있습니다. 따라서 첫 번째 요소뿐만 아니라 전체 구조체를 비교해야 합니다.
반환 값
형식: HRESULT
이 메서드가 성공하면 HRESULT 의 CODE 필드에 다음 값 중 하나가 포함됩니다. 반환된 HRESULT에서 CODE 필드의 추출에 대한 자세한 내용은 비고를 참조하세요. 이 메서드가 실패하면 COM 오류 코드가 반환됩니다.
반환 코드 | 설명 |
---|---|
|
음수 반환 값은 첫 번째 항목이 두 번째 항목(pidl1 < pidl2)보다 우선해야 했음을 나타냅니다. |
|
양수 반환 값은 첫 번째 항목이 두 번째 항목(pidl1 > pidl2)을 따라야 했음을 나타냅니다. |
|
반환 값 0은 두 항목이 동일하다는 것을 나타냅니다(pidl1 = pidl2). |
설명
호출 애플리케이션에 대한 참고 사항
폴더 개체가 IShellFolder2를 지원하지 않는 경우 lParam에서 SHCIDS_ALLFIELDS 플래그를 설정하지 마세요. 이렇게 하면 예측할 수 없는 결과가 발생할 수 있습니다. SHCIDS_ALLFIELDS 플래그를 사용하는 경우 lParam의 하위 16비트를 0으로 설정해야 합니다.HRESULT_CODE 매크로를 사용하여 HRESULT에서 CODE 필드를 추출한 다음 결과를 짧게 캐스팅합니다.
HRESULT hres = psf->CompareIDs(lParam, pidl1, pidl2);
if ((short)HRESULT_CODE(hres) < 0)
{ /* pidl1 comes first */ }
else if ((short)HRESULT_CODE(hres) > 0)
{ /* pidl2 comes first */ }
else
{ /* the two pidls are equal */ }
구현자에 대한 참고 사항
정렬 규칙을 추출하려면 비트 AND 연산자(&)를 사용하여 lParam 을 SHCIDS_COLUMNMASK(0X0000FFFF)과 결합합니다. 이 작업은 SHCIDS_ALLFIELDS 값을 포함하여 lParam의 상위 16비트를 마스킹합니다.MAKE_HRESULT 매크로는 CompareIDs 메서드 구현에 대한 반환 값을 생성하는 데 유용합니다. 예를 들어:
HRESULT CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
{
short sResult;
unsigned uSeverity = 0x000000000;
// Code that determines the relative order of pidl1 and pidl2 according to
// any sorting rules specified by lParam goes here.
//
// Set sResult = -1 if pidl1 precedes pidl2 (pidl1 < pidl2).
// Set sResult = 1 if pidl1 follows pidl2. (pidl1 > pidl2).
// Set sResult = 0 if pidl1 and pidl2 are equivalent in terms of ordering. (pidl1 = pidl2).
//
// Leave uSeverity = 0 if the order is successfully determined.
// Set uSeverity = 0x00000001 if there is an error.
return MAKE_HRESULT(uSeverity, 0, (unsigned short)sResult);
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | shobjidl_core.h(Shobjidl.h 포함) |
DLL | Shell32.dll(버전 4.0 이상) |