В Vista/7 окно оболочки Windows Explorer использует специальный вид статического индикатора выполнения для отображения пространства на жестком диске.
Со стилями по умолчанию эта панель является синей и неанимированной. Это также покраснело окрашенное, когда это рядом с тем, чтобы быть полным (недостаточное пространство на диске).
Используя обмен сообщениями, я могу сказать управлению Windows Forms ProgressBar обновлять свое состояние к Приостановленному и Ошибке (желтый и красный, соответственно), который хорошо работает, но они все еще характерны для прогресса.
В Инструкциях по Опыту пользователя Windows это конкретно указывает на этот вариант "метра" Индикатора выполнения:
Этот шаблон не является индикатором выполнения, но он реализован с помощью управления индикатором выполнения. Метры имеют отличный взгляд для дифференциации их от истинных индикаторов выполнения.
Они говорят, что это "действительно ли реализовало использование, управление индикатором выполнения", так... как? Какое сообщение я мог отправить в управление, чтобы иметь его, ведут себя этот путь?
Я видел, что можно отправить сообщения за выбиранием цвета панели, но в документации говорится, что эти вызовы проигнорированы, когда визуальные стили включены. Ничто иное в документации API Windows для необработанных средств управления ProgressBar, казалось, не предложило способ сделать это. Я просто застревают, делая пользовательскую оттянутую панель? Я действительно хотел бы использовать ОС каждый раз, когда возможный так, чтобы приложение казалось последовательным всюду по различным версиям ОС. Я понимаю, что версии перед Vista, вероятно, не будут поддерживать это, все же.
Я ищу решение Windows Forms, но интересно, выставляется ли оно даже вообще через Win32 API.
Это возможно, но не через ProgressBar. Win7 также не использует PB для рисования этих счетчиков, нет дескриптора окна, связанного с полосой. Должен быть использован нестандартный рисунок. Это возможно и в WinForms с классом VisualStyleRenderer. Однако одна вещь, которая не помогает, - это то, что требуемые части и состояния визуального стиля не объявляются даже в .NET 4.0.
В этом образце формы воспроизводится шкала счетчика:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
namespace WindowsFormsApplication1 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
VisualStyleRenderer renderer = new VisualStyleRenderer(VisualStyleElement.ProgressBar.Bar.Normal);
protected override void OnPaint(PaintEventArgs e) {
renderer.SetParameters("PROGRESS", 11, 2);
renderer.DrawBackground(e.Graphics, new Rectangle(10, 10, 200, 15));
renderer.SetParameters("PROGRESS", 5, 4);
renderer.DrawBackground(e.Graphics, new Rectangle(10, 10, 100, 15));
}
}
}
Я получил номера деталей и состояний из заголовочного файла SDK vsstyle.h.