0

我知道PropertiesListView 可以更改常用样式,但我只想测试一下。例如,View = View.LargeIcon将样式LVS_ICON = 0应用于ListViewGridLines = true将样式LVS_EX_GRIDLINES = 1应用于ListView。我想用CreateParams. 我认为使用GetWindowLongSetWindowLongWin32 函数就可以了,但据我所知,为了方便起见,CreateParams可以更改控件的样式。但是这次用 a ListView,我不能让它工作,它根本没有效果,不知道ListView是不是一个特例?这是我的代码:

public class CustomListView : ListView {        
    protected override CreateParams CreateParams {
      get {
       CreateParams cp = base.CreateParams;
       cp.Style |= 3; //Apply LVS_LIST (View as List)
       return cp;
      }
    }
}

只会产生一些效果,但LVS_EX_GRIDLINES = 1效果不是。这很奇怪,大多数其他应用都没有效果。Grid lines are drawn on the ListViewBorder becomes thicker and looks like 3D-border

你能解释一下,或者至少给我一些有效的例子吗?再次请不要给我任何使用GetWindowLongand的解决方案或代码SetWindowLong,只需使用CreateParams.

谢谢!

4

1 回答 1

0

如果它有助于解释这是如何工作的,这将由ListView.UpdateExtendedStyles函数在内部处理,当设置与扩展样式相关的属性之一时调用该函数。

引用 MSDN 上的相关部分

微软

Reflector反汇编功能如下

protected void UpdateExtendedStyles()
{
    if (base.IsHandleCreated)
    {
        int lparam = 0;
        int wparam = 0x10cfd;
        switch (this.activation)
        {
            case ItemActivation.OneClick:
                lparam |= 0x40;
                break;

            case ItemActivation.TwoClick:
                lparam |= 0x80;
                break;
        }
        if (this.AllowColumnReorder)
        {
            lparam |= 0x10;
        }
        if (this.CheckBoxes)
        {
            lparam |= 4;
        }
        if (this.DoubleBuffered)
        {
            lparam |= 0x10000;
        }
        if (this.FullRowSelect)
        {
            lparam |= 0x20;
        }
        if (this.GridLines)
        {
            lparam |= 1;
        }
        if (this.HoverSelection)
        {
            lparam |= 8;
        }
        if (this.HotTracking)
        {
            lparam |= 0x800;
        }
        if (this.ShowItemToolTips)
        {
            lparam |= 0x400;
        }
        base.SendMessage(0x1036, wparam, lparam);
        base.Invalidate();
    }
}

编辑

您不能使用的原因是因为它与此处的 MSDNCreateParams无关- 摘录复制如下ListView

微软

于 2013-06-13T04:56:18.940 回答