다음을 통해 공유


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)을 따라야 했음을 나타냅니다.
Zero
반환 값 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 이상)

추가 정보

IShellFolder

IShellFolder2