Exemple #1
0
        public unsafe void SetColumnHeaderToCheckBox(int index)
        {
            if (!SupportsHeaderCheckBoxes)
            {
                throw new InvalidOperationException("Header check boxes are not supported on this operating system version");
            }
            if (base.Parent == null)
            {
                throw new InvalidOperationException("Control must have a parent before setting header style");
            }
            if (index < 0 || index >= base.Columns.Count)
            {
                throw new IndexOutOfRangeException("Column index out of range");
            }
            if (!string.IsNullOrEmpty(base.Columns[index].Text))
            {
                throw new InvalidOperationException("Column must have no text");
            }
            IntPtr headerHandle = HeaderHandle;
            int    windowLong   = User.GetWindowLong(headerHandle, -16);

            User.SetWindowLong(headerHandle, -16, windowLong | 0x400);
            Structs.HDITEM hDITEM = default(Structs.HDITEM);
            hDITEM.mask = 4u;
            Structs.HDITEM *value = &hDITEM;
            User.SendMessage(headerHandle, 4619u, (IntPtr)index, (IntPtr)(void *)value);
            hDITEM.fmt |= 320;
            User.SendMessage(headerHandle, 4620u, (IntPtr)index, (IntPtr)(void *)value);
        }
Exemple #2
0
        public unsafe void SetColumnHeaderChecked(int index, bool isChecked)
        {
            IntPtr headerHandle = HeaderHandle;

            Structs.HDITEM hDITEM = default(Structs.HDITEM);
            hDITEM.mask = 4u;
            Structs.HDITEM *value = &hDITEM;
            User.SendMessage(headerHandle, 4619u, (IntPtr)index, (IntPtr)(void *)value);
            if (isChecked)
            {
                hDITEM.fmt |= 128;
            }
            else
            {
                hDITEM.fmt &= -129;
            }
            User.SendMessage(headerHandle, 4620u, (IntPtr)index, (IntPtr)(void *)value);
        }
Exemple #3
0
 protected unsafe override void WndProc(ref Message m)
 {
     if ((long)m.Msg == 78 && this.HeaderCheckBoxClick != null)
     {
         Structs.NMHEADER nMHEADER = (Structs.NMHEADER)Marshal.PtrToStructure(m.LParam, typeof(Structs.NMHEADER));
         if (nMHEADER.hdr.code == 4294966980u)
         {
             Structs.HDITEM hDITEM = default(Structs.HDITEM);
             hDITEM.mask = 4u;
             Structs.HDITEM *value = &hDITEM;
             User.SendMessage(nMHEADER.hdr.hwndFrom, 4619u, (IntPtr)nMHEADER.iItem, (IntPtr)(void *)value);
             hDITEM.fmt ^= 128;
             User.SendMessage(nMHEADER.hdr.hwndFrom, 4620u, (IntPtr)nMHEADER.iItem, (IntPtr)(void *)value);
             bool isChecked = (hDITEM.fmt & 0x80) != 0;
             this.HeaderCheckBoxClick(this, new HeaderColumnClickEventArgs(nMHEADER.iItem, isChecked));
             return;
         }
     }
     base.WndProc(ref m);
 }