private static bool GetState(ListViewGroup group, LVGS state) { bool flag; int groupId = GetGroupId(group); if (groupId < 0) { return false; } IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(Microsoft.Win32.LVGROUP))); try { Microsoft.Win32.LVGROUP.SetMask(ptr, LVGF.LVGF_NONE | LVGF.LVGF_GROUPID | LVGF.LVGF_STATE, true); Microsoft.Win32.LVGROUP.SetGroupId(ptr, groupId); Microsoft.Win32.LVGROUP.SetStateMask(ptr, state, true); if (((int) Windows.SendMessage(group.ListView.Handle, 0x1095, (IntPtr) groupId, ptr)) >= 0) { return ((Microsoft.Win32.LVGROUP.GetState(ptr) & state) > LVGS.LVGS_NORMAL); } flag = false; } finally { Marshal.FreeHGlobal(ptr); } return flag; }
public static unsafe void SetStateMask(IntPtr ptr, LVGS mask, bool value) { if (value) { void* voidPtr1 = (void*) ptr; voidPtr1->stateMask |= mask; } else { void* voidPtr2 = (void*) ptr; voidPtr2->stateMask &= ~mask; } }
public unsafe void SetGroupState(ListViewGroup group, LVGS state) { int groupId = GetGroupId(group); if (groupId < 0) { groupId = Groups.IndexOf(group) - _minGroupInsertionIndex; } var lvgroup = new LVGROUPW(); lvgroup.cbSize = (uint)sizeof(LVGROUPW); lvgroup.state = state; lvgroup.mask = LVGF.STATE; lvgroup.iGroupId = groupId; NativeMethods.SendMessageW(Handle, LVM_SETGROUPINFO, (IntPtr)groupId, ref lvgroup); }
private static void SetState(ListViewGroup group, LVGS state, bool value) { int groupId = GetGroupId(group); if (groupId >= 0) { Microsoft.Win32.LVGROUP lvgroup = new Microsoft.Win32.LVGROUP { cbSize = Marshal.SizeOf(typeof(Microsoft.Win32.LVGROUP)), mask = LVGF.LVGF_NONE | LVGF.LVGF_GROUPID | LVGF.LVGF_STATE, iGroupId = groupId, stateMask = state }; if (value) { lvgroup.state = state; } GCHandle handle = GCHandle.Alloc(lvgroup, GCHandleType.Pinned); try { Windows.SendMessage(group.ListView.Handle, 0x1093, (IntPtr) groupId, handle.AddrOfPinnedObject()); } finally { handle.Free(); } } }
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); } }