Визуальные стили в Windows 8

У меня есть следующий код C ++ (собственное настольное приложение), в котором используется Microsoft Visual Styles API, чтобы нарисовать кнопку закрытия.

RECT r = DetermineButtonRect();
HANDLE h = OpenThemeData(Handle, L"WINDOW");
DrawThemeBackground(h, hdc, WP_CLOSEBUTTON, CBS_NORMAL, &rect, NULL);
CloseThemeData(h);

Это нормально работает в более ранних версиях Windows, но в Windows 8 настаивает на рисовании в стиле Windows 7. Это не ужасно, но все же неприятно, что не все части приложения используют один и тот же визуальный стиль. Вот скриншот того, как это выглядит:

кнопки закрытия

Сверху вниз:

  • Стандартная кнопка закрытия Windows 8, использующая минималистичный внешний вид Windows 8 без стекла.
  • Стандартная кнопка закрытия Windows 8 MDI (WP_MDICLOSEBUTTON, выглядит немного неуместно из-за более выраженного градиента, но это решение Microsoft.
  • Кнопка закрытия, которую я рисую сам, в полном стиле Aero Glass (внешний вид идентична Windows 7) и в результате выглядит неуместно.

Есть ли способ заставить API визуальных стилей рисовать кнопки в стиле Windows 8 (без стекла)? Или мне следует использовать другой API?


person Josh Kelley    schedule 04.12.2013    source источник
comment
Это большой вопрос без ответа. Раньше баловался этим, а сегодня потратил на это невероятное количество времени, которого мне не следовало бы. Ничего, нада, молниеносно. Теперь я на 98% уверен, что это невозможно.   -  person Hans Passant    schedule 05.12.2013
comment
@HansPassant - Спасибо, что нашли время изучить это. Если вы разместите свой комментарий в качестве ответа, я его приму.   -  person Josh Kelley    schedule 09.12.2013


Ответы (1)


Используйте WP_SMALLCLOSEBUTTON, который работает как в Windows 7, так и в Windows 8 с правильной темой.

person Rick Zarr    schedule 03.09.2014
comment
К сожалению, это не относится к Windows 10. - person Mark Ingram; 28.11.2018