Método IContextNode::GetSubNodes
Obtiene los nodos secundarios directos del objeto IContextNode .
Sintaxis
HRESULT GetSubNodes(
[out] IContextNodes **ppSubContextNodes
);
Parámetros
-
ppSubContextNodes [out]
-
Colección de los objetos IContextNode que son nodos secundarios directos de este IContextNode.
Valor devuelto
Para obtener una descripción de los valores devueltos, vea Clases e interfaces : análisis de entrada de lápiz.
Observaciones
Precaución
Para evitar una pérdida de memoria, llame a IUnknown::Release en *ppSubContextNodes cuando ya no necesite usar la colección de subnodos.
Esto devuelve solo los nodos secundarios directos, no todos los nodos descendientes.
Ejemplos
En este ejemplo se muestra un método, ExploreContextNode
, que examina un IContextNode. El método hace lo siguiente:
- Obtiene el tipo del nodo de contexto.
- Examina propiedades específicas del tipo de nodo mediante una llamada a un método auxiliar, si el nodo de contexto es una entrada de lápiz sin clasificar, una sugerencia de análisis o un nodo de reconocedor personalizado.
- Examina cada subnodo llamando a sí mismo, si el nodo tiene subnodos.
- Examina los datos de trazo del nodo mediante una llamada a un método auxiliar, si el nodo es un nodo hoja de lápiz.
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;
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible |
Windows XP Tablet PC Edition [solo aplicaciones de escritorio] |
Servidor mínimo compatible |
No se admite ninguno |
Encabezado |
|
Archivo DLL |
|