Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Directwrite中为给定字体获取可用的OpenType功能?_C#_C++_Directx_Sharpdx_Directwrite - Fatal编程技术网

C# 如何在Directwrite中为给定字体获取可用的OpenType功能?

C# 如何在Directwrite中为给定字体获取可用的OpenType功能?,c#,c++,directx,sharpdx,directwrite,C#,C++,Directx,Sharpdx,Directwrite,我构建了一个文本编辑器,并使用了DirectWrite,我想让用户选择在所选文本上启用OpenType功能,但并非每种字体都有所有功能,许多字体根本没有。我的问题是如何使用DirectWrite知道给定字体中有哪些OpenType功能可用 我尝试了以下代码,但res始终==S_OK甚至字体也缺少该功能: DWRITE_FONT_FEATURE fontFeature = { DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7, 1 }; HRESULT res = p

我构建了一个文本编辑器,并使用了
DirectWrite
,我想让用户选择在所选文本上启用
OpenType功能
,但并非每种字体都有所有功能,许多字体根本没有。我的问题是如何使用DirectWrite知道给定字体中有哪些OpenType功能可用

我尝试了以下代码,但
res
始终==
S_OK
甚至字体也缺少该功能:

DWRITE_FONT_FEATURE fontFeature = { DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7, 1 };
HRESULT res = pTypography->AddFontFeature(fontFeature);      // res == S_OK
res = g_pFancyTextLayout->SetTypography(pTypography, range); // res == S_OK
更新:

我用
SharpDx
尝试了以下代码,但
列表始终为空,即使是在
Gabriola
字体中:

    public static FontFeatureTag[] GetOpenTypeFeatures(FontFace fontFace)
    {
        var list = new List<FontFeatureTag>();

        foreach (FontFeatureTag tag in System.Enum.GetValues(typeof(FontFeatureTag)))
        {
            if (fontFace.TryGetFontTable((int)tag, out DataPointer dataPointer, out IntPtr intPtr))
            {
                list.Add(tag);
            }
        }

        return list.ToArray();
    }
publicstaticfontfeaturetag[]GetOpenTypeFeatures(字体脸字体脸)
{
var list=新列表();
foreach(System.Enum.GetValues中的FontFeatureTag标记(typeof(FontFeatureTag)))
{
if(fontFace.TryGetFontTable((int)标记,out-DataPointer-DataPointer,out-IntPtr-IntPtr))
{
列表。添加(标签);
}
}
return list.ToArray();
}

我使用SearPDX编写了一个C语言应用程序,但是我能理解C++中提供的答案/例子。

< P>在深入搜索微软的关于DistWrrt的文档之后,我已经使用TrimeSaleServer 2./P>找到了它的预期接口。 请注意,DirectWrite为每个新的TextAnalyzer添加了新功能和成员。它从TextAnalyzer开始,然后是TextAnalyzer1和TextAnalyzer2。[您会在DirectWrite的其他接口上发现相同的演变]

这就是:IDWriteTextAnalyzer2::GetTyphographicFeatures

使用IDWriteTextAnalyzer2接口-可以找到。使用“返回可用于脚本或字体的OpenType功能的完整列表”