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