프로그래밍/VC++

Dialog Based의 트리컨트롤에서 Enter키를 눌러서 라벨내용 바꾸는 경우

panpro 2007. 8. 16. 20:34
BOOL CProjectLeft::PreTranslateMessage(MSG* pMsg)

{

    // 윈도우로 전달되는 메세지를 해당 윈도우가 처리하기 전에 가로채서

    // 특정 작업을 수행해야 할 필요성이 있을 때 재정의하여 사용한다.

    switch(pMsg->message)

    {

        case WM_KEYDOWN:

            switch(int(pMsg->wParam))

            {

                case VK_F5:

                    // 다시 보여주기

                    return TRUE;

                    break;

                case VK_F2:

                    HTREEITEM hSel = m_tree1.GetSelectedItem();

                     m_tree1.SetFocus();

                    m_tree1.ModifyStyle(0, TVS_EDITLABELS);

                    CEdit* pEdit = m_tree1.EditLabel(hSel);

                    ASSERT(pEdit != NULL);

                    return true;

                    break;

                case VK_RETURN:

                    if(m_tree1.GetEditControl() != NULL)

                    {

                        m_tree1.GetEditControl()->SendMessage(WM_KEYDOWN, pMsg->wParam, pMsg->lParam);

                        return true;

                    }

                    break;

                case VK_ESCAPE:

                    if(m_tree1.GetEditControl() != NULL)

                    {

                        CString szItemText = m_tree1.GetItemText(m_tree1.GetSelectedItem());

                        m_tree1.GetEditControl()->SetWindowText(szItemText);

                        m_tree1.GetEditControl()->SendMessage(WM_KEYDOWN, pMsg->wParam, pMsg->lParam);

                        return true;

                    }

                    break;

                default:

                    break;

            }

            break;

        default:

            break;

    }


    return CFormView::PreTranslateMessage(pMsg);

}