Navigating through CListCtrl's rows with the arrow and tab keys

WEBINAR: On-demand webcast

How to Boost Database Development Productivity on Linux, Docker, and Kubernetes with Microsoft SQL Server 2017 REGISTER >

Environment: Demo was created with Visual C++ 6.0 .

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.

Download demo - 19 KB

Date Last Updated: April 24, 1999



Comments

  • Different Way

    Posted by Legacy on 06/27/2001 12:00am

    Originally posted by: KalliMan

    Hi, 
    
    Do You Know A Different Way To Do That, I Mean, Without
    "SetColumnOrderArray()"?

    Reply
  • Multiple Column?

    Posted by Legacy on 05/21/1999 12:00am

    Originally posted by: Christian

    Do you know how navigate on more that 1 column?
    (right<->left)
    When i press TAB i want go edit the right item and inverse with Shift-TAB.
    thanks

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Microsoft Azure® is a leading choice for businesses looking to take advantage of the cloud. Azure is particularly appealing to businesses that have already invested in Microsoft on-premises and are now considering running these applications and other workloads in the cloud. To understand how to make this move to Azure, many businesses are turning to managed service providers (MSPs) with specific Azure expertise. Read this white paper to learn the eight key areas to focus on when considering an MSP for an …

  • This case study will highlight the opportunity for mobile and cloud technologies in the Public Sector—specifically for state, local and federal government agencies -where secure mobile application access can offer key productivity gains

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date