Как я могу использовать индикатор выполнения стиля метра?

В Vista/7 окно оболочки Windows Explorer использует специальный вид статического индикатора выполнения для отображения пространства на жестком диске.

Со стилями по умолчанию эта панель является синей и неанимированной. Это также покраснело окрашенное, когда это рядом с тем, чтобы быть полным (недостаточное пространство на диске).

Используя обмен сообщениями, я могу сказать управлению Windows Forms ProgressBar обновлять свое состояние к Приостановленному и Ошибке (желтый и красный, соответственно), который хорошо работает, но они все еще характерны для прогресса.

В Инструкциях по Опыту пользователя Windows это конкретно указывает на этот вариант "метра" Индикатора выполнения:

Этот шаблон не является индикатором выполнения, но он реализован с помощью управления индикатором выполнения. Метры имеют отличный взгляд для дифференциации их от истинных индикаторов выполнения.

Они говорят, что это "действительно ли реализовало использование, управление индикатором выполнения", так... как? Какое сообщение я мог отправить в управление, чтобы иметь его, ведут себя этот путь?

Я видел, что можно отправить сообщения за выбиранием цвета панели, но в документации говорится, что эти вызовы проигнорированы, когда визуальные стили включены. Ничто иное в документации API Windows для необработанных средств управления ProgressBar, казалось, не предложило способ сделать это. Я просто застревают, делая пользовательскую оттянутую панель? Я действительно хотел бы использовать ОС каждый раз, когда возможный так, чтобы приложение казалось последовательным всюду по различным версиям ОС. Я понимаю, что версии перед Vista, вероятно, не будут поддерживать это, все же.

Я ищу решение Windows Forms, но интересно, выставляется ли оно даже вообще через Win32 API.

10
задан jrh 3 August 2016 в 20:08
поделиться

1 ответ

Это возможно, но не через 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.

11
ответ дан 4 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: