Add Undo,Cut,Paste and Copy to the EditCtrl in the ListCtrl and TreeCtrl

This code shows how to Enable Ctrl Z, Ctrl V, Ctrl X and Ctrl C hot Keys for Cut,Paste and Copy in the EditCtrl that appears in the ListCtrl. Even the Ctrl + Insert and Shift + Insert work for this Code.

This is a slight modification to the Article written by Zafir Anjum.

#define VK_C        67
#define VK_V        86
#define VK_X        88
#define VK_Z        90

BOOL CMyListView::PreTranslateMessage(MSG* pMsg)
{
    // If edit control is visible in tree view control, sending a
    // WM_KEYDOWN message to the edit control will dismiss the edit
    // control.  When ENTER key was sent to the edit control, the parent
    // window of the tree view control is responsible for updating the
    // item's label in TVN_ENDLABELEDIT notification code.
    if ( pMsg->message == WM_KEYDOWN )
    {
        CListCtrl& oListctrl = GetListCtrl( );
        CEdit* edit = oListctrl.GetEditControl();
        if (edit)
        {
            if( GetKeyState( VK_CONTROL )
            {
                if( pMsg->wParam == VK_C )
                {
                    edit->Copy();
                    return TRUE;
                }
                if(  pMsg->wParam == VK_V )
                {
                    edit->Paste();
                    return TRUE;
                }
                if(  pMsg->wParam == VK_X )
                {
                    edit->Cut();
                    return TRUE;
                }
                if(  pMsg->wParam == VK_Z )
                {
                    edit->Undo();
                    return TRUE;
                }
            }
            if( pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE || 
                pMsg->wParam == VK_CONTROL || pMsg->wParam == VK_INSERT || 
                pMsg->wParam == VK_SHIFT )
            {
                edit->SendMessage(WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
                return TRUE;
            }
        }
    }
    return CListView::PreTranslateMessage(pMsg);
}

Add this Function as a protected Member function to your ListView or ListCtrl header file.

    virtual BOOL PreTranslateMessage(MSG* pMsg);

Map functions for the Notification Messages LVN_BEGINLABELEDIT and LVN_ENDLABELEDIT as described in Zafir Anjum's Article. I have added this below for your convenience.
void CMyListView::OnBeginLabelEdit( NMHDR* /*pNMHDR*, LRESULT* pResult)
{
    // This is the Limit the size of the Intem Text to 127
    CListCtrl& oListctrl = GetListCtrl( );
    oListctrl.GetEditControl()->LimitText( 127 );
    *pResult = 0;
}

void CMyListView::OnEndLabelEdit( NMHDR * pNMHDR, LRESULT *  pResult )
{
    *pResult = TRUE;
}

Add the Declarations in the CMyListCtrl.h file. Similar Procedure will work for the TreeCtrls also.

I would like to thank Codeguru.com and its team for Publishing this article on their site. Please do post me any modification that will improve the above code.

Download demo project - 20 KB



Comments

  • There are no comments yet. Be the first to comment!

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

Top White Papers and Webcasts

  • Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …

  • With the average hard drive now averaging one terabyte in size, the fallout from the explosion of user-created data has become an overwhelming volume of potential evidence that law-enforcement and corporate investigators spend countless hours examining. Join Us and SANS' Rob Lee for our 45-minute webinar, A Triage and Collection Strategy for Time-Sensitive Investigations, will demonstrate how to: Identify the folders and files that often contain key insights Reduce the time spent sifting through content by …

Most Popular Programming Stories

More for Developers

RSS Feeds