CListBoxST v1.0

Sample Image

SoftechSoftware homepage
SoftechSoftware Email

Environment: VC++ 6.0, XP, Win2k, NT 4.0, Win9x/ME

Abstract

CListBoxST is a CListBox derived class that tries to reproduce the look and feel of the same control that appears under Windows XP when a CD without autorun.inf is inserted into the CD-Rom drive. Each list box item can be enabled or disabled, can have a icon on the left and its text can be multi-line. Even if almost the same visual effects can be obtained using a standard CListCtrl control, there are some differences that make CListBoxST better:

  • Easy to use
  • Standard CListBox methods
  • Disabled items
  • Multi-line text
  • Methods to move items up, down, at top, at bottom
  • Different hilight styles

How to integrate CListBoxST in your application

In your project include the following files:

  • ListBoxST.h
  • ListBoxST.cpp
With dialog editor create a standard list box called, for example, IDC_LBXITEMS. You need to set the following properties:

The "Notify" property is not mandatory but it will be required to catch messages from the list box, like for example, the Double-click event.

Then create a member variable for this list box:
CListBoxST m_lbxItems;

// Create a image list to hold icons
CImageList m_ImageList;
Now attach the list box to CListBoxST. For dialog-based applications, in your OnInitDialog:
// Call the base-class method
CDialog::OnInitDialog();

// Create the IDC_LBXITEMS list box
m_lbxItems.SubclassDlgItem(IDC_LBXITEMS, this);
Or in your DoDataExchange:
// Call the base method
CDialog::DoDataExchange(pDX);

// Create the IDC_LBXITEMS list box
DDX_Control(pDX, IDC_LBXITEMS, m_lbxItems);
To support icons, a image list must be associated to the control:
BOOL   bRetValue = FALSE;
HICON  hIcon = NULL;

// Create image list
bRetValue = m_ImageList.Create(32, 32,
                               ILC_COLOR32 | ILC_MASK,
                               5, 1);
ASSERT(bRetValue == TRUE);

// Add some icons
hIcon = AfxGetApp()->LoadIcon(IDI_SHELL32_203);
m_ImageList.Add(hIcon);
hIcon = AfxGetApp()->LoadIcon(IDI_SHELL32_141);
m_ImageList.Add(hIcon);

// Associate image list to list box
m_lbxItems.SetImageList(&m_ImageList);

// At this point the list box is ready to be used.
// Add some items
m_lbxItems.AddString(_T("First item"), 0);
m_lbxItems.AddString(_T("Second item\nThis is multi-line"), 1);

Class methods

AddString
Adds a string to the list box.

// Parameters:
//     [IN]   lpszItem
//            Points to the null-terminated string 
//            that is to be added.
//     [IN]   nImage
//            Image to be associated with the string.
//            Pass -1L to associate no image.
//
// Return value:
//     The zero-based index of the string in the list box.
//     The return value is LB_ERR if an error occurs; the 
//     return value is LB_ERRSPACE if insufficient space is
//     available to store the new string.
//
int AddString(LPCTSTR lpszItem, int nImage = -1L)
InsertString
Inserts a string at a specific location in the list box.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the position 
//            to insert the string.
//            If this parameter is -1, the string is added to 
//            the end of the list.
//     [IN]   lpszItem
//            Pointer to the null-terminated string that is
//            to be inserted.
//     [IN]   nImage
//            Image to be associated with the string.
//            Pass -1L to associate no image.
//
// Return value:
//     The zero-based index of the position at which the string
//     was inserted. The return value is LB_ERR if an error 
//     occurs; the return value is LB_ERRSPACE if insufficient
//     space is available to store the new string.
//
int InsertString(int nIndex, LPCTSTR lpszString, int nImage = -1L)
DeleteString
Deletes a string from the list box.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the string 
//            to be deleted.
//
// Return value:
//     A count of the strings remaining in the list box.
//     The return value is LB_ERR if nIndex specifies an 
//     index greater than the number of items in the list.
//
int DeleteString(int nIndex)
ReplaceString
Replaces a string at a specific location in the list box.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the position
//            to replace the string.
//     [IN]   lpszItem
//            Pointer to the null-terminated string that is 
//            to be replaced.
//     [IN]   nImage
//            Image to be associated with the string.
//            Pass -1L to associate no image.
//
// Return value:
//     The zero-based index of the position at which the
//     string was replaced. The return value is LB_ERR if
//     an error occurs; the return value is LB_ERRSPACE if
//     insufficient space is available to store the new string.
//
int ReplaceString(int nIndex, LPCTSTR lpszString, int nImage = -1L)
ResetContent
Clears all the entries from the list box.
void ResetContent()
SetImageList
Sets the image list to use in the list box.
// Parameters:
//     [IN]   pImageList
//            Pointer to an CImageList object containing the
//            image listto use in the list box. Pass NULL to 
//            remove any previous associated image list.
//
void SetImageList(CImageList* pImageList)
SetImage
Sets the image to use in a list box item.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the string.
//     [IN]   nImage
//            Specifies the zero-based index of the image
//            inside the imagelist to use.
//     [IN]   bRepaint
//            If TRUE the control will be repainted.
//
void SetImage(int nIndex, int nImage, BOOL bRepaint = TRUE)
GetImage
Returns the image index associated to a list box item.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the string.
//     [OUT]  lpnImage
//            Pointer to a int variable that will receive 
//            the index of the image inside the imagelist.
//            This variable will be set to -1L if no image
//            is associated.
//
void GetImage(int nIndex, LPINT lpnImage)
SetItemData
Sets the 32-bit value associated with the list box item.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the item.
//     [IN]   dwItemData
//            Specifies the value to be associated with the item.
//
// Return value:
//     LB_ERR if an error occurs.
//
int SetItemData(int nIndex, DWORD dwItemData)
GetItemData
Returns the 32-bit value associated with the list box item.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the item.
//
// Return value:
//     The 32-bit value associated with the item, or 
//     LB_ERR if an error occurs.
//
DWORD GetItemData(int nIndex)
SetItemDataPtr
Sets a pointer to a list box item.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the item.
//     [IN]   pData
//            Specifies the pointer to be associated with the item.
//
// Return value:
//     LB_ERR if an error occurs.
//
int SetItemDataPtr(int nIndex, void* pData)
GetItemDataPtr
Returns a pointer of a list box item.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the item.
//
// Return value:
//     Pointer associated with the item, or -1 if an error occurs.
//
void* GetItemDataPtr(int nIndex)
MoveUp
Moves a list box item up by one position.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the item.
//     [IN]   bSetCurSel
//            If TRUE the item will be hilighted
//
// Return value:
//      The zero-based index of the position at which 
//      the string was moved. The return value is LB_ERR
//      if an error occurs; the return value is LB_ERRSPACE
//      if insufficient space is available to store the string.
//
int MoveUp(int nIndex, BOOL bSetCurSel = TRUE)
MoveDown
Moves a list box item down by one position.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the item.
//     [IN]   bSetCurSel
//            If TRUE the item will be hilighted
//
// Return value:
//      The zero-based index of the position at which 
//      the string was moved. The return value is LB_ERR
//      if an error occurs; the return value is LB_ERRSPACE
//      if insufficient space is available to store the string.
//
int MoveDown(int nIndex, BOOL bSetCurSel = TRUE)
MoveTop
Moves a list box item to the top most position.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the item.
//     [IN]   bSetCurSel
//            If TRUE the item will be hilighted
//
// Return value:
//      The zero-based index of the position at which
//      the string was moved. The return value is LB_ERR
//      if an error occurs; the return value is LB_ERRSPACE
//      if insufficient space is available to store the string.
//
int MoveTop(int nIndex, BOOL bSetCurSel = TRUE)
MoveBottom
Moves a list box item to the bottom most position.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the item.
//     [IN]   bSetCurSel
//            If TRUE the item will be hilighted
//
// Return value:
//      The zero-based index of the position at which the string was moved.
//      The return value is LB_ERR if an error occurs; the return value 
//      is LB_ERRSPACE if insufficient space is available to store the string.
//
int MoveBottom(int nIndex, BOOL bSetCurSel = TRUE)
EnableItem
Enables or disables a list box item.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the item.
//     [IN]   bEnable
//            Specifies whether the given item is to be enabled 
//            or disabled.
//            If this parameter is TRUE, the item will be enabled.
//            If this parameter is FALSE, the item will be disabled.
//     [IN]   bRepaint
//            If TRUE the control will be repainted.
//
void EnableItem(int nIndex, BOOL bEnable = TRUE, BOOL bRepaint = TRUE)
IsItemEnabled
Specifies whether a list box item is enabled.
// Parameters:
//     [IN]   nIndex
//            Specifies the zero-based index of the item.
//
// Return value:
//      TRUE if the item is enabled; otherwise FALSE.
//
BOOL IsItemEnabled(int nIndex)
SetRowSelect
Sets how a selected list box item will be hilighted.
// Parameters:
//  [IN] byRowSelect
//       Selection type. Can be one of the following values:
//       ST_FULLROWSELECT   Hilight full list box item 
//                         (Default)
//       ST_FULLTEXTSELECT  Hilight half list box item 
//                          (Part containing text)
//       ST_TEXTSELECT      Hilight only list box text
//  [IN] bRepaint
//       If TRUE the control will be repainted.
//
void SetRowSelect(BYTE byRowSelect = ST_FULLROWSELECT,
                  BOOL bRepaint = TRUE)
GetVersionI
Returns the class version as a short value.
// Return value:
//     Class version. Divide by 10 to get actual version.
//
static short GetVersionI()
GetVersionC
Returns the class version as a string value.
// Return value:
//     Pointer to a null-terminated string containing
//     the class version.
//
static LPCTSTR GetVersionC()

Version History

  • Version 1.0 - March 13, 2002
    First release

Article History

Date Posted March 20, 2002 (v1.0)

Downloads

Download demo project - 137 Kb
Download source - 7 Kb