我正在尝试使用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),我不确定在那里使用什么。对此有任何帮助将非常感激。
答案 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的一些人合作来解决这个问题,并提供一个解决方法,更多文档或一些确认这是破坏的。