Exemplo n.º 1
0
 public static unsafe void SetMask(IntPtr ptr, LVGF mask, bool value)
 {
     if (value)
     {
         void* voidPtr1 = (void*) ptr;
         voidPtr1->mask |= mask;
     }
     else
     {
         void* voidPtr2 = (void*) ptr;
         voidPtr2->mask &= ~mask;
     }
 }
Exemplo n.º 2
0
        private unsafe void ReloadListView()
        {
            ListViewGroup group = listView1.Groups[0];
            int           id    = (int)typeof(ListViewGroup).GetProperty("ID", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(group);

            IntPtr lParam = (IntPtr)id;
            LVGF   mask   = 0;

            mask |= LVGF.HEADER;
            mask |= LVGF.SUBTITLE;
            mask |= LVGF.FOOTER;
            mask |= LVGF.ALIGN;
            mask |= LVGF.DESCRIPTIONBOTTOM;
            mask |= LVGF.DESCRIPTIONTOP;
            mask |= LVGF.STATE;
            mask |= LVGF.TASK;
            mask |= LVGF.TITLEIMAGE;
            mask |= LVGF.EXTENDEDIMAGE;
            LVGS stateMask =
                LVGS.COLLAPSED |
                LVGS.COLLAPSIBLE |
                LVGS.NOHEADER |
                LVGS.SUBSETED |
                0;
            LVGS state = 0;

            if (collapsibleCheckBox.Checked)
            {
                state |= LVGS.COLLAPSIBLE;
            }
            if (collapsedCheckBox.Checked)
            {
                state |= LVGS.COLLAPSED;
            }
            if (!showHeaderCheckBox.Checked)
            {
                state |= LVGS.NOHEADER;
            }
            if (subsetTitleCheckBox.Checked)
            {
                state |= LVGS.SUBSETED;
            }
            var lvgroup = new LVGROUPW
            {
                cbSize         = (uint)sizeof(LVGROUPW),
                mask           = mask,
                iGroupId       = id,
                stateMask      = stateMask,
                state          = state,
                iTitleImage    = (int)titleImageIndexNumericUpDown.Value,
                iExtendedImage = (int)extendedImageIndexNumericUpDown.Value,
            };

            switch (headerAlignmentComboBox.SelectedIndex)
            {
            case 0:
                lvgroup.uAlign |= LVGA.HEADER_LEFT;
                break;

            case 1:
                lvgroup.uAlign |= LVGA.HEADER_CENTER;
                break;

            case 2:
                lvgroup.uAlign |= LVGA.HEADER_RIGHT;
                break;
            }

            switch (footerAlignmentComboBox.SelectedIndex)
            {
            case 0:
                lvgroup.uAlign |= LVGA.FOOTER_LEFT;
                break;

            case 1:
                lvgroup.uAlign |= LVGA.FOOTER_CENTER;
                break;

            case 2:
                lvgroup.uAlign |= LVGA.FOOTER_RIGHT;
                break;
            }

            fixed(char *pHeader = headerTextBox.Text)
            fixed(char *pFooter            = footerTextBox.Text)
            fixed(char *pDescriptionBottom = descriptionBottomTextBox.Text)
            fixed(char *pDescriptionTop    = descriptionTopTextBox.Text)
            fixed(char *pSubsetTitle       = subsetTitleTextBox.Text)
            fixed(char *pSubtitle          = subtitleTextBox.Text)
            fixed(char *pTask = taskTextBox.Text)
            {
                if (footerCheckBox.Checked && footerTextBox.Text.Length > 0)
                {
                    lvgroup.cchFooter = footerTextBox.Text.Length;
                    lvgroup.pszFooter = pFooter;
                }
                if (descriptionBottomCheckBox.Checked)
                {
                    lvgroup.cchDescriptionBottom = (uint)descriptionBottomTextBox.Text.Length;
                    lvgroup.pszDescriptionBottom = pDescriptionBottom;
                }
                if (descriptionTopCheckBox.Checked)
                {
                    lvgroup.cchDescriptionTop = (uint)descriptionTopTextBox.Text.Length;
                    lvgroup.pszDescriptionTop = pDescriptionTop;
                }
                if (subsetTitleCheckBox.Checked)
                {
                    lvgroup.cchSubsetTitle = (uint)subsetTitleTextBox.Text.Length;
                    lvgroup.pszSubsetTitle = pSubsetTitle;
                }
                if (subtitleCheckBox.Checked)
                {
                    lvgroup.cchSubsetTitle = (uint)subtitleTextBox.Text.Length;
                    lvgroup.pszSubtitle    = pSubtitle;
                }
                if (taskCheckBox.Checked && taskTextBox.Text.Length > 0)
                {
                    lvgroup.cchTask = (uint)taskTextBox.Text.Length;
                    lvgroup.pszTask = pTask;
                }

                lvgroup.pszHeader = pHeader;
                IntPtr result = User32.SendMessageW(listView1.Handle, (User32.WindowMessage)LVM.SETGROUPINFO, lParam, ref lvgroup);

                listView1.Invalidate(true);
            }
        }