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

  • Are you truly leading your team or simply managing them? Organizations need leaders and your team needs someone to follow. With some ongoing development, you could become that leader. Learn the top leadership qualities that inspire others to want to follow you and the direction of your company.

  • The enterprise has experienced a data explosion over the past few years that has redefined the possible. In the HP eBook Big Data 20/20, HP experts explore what the future of Big Data and analytics means for that enterprise. The widely varied deluge of data in companies presents both challenges and opportunities to deliver greater value and gain competitive advantage.

Most Popular Programming Stories

More for Developers

RSS Feeds

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