C++ MFC CEdit失去焦点处理程序
我正在使用文档/视图体系结构创建一个MFC程序。在视图中,我调用了一个cell类,该类扩展了CEdit以绘制一个文本框。这很好,但是,当我试图捕捉该文本框的失焦消息时,什么都没有发生。我试图覆盖预翻译的邮件,但没有成功 以下是CGridView.cpp类中的代码: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
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)
。