IContextNode::GetSubNodes-Methode

Ruft die direkten untergeordneten Knoten des IContextNode-Objekts ab.

Syntax

HRESULT GetSubNodes(
  [out] IContextNodes **ppSubContextNodes
);

Parameter

ppSubContextNodes [out]

Eine Auflistung der IContextNode-Objekte , die direkte untergeordnete Knoten dieser IContextNode sind.

Rückgabewert

Eine Beschreibung der Rückgabewerte finden Sie unter Klassen und Schnittstellen – Freihandanalyse.

Hinweise

Achtung

Um ein Speicherleck zu vermeiden, rufen Sie IUnknown::Release auf *ppSubContextNodes auf, wenn Sie die Sammlung von Unternodes nicht mehr verwenden müssen.

Dies gibt nur die direkten untergeordneten Knoten zurück, nicht alle absteigenden Knoten.

Beispiele

In diesem Beispiel wird eine Methode dargestellt, ExploreContextNodedie eine IContextNode untersucht. Die Methode führt folgendes aus:

  • Ruft den Typ des Kontextknotens ab.
  • Untersucht bestimmte Eigenschaften des Knotentyps durch Aufrufen einer Hilfsmethode, wenn der Kontextknoten eine nicht klassifizierte Freihand, Analysehinweise oder benutzerdefinierter Erkennungsknoten ist.
  • Überprüft jede Unternode, indem sie sich selbst aufrufen, wenn der Knoten Über Unternodes verfügt.
  • Untersucht die Strichdaten für den Knoten durch Aufrufen einer Hilfsmethode, wenn der Knoten ein Freihandblattknoten ist.
HRESULT CMyClass::ExploreContextNode(
    IContextNode *pContextNode)
{
    // Check for certain types of context nodes.
    GUID ContextNodeType;
    HRESULT hr = pContextNode->GetType(&ContextNodeType);

    if (SUCCEEDED(hr))
    {
        if (IsEqualGUID(GUID_CNT_UNCLASSIFIEDINK, ContextNodeType))
        {
            // Call a helper method that explores unclassified ink nodes.
            hr = this->ExploreUnclassifiedInkNode(pContextNode);
        }
        else if (IsEqualGUID(GUID_CNT_ANALYSISHINT, ContextNodeType))
        {
            // Call a helper method that explores analysis hint nodes.
            hr = this->ExploreAnalysisHintNode(pContextNode);
        }
        else if (IsEqualGUID(GUID_CNT_CUSTOMRECOGNIZER, ContextNodeType))
        {
            // Call a helper method that explores custom recognizer nodes.
            hr = this->ExploreCustomRecognizerNode(pContextNode);
        }

        if (SUCCEEDED(hr))
        {
            // Check if this node is a branch or a leaf node.
            IContextNodes *pSubNodes = NULL;
            hr = pContextNode->GetSubNodes(&pSubNodes);

            if (SUCCEEDED(hr))
            {
                ULONG ulSubNodeCount;
                hr = pSubNodes->GetCount(&ulSubNodeCount);

                if (SUCCEEDED(hr))
                {
                    if (ulSubNodeCount > 0)
                    {
                        // This node has child nodes; explore each child node.
                        IContextNode *pSubNode = NULL;
                        for (ULONG index=0; index<ulSubNodeCount; index++)
                        {
                            hr = pSubNodes->GetContextNode(index, &pSubNode);

                            if (SUCCEEDED(hr))
                            {
                                // Recursive call to explore the child node of this
                                // context node.
                                hr = this->ExploreContextNode(pSubNode);
                            }

                            // Release this reference to the child context node.
                            if (pSubNode != NULL)
                            {
                                pSubNode->Release();
                                pSubNode = NULL;
                            }

                            if (FAILED(hr))
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        // This is a leaf node. Check if it contains stroke data.
                        ULONG ulStrokeCount;
                        hr = pContextNode->GetStrokeCount(&ulStrokeCount);

                        if (SUCCEEDED(hr))
                        {
                            if (ulStrokeCount > 0)
                            {
                                // This node is an ink leaf node; call helper
                                // method that explores available stroke data.
                                hr = this->ExploreNodeStrokeData(pContextNode);
                            }
                        }
                    }
                }
            }

            // Release this reference to the subnodes collection.
            if (pSubNodes != NULL)
            {
                pSubNodes->Release();
                pSubNodes = NULL;
            }
        }
    }

    return hr;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows XP Tablet PC Edition [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Nicht unterstützt
Header
IACom.h (erfordert auch IACom_i.c)
DLL
IACom.dll

Siehe auch

IContextNode

IContextNode::GetParentNode

Freihandanalysereferenz