0

我正在尝试使用 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”,字体始终为空。我放 210(用于 TMT_FONT)的地方,我不太确定在那里用什么。对此的任何帮助将不胜感激。

4

2 回答 2

1

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

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

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

于 2009-01-26T05:18:51.943 回答
1

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

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

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

于 2011-09-15T18:18:14.560 回答