Partager via


Méthode IContextNodes::GetContextNode

Récupère l’objet IContextNode à l’index spécifié dans cette collection.

Syntaxe

HRESULT GetContextNode(
  [in]  ULONG        ulIndex,
  [out] IContextNode **ppContextNode
);

Paramètres

ulIndex [in]

Index de base zéro de l’objet IContextNode à obtenir.

ppContextNode [out]

Pointeur vers l’IContextNode référencé à l’index spécifié.

Valeur retournée

Pour obtenir une description des valeurs renvoyées, consultez Classes et interfaces - Analyse de l’entrée manuscrite.

Notes

Attention

Pour éviter une fuite de mémoire, appelez IUnknown::Release sur *ppContextNode lorsque vous n’avez plus besoin d’utiliser le nœud de contexte.

Exemples

Cet exemple montre une méthode, ExploreContextNode, qui examine un IContextNode. La méthode effectue les opérations suivantes :

  • Obtient le type du nœud de contexte.
  • Examine les propriétés spécifiques du type de nœud en appelant une méthode d’assistance, si le nœud de contexte est une entrée manuscrite non classifiée, un indicateur d’analyse ou un nœud de module de reconnaissance personnalisé.
  • Examine chaque sous-nœud en s’appelant lui-même, si le nœud a des sous-nœuds.
  • Examine les données de trait pour le nœud en appelant une méthode d’assistance, si le nœud est un nœud feuille manuscrite.
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;
}

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows XP Édition Tablette PC [applications de bureau uniquement]
Serveur minimal pris en charge
Aucun pris en charge
En-tête
IACom.h (nécessite également IACom_i.c)
DLL
IACom.dll

Voir aussi

IContextNodes

Informations de référence sur l’analyse de l’encre