0

ListView で一般的なスタイルを変更できることはわかっていPropertiesますが、これをテストしたいだけです。たとえば、View = View.LargeIconが にスタイルLVS_ICON = 0を適用するListViewか、 にスタイルをGridLines = true適用します。でテストしたいと思います。Win32 関数を使用しても問題ないと思いますが、便宜上、私の知る限り、コントロールのスタイルを変更できます。でも今回は で、動かせない、全然効かない、特殊なケースなのかな?これが私のコードです:LVS_EX_GRIDLINES = 1ListViewCreateParamsGetWindowLongSetWindowLongCreateParamsListViewListView

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。奇妙なことに、他の適用のほとんどはまったく効果がありません。

説明してもらえますか、少なくともうまくいく例を教えてください。GetWindowLong繰り返しますが、 andをSetWindowLong使用するソリューションやコードを教えないでくださいCreateParams

ありがとう!

4

1 に答える 1

0

これがどのように機能するかを説明するListView.UpdateExtendedStylesと、拡張スタイルに関連するプロパティの 1 つが設定されたときに呼び出される関数によって内部的に処理されます。

MSDN の関連セクションからの引用

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();
    }
}

編集

使用できない理由は、ここの MSDN を参照してください- 以下にコピーされた抜粋CreateParamsに関連していないためです。ListView

msdn

于 2013-06-13T04:56:18.940 に答える