如何使用GetThemeFont读取字体数据?

时间:2009-01-26 04:25:03

标签: c# winapi msstyles

我正在尝试使用GetThemeFont从视觉样式中读取字体数据,但我似乎无法让它返回任何内容。我正在使用它:

IntPtr h = OpenThemeData(this.Handle, "Button");
LOGFONT font = new LOGFONT();
int r = GetThemeFont(h, IntPtr.Zero, 1, 1, 210, out font);
CloseThemeData(h);

返回值始终为“-2147023728”,字体始终为null。我放210的地方(对于TMT_FONT),我不确定在那里使用什么。对此有任何帮助将非常感激。

2 个答案:

答案 0 :(得分:1)

-2147023728是0x80070490L的十进制等值,它是分配给E_PROP_ID_UNSUPPORTED的值。来自GetThemeFont文档的“备注”部分:

  

如果不支持该属性   指定的部分和状态,   可以返回E_PROP_ID_UNSUPPORTED。

您传递的部件和状态组合不支持该属性。

答案 1 :(得分:1)

请参阅此要点https://gist.github.com/1219126

你永远不会得到任何超过null或不支持的结果。此外,如果您尝试在托管应用程序中使用它,使用TMT_FONT(210)将丢弃一个漂亮的内存错误并清除堆栈(谁知道是什么原因)。

VisualStyleRenderer.GetFont和/或GetThemeFont的内部存在本质上的缺陷。我正在尝试与MS的一些人合作来解决这个问题,并提供一个解决方法,更多文档或一些确认这是破坏的。