Как мне использовать GetThemeFont для чтения данных шрифта? - PullRequest
0 голосов
/ 26 января 2009

Я пытаюсь использовать 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), я не совсем уверен, что там использовать. Любая помощь по этому вопросу будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Смотри эту суть https://gist.github.com/1219126

Вы никогда не получите ничего кроме нуля или неподдерживаемого результата. Кроме того, использование TMT_FONT (210) избавит от приятной ошибки памяти и очистит стек (для тех, кто знает, по какой причине), если вы попытаетесь использовать его в управляемом приложении.

Внутренние элементы VisualStyleRenderer.GetFont и / или GetThemeFont по своей природе несовершенны. Я пытаюсь работать с некоторыми людьми из MS, чтобы решить эту проблему и предоставить обходной путь, дополнительную документацию или подтверждение того, что это не работает.

1 голос
/ 26 января 2009

-2147023728 - десятичный эквивалент 0x80070490L, который является значением, присвоенным E_PROP_ID_UNSUPPORTED. Из раздела «Замечания» документации GetThemeFont:

Если свойство не поддерживается для указанная часть и состояние, E_PROP_ID_UNSUPPORTED может быть возвращено.

Свойство не поддерживается для передаваемой вами комбинации детали и состояния.

...