Ce code permet d'intercepter le click droit sur les différentes parties d'un listview
(Réponse à un message du forum)
Source / Exemple :
private void SubClasserCallBack(object sender,CallBackArgs Args)
{
//System.Diagnostics.Debug.Print(Args.m.Msg.ToString());
//Console.WriteLine(Args.m.HWnd.ToString());
const int WM_CONTEXTMENU = 0x7B;
switch (Args.m.Msg)
{
case WM_CONTEXTMENU: //interception du click droit
HD_HITTESTINFO HTI = new HD_HITTESTINFO() ;
const int LVM_FIRST = 0x1000;
const int LVM_GETHEADER = (LVM_FIRST + 31);
const int HDM_FIRST = 0x1200;
const int HDM_HITTEST = (HDM_FIRST + 6);
const int HHT_ONHEADER = 0x2;
const int HHT_ONDIVIDER = 0x4;
int hHeader = 0;
if (listView1.View == View.Details)
{
hHeader = SendMessage(listView1.Handle, LVM_GETHEADER, 0, IntPtr.Zero);
}
if (hHeader > 0)
{
HTI.flags = HHT_ONHEADER | HHT_ONDIVIDER;
HTI.pt.X = listView1.PointToClient(System.Windows.Forms.Cursor.Position).X;
HTI.pt.Y = listView1.PointToClient(System.Windows.Forms.Cursor.Position).Y;
SendMessage(hHeader, HDM_HITTEST, 0,ref HTI);
}
//localisation du click
if ((hHeader>0) && (HTI.iItem > -1))
{
//click sur header
MessageBox.Show("Header");
}
else if (listView1.SelectedItems.Count == 0)
{
//click sur un subitem
MessageBox.Show("subitem");
}
else if (listView1.SelectedItems.Count >= 1)
{
//click sur un item
MessageBox.Show("item");
}
break;
}
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.