IE4 Extended Styles in a List Control

Thursday Aug 6th 1998 by Garth Tolmie
Share:

IE4 Extended Styles in a List Control

If you Ever wanted to do a full row select, be able to drag a whole column to another position, draw a grid and do some other interesting things to your CListCtrl derived class. Well now you can by setting the extended styles associated with the CListCtrl. This article will give the various flags, their uses, the applicable COMCTL32.DLL version and some code snippets used in a CListView derived class, which as you know has a CListCtrl item buried in it.

Depending on which version of the common controls DLL you have, there are extended styles which can be invoked to support a wide and interesting range of functions. You can download a free restributable version of the latest common controls DLL from Microsoft, complete with its own installer. (See www.CodeGuru.com home page for details).

Here's a description of the various extended styles available.

LVS_EX_CHECKBOXES Version 4.70. Enables check boxes for items in a list view control. Effectively, when this style is set, the control will create and set a state image list using DrawFrameControl. Check boxes are visible and functional with all list view modes. The state of the check box for a given item is obtained using the ListView_GetCheckState macro.

LVS_EX_FLATSB Version 4.71. Enables flat scroll bars in the list view. If you need more control over the appearance of the list view's scroll bars, you should manipulate the list view's scroll bars directly using the Flat Scroll Bar APIs.

LVS_EX_FULLROWSELECT Version 4.70. When an item is selected, the item and all its subitems are highlighted. This style is available only in conjunction with the LVS_REPORT style.

LVS_EX_GRIDLINES Version 4.70. Displays gridlines around items and subitems.This style is available only in conjunction with the LVS_REPORT style.

LVS_EX_HEADERDRAGDROP Version 4.70. Enables drag-and-drop reordering of columns in a list view control. This style is only available to list view controls that use the LVS_REPORT style.

LVS_EX_INFOTIP Version 4.71. The list view control sends an LVN_GETINFOTIP notification message to the parent window before displaying an item's tooltip.This style is only available to list view controls that use the LVS_ICONstyle.

LVS_EX_MULTIWORKAREAS Version 4.71. If the list view control has the LVS_AUTOARRANGE style, the control will not autoarrange its icons until one or more work areas are defined (see LVM_SETWORKAREAS). To be effective, this style must be set before any work areas are defined and any items have been added to the control.

LVS_EX_ONECLICKACTIVATE Version 4.70. The list view control sends an LVN_ITEMACTIVATE notification message to the parent window when the user clicks an item. This style also enables hot tracking in the list view control. Hot tracking means that when the cursor moves over an item, it is highlighted but not selected. LVS_EX_REGIONAL Version 4.71. The list view will create a region that includes only the item icons and text and set its window region to that using SetWindowRgn. This will exclude any area that is not part of an item from the window region. This style is only available to list view controls that use the LVS_ICON style.

LVS_EX_SUBITEMIMAGES Version 4.70. Allows images to be displayed for subitems. This style is available only in conjunction with the LVS_REPORT style.

LVS_EX_TRACKSELECT Version 4.70. Enables hover selection in a list view control. Hover selection (also called track selection) means that an item is automatically selected when the cursor remains over the item for a certain period of time. The delay can be changed from the default system setting with the LVM_SETHOVERTIME message. This style applies to all styles of list view control.

LVS_EX_TWOCLICKACTIVATE Version 4.70. The list view control sends an LVN_ITEMACTIVATE notification message to the parent window when the user double-clicks an item. This style also enables hot tracking in the list view control. Hot tracking means that when the cursor moves over an item, it is highlighted but not selected.

LVS_EX_UNDERLINECOLD Version 4.71. Causes nonhot items to be displayed with underlined text. This style is ignored if LVS_EX_ONECLICKACTIVATE is not set.

LVS_EX_UNDERLINEHOT Version 4.71. Causes hot items to be displayed with underlined text. This style is ignored if LVS_EX_ONECLICKACTIVATE or LVS_EX_TWOCLICKACTIVATE is not set.

After the creation of your view, derived from CListView, you may set the extended style of the list control using the following code. As there is currently no CListCtrl::SetExtendedStyle() you have to do a little bit of work until this method has been added.

There are two macros which support extended styles and are implemented as such:

void CDerivedListView::OnInitialUpdate()
{    
   .
   .
   .
  //The macro ListView_GetExtendedListViewStyle takes a reference to the
  // CListCtrl and returns the current extended style (a DWORD)

  DWORD dwStyle = ListView_GetExtendedListViewStyle(GetListCtrl());

 //Add the full row select and grid line style to the existing extended styles
  dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;

  //The macro ListView_SetExtendedListViewStyle takes a reference to the
  // CListCtrl and the extended style you would like to implement

  ListView_SetExtendedListViewStyle( GetListCtrl(),dwStyle);
}

Or you could send messages to the control like this:

void CDerivedListView::OnInitialUpdate()
{    
   .
   .
   .
  DWORD dwStyle;
  dwStyle = GetListCtrl().SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0 ,0);
  dwStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES ;
  GetListCtrl().SendMessage( LVM_SETEXTENDEDLISTVIEWSTYLE, 0,dwStyle );
}

But a more conventional approach would probably be:

void CDerivedListView::OnInitialUpdate()
{    
   .
   .
   .
  AddExStyle(LVS_EX_FULLROWSELECT);
  AddExStyle(LVS_EX_GRIDLINES);
}

void CDerivedListView::AddExStyle(DWORD dwNewStyle)
{
    CListCtrl& m_listctrl = GetListCtrl();
    DWORD dwStyle = m_listctrl.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE,0,0);
    dwStyle |= dwNewStyle;
    m_listctrl.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
}

Share:
Home
Mobile Site | Full Site
Copyright 2017 © QuinStreet Inc. All Rights Reserved