Navigating through CListCtrl's rows with the arrow and tab keys
Posted
by Michael Stradley
on April 24th, 1999
I needed to be able to edit some fields from a database, and wanted to have a label, the field name, followed by an edit box that the user could enter the field data in. The only problem was that there could be anywhere from 1 to 50 fields. So I used a CListCtrl with two columns to represent the field name and the field value. There are many articles here that show how to edit subitems, but I only needed to be able to edit one item on each row, so I just rearranged the columns to have the editable item be the second cloumn. The following code is all that is necessary to rearrange the columns.
int aiCol[2] = { 1, 0 };
m_List.SetColumnOrderArray (2, aiCol);
I also needed the user to be able to navigate through the fields with the tab and arrow
keys. This was a pain because the CListCtrl creates its own edit box for editing items,
and it was stealing all the key strokes that I wanted. I did not want to have to draw
and manage my own edit box, so I just created my own CEdit based class and subclassed
the edit box created by the CListCtrl. To subclass the edit control with your own edit
control, m_Edit, all you need is:
Inside a message handler for the LVN_BEGINLABELEDIT message, you need to add the following code: HWND hWnd = (HWND)SendMessage (LVM_GETEDITCONTROL); ASSERT (hWnd != NULL); if (m_Edit.m_hWnd != 0) m_Edit.DestroyWindow (); VERIFY (m_Edit.SubclassWindow (hWnd));
Inside a message handler for the LVN_ENDLABELEDIT message, you need to add the following code: if (m_Edit.m_hWnd) VERIFY (m_Edit.UnsubclassWindow () != NULL);You can then add a message handler in your m_Edit class to catch the KeyDown event and then begin editing the next item.
The example program is simply a dialog box with an CListCtrl drawn on it. Ten fields are added in the OnInitDialog function to illustrate this functionality.
Date Last Updated: April 24, 1999

Comments
Different Way
Posted by Legacy on 06/27/2001 12:00amOriginally posted by: KalliMan
ReplyMultiple Column?
Posted by Legacy on 05/21/1999 12:00amOriginally posted by: Christian
Do you know how navigate on more that 1 column?
Reply(right<->left)
When i press TAB i want go edit the right item and inverse with Shift-TAB.
thanks