MFC CEdit perd le focus manager

Je crée un programme MFC en utilisant l’architecture document / vue. Dans la vue, j’appelle une classe de cellule qui étend CEdit pour dessiner une zone de texte. Cela fonctionne bien, cependant, lorsque j’essaie d’attraper un message de perte de focus pour cette zone de texte, rien ne se produit. J’ai essayé d’écraser PreTranslateMessage mais cela n’a pas fonctionné.

Voici le code dans la classe CGridView.cpp:

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

le 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); CSsortingng 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); } 

Lors du débogage, onkillfocus et pretranslatemessage ne sont pas appelés du tout.

Merci,

Vous devez gérer le code de notification EN_KILLFOCUS dans la fenêtre parente. Vous ne devriez pas avoir à tirer de CEdit pour le faire.

Code de notification EN_KILLFOCUS

METTRE À JOUR:

La fenêtre parent du contrôle de saisie reçoit ce code de notification par le biais d’un message WM_COMMAND.

wParam: Le LOWORD contient l’identifiant du contrôle de saisie . HIWORD spécifie le code de notification.

lParam: – Handle au contrôle d’édition.