LVM_HITTEST
メッセージをListView
に送信できます。 -1
をwParam
に渡すと、戻り値が-1
より大きく、結果にLVHT_EX_GROUP_HEADER
が設定されている場合は、SendMessage
メソッドの戻り値がグループインデックスをクリックされます。以下の実装では
実装
、私はMyListView
クラスにGroupHeaderClick
イベントを追加しました。あなたは、単にイベントをこのように扱うことができます。
ここ
private void myListView1_GroupHeaderClick(object sender, int e)
{
//Show ContextMenuStrip here. Or just for example:
MessageBox.Show(myListView1.Groups[e].Header);
}
MyListView
実装です:
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class MyListView : ListView
{
public event EventHandler<int> GroupHeaderClick;
protected virtual void OnGroupHeaderClick(int e)
{
var handler = GroupHeaderClick;
if (handler != null) handler(this, e);
}
private const int LVM_HITTEST = 0x1000 + 18;
private const int LVHT_EX_GROUP_HEADER = 0x10000000;
[StructLayout(LayoutKind.Sequential)]
private struct LVHITTESTINFO
{
public int pt_x;
public int pt_y;
public int flags;
public int iItem;
public int iSubItem;
public int iGroup;
}
[DllImport("user32.dll", EntryPoint = "SendMessage", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int msg,
int wParam, ref LVHITTESTINFO ht);
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
var ht = new LVHITTESTINFO() { pt_x = e.X, pt_y = e.Y };
var value = SendMessage(this.Handle, LVM_HITTEST, -1, ref ht);
if (value != -1 && (ht.flags & LVHT_EX_GROUP_HEADER) != 0)
OnGroupHeaderClick(value);
}
}
あなたのコード(特にれるonmousedown方法)をコメントしてくださいもらえますか?私は完全に理解していないコードをコピー&ペーストしたくない – Paedow
実際に 'OnMouseDown'には' [LVM_HITTEST'](https://msdn.microsoft.com/en-us/library/windows/desktop/bb761099%)を送るべきです28v = vs.85%29.aspx?f = 255&MSPPError = -2147217396)メッセージを 'ListView'に送ります。次に、結果が-1より大きく、['LVHITTESTINFO'](https://msdn.microsoft.com/en-us/library/windows/desktop/bb774754(v = vs.85).aspx ) 'SendMessage'に渡したものは' LVHT_EX_GROUP_HEADER'フラグを含み、結果はクリックされたヘッダグループのインデックスであることを意味します。コードの残りは宣言と[イベントの発生]です(https://msdn.microsoft.com/en-us/library/9aackb16(v = vs.110).aspx)。 –
['LVM_HITTEST'](https://msdn.microsoft.com/en-us/library/windows/desktop/bb761099%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396)のリンクを追加しました。パラメータと戻り値のセクションを参照してください:) –