Стиль вырезания элемента списка в .NET? - PullRequest
2 голосов
/ 15 декабря 2008

Как мне получить эквивалент стиля LVIS_CUT для элемента списка? Похоже, что это не выставлено структурой? Должен ли я P / Invoke?

Редактировать: LVIS_CUT - это стиль Win32, который влияет на внешний вид элемента: он отображает изображение элемента. Вы можете увидеть его в действии в проводнике Windows: выберите файл и введите Ctrl + X.

ТИА.

Ответы [ 3 ]

1 голос
/ 10 февраля 2009

Что ж, один из способов «достижения эквивалента стиля LVIS_CUT» будет следующим:

Используйте функцию, аналогичную

private void MakeCutList(ImageList sourceList, Color background)
{
   Brush overlay = new SolidBrush(Color.FromArgb(128, BackColor));
   Rectangle rect = new Rectangle(new Point(0, 0), sourceList.ImageSize);

   foreach (Image img in sourceList.Images)
   {
      Bitmap cutBmp = new Bitmap(img.Width, img.Height);

      using (Graphics g = Graphics.FromImage(cutBmp))
      {
         g.DrawImage(img, 0, 0);
         g.FillRectangle(overlay, rect);
      }

      sourceList.Images.Add(cutBmp);    
   }
}

, чтобы взять список изображений, используемый вашим ListView (т.е. listView1.ImageList), и добавить «обрезанные» версии всех значков. Вы можете вызвать это сразу после InitializeComponent в вашей форме, например

public Form1()
{
    InitializeComponent();
    MakeCutList(listView1.LargeImageList, listView1.BackColor);
}

Тогда вы могли бы использовать такой код

private void SetCutState(ListViewItem lvi, Boolean isItemCut)
{
    int originalListSize = lvi.ImageList.Images.Count / 2;
    int baseIndex = lvi.ImageIndex % originalListSize;
    int cutImagesOffset = originalListSize;

    if (isItemCut)
    {
        lvi.ImageIndex = cutImagesOffset + baseIndex;
        lvi.ForeColor = SystemColors.GrayText;
    }
    else
    {
        lvi.ImageIndex = baseIndex;
        lvi.ForeColor = SystemColors.WindowText;
    }
}

чтобы изменить состояние элемента на обрез или нет.

Как только вы это заработаете, вы можете попытаться поместить подобный код в подклассную версию элемента управления ListView.

0 голосов
/ 01 февраля 2012

Я использовал это для моего приложения для просмотра файлов ..

    private void MakeCutItem()
    {
        foreach (ListViewItem item in listView1.SelectedItems)
        {
            Image img = item.ImageList.Images[item.ImageIndex];
            Brush overlay = new SolidBrush(Color.FromArgb(128, BackColor));
            Rectangle rect = new Rectangle(new Point(0, 0), item.ImageList.ImageSize);
            using (Graphics g = Graphics.FromImage(img))
            {
                g.FillRectangle(overlay, rect);
            }
            item.ImageIndex = item.ImageList.Images.Add(img,Color.Empty);
        }
    }
0 голосов
/ 15 декабря 2008

Вы имеете в виду, когда он недоступен? Например, когда вы делаете «разрез» на это? Если это так, я бы просто установил передний цвет на Inactive или что-то в этом роде. Не уверен, что тебе нужно зацепиться за что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...