⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inplaceedit.cpp

📁 一个非常好的WINCE界面
💻 CPP
字号:
//InPlaceEdit.cpp
#include "stdafx.h"
#include "InPlaceEdit.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define CTRL_C 0x3
#define CTRL_V 0x16
#define CTRL_X 0x18

/////////////////////////////////////////////////////////////////////////////
// CInPlaceEdit

CInPlaceEdit* CInPlaceEdit::m_pInPlaceEdit = NULL;  

CInPlaceEdit::CInPlaceEdit()
{
    m_iRowIndex= -1;
    m_iColumnIndex = -1;
    m_bESC = FALSE;
    m_strValidChars.Empty();
}

CInPlaceEdit::~CInPlaceEdit()
{
}

BEGIN_MESSAGE_MAP(CInPlaceEdit, CEdit)
    //{{AFX_MSG_MAP(CInPlaceEdit)
    ON_WM_KILLFOCUS()
    ON_WM_CHAR() 
    ON_WM_CREATE()
    //}}AFX_MSG_MAP
    // ON_MESSAGE(WM_PASTE, OnPaste)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CInPlaceEdit message handlers
/*
void CInPlaceEdit::OnPaste(WPARAM , LPARAM )
{
    if (m_strValidChars.IsEmpty())
    {
        return; 
    }

    CString strFromClipboard;

    // get the text from clipboard
    if (OpenClipboard()) {
        HANDLE l_hData = GetClipboardData(CF_TEXT);
        if (NULL == l_hData) {
            return;
        }

        char *l_pBuffer = (char*)GlobalLock(l_hData);
        if (NULL != l_pBuffer) {
            strFromClipboard = l_pBuffer;
        }

        GlobalUnlock(l_hData);
        CloseClipboard();
    }

    // Validate the characters before pasting 
    for (int iCounter_ = 0; iCounter_ < strFromClipboard.GetLength(); iCounter_++)
    {
        if (-1 == m_strValidChars.Find(strFromClipboard.GetAt(iCounter_)))
        {
            return;
        }
    }

    //let the individual control handle other processing
    CEdit::Default(); 
}
*/

void CInPlaceEdit::OnKillFocus(CWnd* pNewWnd) 
{
    CEdit::OnKillFocus(pNewWnd);

    // TODO: Add your message handler code here

    // Get the text in the edit ctrl
    CString strEdit;
    GetWindowText(strEdit);

    // if(strEdit.GetLength() == 1)
    //  strEdit = _T("0") + strEdit;

    // Send Notification to parent of edit ctrl
    LV_DISPINFO dispinfo;
    dispinfo.hdr.hwndFrom = GetParent()->m_hWnd;
    dispinfo.hdr.idFrom = GetDlgCtrlID();
    dispinfo.hdr.code = LVN_ENDLABELEDIT;

    dispinfo.item.mask = LVIF_TEXT;
    dispinfo.item.iItem = m_iRowIndex;
    dispinfo.item.iSubItem = m_iColumnIndex;
    dispinfo.item.pszText = m_bESC ? LPTSTR((LPCTSTR)m_strWindowText) : LPTSTR((LPCTSTR)strEdit);
    dispinfo.item.cchTextMax = m_bESC ? m_strWindowText.GetLength() : strEdit.GetLength();

    GetParent()->SendMessage(WM_NOTIFY, GetParent()->GetDlgCtrlID(), (LPARAM)&dispinfo);

    PostMessage(WM_CLOSE);
}

void CInPlaceEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    // TODO: Add your message handler code here and/or call default

    if ((m_strValidChars.IsEmpty()) || ((-1 != m_strValidChars.Find(static_cast<TCHAR> (nChar))) || 
        (nChar == VK_BACK) || (nChar == CTRL_C) || (nChar == CTRL_V) || (nChar == CTRL_X)))
    {
        CEdit::OnChar(nChar, nRepCnt, nFlags);
    }
    else
    {
        MessageBeep(MB_ICONEXCLAMATION);
        return;
    }
}

BOOL CInPlaceEdit::PreTranslateMessage(MSG* pMsg) 
{
    // TODO: Add your specialized code here and/or call the base class
    if (WM_KEYDOWN == pMsg->message && (VK_ESCAPE == pMsg->wParam || VK_RETURN == pMsg->wParam))
    {
        if (VK_ESCAPE == pMsg->wParam)
        {
            m_bESC = TRUE;
        }

        GetParent()->SetFocus();
        return TRUE;
    }

    return CEdit::PreTranslateMessage(pMsg);
}

int CInPlaceEdit::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
    if (CEdit::OnCreate(lpCreateStruct) == -1)
        return -1;

    // TODO: Add your specialized creation code here
    // Set the proper font
    CFont* pFont = GetParent()->GetFont();
    SetFont(pFont);

    ShowWindow(SW_SHOW);
    SetWindowText(m_strWindowText);
    SetSel(0, -1);
    SetFocus();


    return 0;
}

CInPlaceEdit* CInPlaceEdit::GetInstance()
{
    if(m_pInPlaceEdit == NULL)
    {
        m_pInPlaceEdit = new CInPlaceEdit;
    }
    return m_pInPlaceEdit;
}

void CInPlaceEdit::DeleteInstance()
{
    delete m_pInPlaceEdit;
    m_pInPlaceEdit = NULL;
}

BOOL CInPlaceEdit::ShowEditCtrl(DWORD dwStyle, const RECT &rCellRect, CWnd* pParentWnd, 
                                UINT uiResourceID, int iRowIndex, int iColumnIndex,
                                CString& strValidChars, CString& rstrCurSelection)
{
    m_iRowIndex = iRowIndex;
    m_iColumnIndex = iColumnIndex;
    m_strValidChars = strValidChars;
    m_strWindowText = rstrCurSelection;
    m_bESC = FALSE;

    if (NULL == m_pInPlaceEdit->m_hWnd) 
    {
        return m_pInPlaceEdit->Create(dwStyle, rCellRect, pParentWnd, uiResourceID); 
    } 

    return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -