C++ MFC CEdit失去焦点处理程序

C++ MFC CEdit失去焦点处理程序,c++,mfc,cedit,C++,Mfc,Cedit,我正在使用文档/视图体系结构创建一个MFC程序。在视图中,我调用了一个cell类,该类扩展了CEdit以绘制一个文本框。这很好,但是,当我试图捕捉该文本框的失焦消息时,什么都没有发生。我试图覆盖预翻译的邮件,但没有成功 以下是CGridView.cpp类中的代码: void CGridView::OnInsertText() { CWnd* pParentWnd = this; CellText* pEdit = new CellText(&grid, pParentWn

我正在使用文档/视图体系结构创建一个MFC程序。在视图中,我调用了一个cell类,该类扩展了CEdit以绘制一个文本框。这很好,但是,当我试图捕捉该文本框的失焦消息时,什么都没有发生。我试图覆盖预翻译的邮件,但没有成功

以下是CGridView.cpp类中的代码:

void CGridView::OnInsertText()
{
    CWnd* pParentWnd = this;
    CellText* pEdit = new CellText(&grid, pParentWnd);

    Invalidate();   
    UpdateWindow();
}
CellText.cpp:

CellText::CellText(Grid *pgrid, CWnd* pParentWnd)
{

    int *pcoordinates = pgrid->GetSelectedCellCoodrinates();
    cedit.Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(*pcoordinates+10, *(pcoordinates+1)+10, *(pcoordinates+2)-10, *(pcoordinates+3)-10), pParentWnd, 1);

    cell = pgrid->GetSelectedCell();
    pgrid->SetCellType(cell, "text");

    grid = pgrid;
}


BEGIN_MESSAGE_MAP(CellText, CEdit)
    ON_WM_KILLFOCUS()
    ON_WM_KEYDOWN()
END_MESSAGE_MAP()



// CellText message handlers

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

    CString str;
    GetWindowTextW(str);
    grid->SetCellText(cell, str);

    cedit.DestroyWindow(); 
}

BOOL CellText::PreTranslateMessage(MSG* pMsg) 
{
    if(pMsg->message==WM_KEYDOWN)
    {
        if(pMsg->wParam==VK_UP)
        {

        }
    }   

    return CWnd::PreTranslateMessage(pMsg);
}
调试时,根本不调用onkillfocus和pretranslatemessage


谢谢,

您必须处理父窗口中的
EN\u KILLFOCUS
通知代码。你不应该从CEdit派生来做这件事

更新:

编辑控件的父窗口接收此通知代码 通过WM_命令消息

wParam:LOWORD包含编辑控件的标识符。这个 HIWORD指定通知代码

lParam:-编辑控件的句柄


您必须在父窗口中处理
EN_KILLFOCUS
通知代码。你不应该从CEdit派生来做这件事

更新:

编辑控件的父窗口接收此通知代码 通过WM_命令消息

wParam:LOWORD包含编辑控件的标识符。这个 HIWORD指定通知代码

lParam:-编辑控件的句柄


如果我创建了几个文本框,句柄中的任何代码都会应用于相应的文本框,还是应用于所有文本框(在本例中,我希望删除该文本框)。谢谢,@mgalal:您可以获得失去焦点的唯一编辑框的标识符。我的答案更新了。非常感谢,真的帮助了我。如果您有特定的编辑控件要处理,父类还可以在其
消息映射中添加
ON_EN_KILLFOCUS(id,memberFunc)
。如果我创建了几个文本框,句柄中的任何代码会应用于相应的文本框还是所有文本框(在本例中,我想删除该框)。谢谢,@mgalal:您可以获取失去焦点的唯一编辑框的标识符。我的答案已更新。非常感谢,确实帮助了我。如果您有特定的编辑控件要处理,父类还可以在其
消息映射中添加
(id,memberFunc)