Tengo el siguiente problema:
El caso es que tengo un cuadro de dialogo (CDlgProducto) que sirve para ingresar los datos de un producto como son Codigo, Nombre, Precio, etc.
Lo que quiero es ingresar el codigo en una caja de texto, luego pulsar la tecla Tab para pasar al siguiente control, en el momento que el Edit_Codigo pierde el foco, quiero verificar si dicho codigo ya fue ingresado anteriormente en la base de datos, para ya no seguir ingresando los demas datos del producto.
Lo que he intentado es lo siguiente:
Primero he creado una clase CEnterosEdit derivada de CEdit
Luego he definido el mensaje: #define WM_VERIFICAR (WM_USER + 100)
A la clase CEnterosEdit le adicione el procedimiento subclasificado OnKillFocus( )
- Código: Seleccionar todo
void CEnterosEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);
// TODO: Add your message handler code here
// Enviar el mensaje WM_VERIFICAR a la ventana padre
int nID_Ctrl = GetDlgCtrlID();
if(nID_Ctrl == pNewWnd->GetDlgCtrlID() - 1)
{
// PostMessage coloca el mensaje y retorna sin esperar a procesarlo
GetParent()->PostMessage(WM_VERIFICAR, GetDlgCtrlID());
}
}
En el mapa de mensajes de la clase CDlgProducto he adicionado:
ON_MESSAGE(WM_VERIFICAR, VerificarCodigo)
Y el manipulador del mensaje
- Código: Seleccionar todo
long CDlgAdProdCata::VerificarCodigo(UINT WParam, long LParam)
{
// Aqui pongo el codigo que verifica si el Codigo ya fue ingresado
if(WParam == IDC_EDT_COD_PROD)
{
UpdateData();
//…..
}
Return 0;
}
El Algoritmo funciona bien cuando estando enfocado el Edit_Codigo se pasa a cualquier control del cuadro de dialogo. Pero falla cuando estando enfocado el Edit_Codigo se pasa a otra aplicación.
Lo que quiero saber es si el puntero pNewWnd de OnKillFocus trae alguna información que indique que se trata de una ventana de otra aplicación. O en todo caso alguna forma de poder resolver dicho problema.
Agradesco desde ya sus respuestas.
Atentamente Johnny







