Поделиться через


Метод IXpsOMPageReference::CollectLinkTargets (xpsobjectmodel.h)

Возвращает интерфейс IXpsOMNameCollection , содержащий имена всех объектов поддеревьев документа, свойство IsHyperlinkTarget которых имеет значение TRUE.

Синтаксис

HRESULT CollectLinkTargets(
  [out, retval] IXpsOMNameCollection **linkTargets
);

Параметры

[out, retval] linkTargets

Указатель на интерфейс IXpsOMNameCollection , содержащий имена всех объектов поддеревьев документа, свойство IsHyperlinkTarget которых имеет значение TRUE. Если в документе нет таких объектов, интерфейс IXpsOMNameCollection будет пустым.

Примечание При каждом вызове этого метода он возвращает новую коллекцию.
 

Возвращаемое значение

Если метод завершается успешно, он возвращает S_OK; В противном случае возвращается код ошибки HRESULT .

Код возврата Описание
S_OK
Метод выполнен успешно.
E_OUTOFMEMORY
Недостаточно памяти для выполнения этой операции.
E_POINTER
linkTargets имеет значение NULL.

Комментарии

Если страница изначально загружена из пакета, но в настоящее время не загружена в объектной модели, этот метод возвращает значения, указанные в исходной разметке PageContent.LinkTargets .

Если в документе нет целевых объектов ссылок, коллекция имен, возвращаемая в linkTargets , будет пустой.

Чтобы получить количество элементов в коллекции, возвращаемых в linkTargets, вызовите метод GetCount коллекции.

Этот метод возвращает указатель на новую коллекцию при каждом вызове. Чтобы предотвратить утечку памяти, указатель на предыдущую коллекцию должен быть освобожден, когда он больше не нужен или до повторного использования переменной указателя для другого вызова этого метода. В следующем примере кода показано, как это можно сделать в программе.

    HRESULT                         hr = S_OK;
    IXpsOMPage                      *page = NULL;
    IXpsOMNameCollection            *linkTargets = NULL;

    UINT32 numTargets = 0;
    UINT32 thisTarget = 0;
    LPWSTR thisTargetName = NULL;

    // pageRef contains the current page reference 

    // if the page hasn't been loaded yet, for example, if the XPS OM 
    //  was loaded from an XPS document, CollectLinkTargets obtains the
    //  list of link targets from the <PageContent.LinkTargets> markup
    hr = pageRef->CollectLinkTargets(&linkTargets);

    // get the page content of this page reference
    hr = pageRef->GetPage (&page);

    // after the page object has been loaded and calling GetPage or 
    //  by creating a page in the XPS OM, CollectLinkTargets will now check
    //  each of the page elements to return the list so this call to
    //  CollectLinkTargets might take longer to return than the previous
    //  call above if the XPS OM was created from a file
    linkTargets->Release(); // release previous collection
    hr = pageRef->CollectLinkTargets(&linkTargets);
    
    // walk the list of link targets returned
    hr = linkTargets->GetCount( &numTargets );
    thisTarget = 0;
    while (thisTarget < numTargets) {
        hr = linkTargets->GetAt (thisTarget, &thisTargetName);
        printf ("%s\n", thisTargetName);
        // release the target string returned to prevent memory leaks
        CoTaskMemFree (thisTargetName);
        // get next target in list
        thisTarget++;
    }
    // release page and the link target collection
    page->Release();
    linkTargets->Release();

Требования

Требование Значение
Минимальная версия клиента Windows 7, Windows Vista с пакетом обновления 2 (SP2) и обновление платформы для Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 R2, Windows Server 2008 с пакетом обновления 2 (SP2) и Обновление платформы для Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header xpsobjectmodel.h

См. также раздел

IXpsOMNameCollection

IXpsOMPageReference

XPS