IContextNode 接口

表示作为墨迹分析的一部分创建的对象的树中的节点。

成员

IContextNode 接口继承自 IUnknown 接口。 IContextNode 还包含以下类型的成员:

方法

IContextNode 接口具有这些方法。

方法 说明
AddContextLink 将新的 IContextLink 添加到 IContextNode 对象的上下文链接集合。
AddPropertyData 添加特定于应用程序的数据。
确认 修改确认类型,该类型控制 IInkAnalyzer 对象可以更改 IContextNode 的内容。
ContainsPropertyData 确定 IContextNode 对象是否包含存储在指定标识符下的数据。
CreatePartiallyPopulatedSubNode 创建一个子 IContextNode 对象,该对象仅包含有关类型、标识符和位置的信息。
CreateSubNode 创建新的子 IContextNode 对象。
DeleteContextLink IContextNode 对象的链接集合中删除 IContextLink 对象。
DeleteSubNode 删除子 IContextNode
GetContextLinks 检索表示与其他 IContextNode 对象的关系的 IContextLink 对象的集合
GetId 检索 IContextNode 对象的标识符。
GetLocation 检索 IContextNode 对象的位置和大小。
GetParentNode 检索上下文节点树中此 IContextNode 的父节点。
GetPartiallyPopulated 检索指示 IContextNode 对象是部分填充还是完全填充的值。
GetPropertyData 检索给定指定标识符的应用程序特定数据或其他属性数据。
GetPropertyDataIds 检索属性数据的标识符。
GetStrokeCount 检索与 IContextNode 对象关联的笔划数。
GetStrokeId 检索 IContextNode 对象中索引值引用的笔划标识符。
GetStrokeIds 检索 IContextNode 对象中笔划的标识符数组。
GetStrokePacketDataById 检索包含指定笔划的数据包属性数据的数组。
GetStrokePacketDescriptionById 检索包含指定笔划的数据包属性标识符的数组。
GetSubNodes 检索 IContextNode 对象的直接子节点。
GetType 检索 IContextNode 对象的类型。
GetTypeName 检索此 IContextNode 的可读类型名称。
IsConfirmed 检索一个值,该值指示是否确认 IContextNode 对象。 IInkAnalyzer 无法更改已确认 的 IContextNode 对象的节点类型和关联的笔划。
LoadPropertiesData 为以前使用 IContextNode::SavePropertiesData 创建的字节数组重新创建特定于应用程序的内部属性数据。
MoveSubNodeToPosition 将指定的子 IContextNode 对象重新排序到指定的索引。
RemovePropertyData 删除特定于应用程序的数据。
重新父级 将此 IContextNode 对象从其父上下文节点的子节点集合移动到指定的上下文节点子节点集合。
ReparentStrokeByIdToNode 将笔划数据从此 IContextNode 移动到指定的 IContextNode
SavePropertiesData 检索包含此 IContextNode 的应用程序特定属性数据和内部属性数据的字节数组。
SetLocation 更新此 IContextNode 的位置和大小。
SetPartiallyPopulated 修改指示此 IContextNode 是部分填充还是完全填充的值。
SetStrokes 将指定的笔划与此 IContextNode 相关联。

备注

上下文节点类型常量中介绍了节点类型。

示例

以下示例演示了检查 IContextNode 的方法;该方法执行以下操作:

  • 获取上下文节点的类型。 如果上下文节点是未分类的墨迹、分析提示或自定义识别器节点,则调用帮助程序方法来检查节点类型的特定属性。
  • 如果节点具有子节点,它将通过调用自身来检查每个子节点。
  • 如果节点是墨迹叶节点,则通过调用帮助程序方法检查节点的笔划数据。

Ihe InkAnalysis API 允许你创建包含墨迹单词和文本单词的行节点。 但是,分析器将忽略这些混合节点,并将它们视为外部节点。 这会影响最终用户在此混合节点上或周围写入墨迹批注时检测墨迹批注的分析准确性。

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;
}

要求

要求
最低受支持的客户端
Windows XP 平板电脑版 [仅限桌面应用]
最低受支持的服务器
无受支持的版本
标头
IACom.h (还需要 IACom_i.c)
DLL
IACom.dll

请参阅

IContextNodes

上下文节点类型

IInkAnalyzer

墨迹分析参考