[C con Clase] Procesar Msj de Ctrl Edit, Combo, etc.
Adolfo Cárdenas
adocardenas en gmail.com
Lun Jun 9 19:52:35 CEST 2008
2008/6/6 Fernando <profacua en yahoo.com.mx>:
> gracias, sabes estoy usando Dev-C++ y ya lo intenté con los mensajes q me dices, pero aún no pasa nada, parte del código del Proc de Dlg es el siguiente:
> ....
> case WM_COMMAND:
> switch (LOWORD(wParam))
> {
> case IDE_NTA_NOMBRE: //DESDE AQUI PRETENDO LANZAR OTRO DLG
> if( (HIWORD(wParam)==VK_RETURN) && (HIWORD(wParam)==WM_KEYDOWN) )
> DialogBoxParam(hInstance, "DLG_CLIENTES", hDlg, ProcClientes, (LPARAM)&stDatosCte);
> break;
> .... otros case´s
> IDE_NTA_NOMBRE es el nombre el ctrl EDIT
> ¿Me faltará declarar algo adicional para que se procesen dichos mensajes?
> GRACIAS...
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
Hola tengo el mismo problema,
Como emergencia uso la funcion GetAsyncKeyState(VK_RETURN); en el
bucle de mensajes que se le envia a la ventana para detectar si se
presiona el ENTER:
//Uso la variable retsoltada para indicar al programa si ya //se
solto el enter.
static int retsoltada;
while(TRUE == GetMessage(&mensaje, NULL, 0, 0))
{
if(GetAsyncKeyState(VK_RETURN) && 0x1000) SendMessage(hwnd,
WM_KEYDOWN, VK_RETURN, 0);
else retsoltada = 1;
if(GetAsyncKeyState(VK_TAB) && 0x1000) SendMessage(hwnd,
WM_KEYDOWN, VK_TAB, 0);
else tabsoltada = 1;
if(GetAsyncKeyState(VK_ESCAPE) && 0x1000) SendMessage(hwnd,
WM_KEYDOWN, VK_ESCAPE, 0);
else
{
escsoltada = 1;
if(!IsDialogMessage(hwnd, &mensaje))
{
TranslateMessage(&mensaje);
DispatchMessage(&mensaje);
}
}
}
Luego proceso los mensajes en la funcion de la ventana
case WM_KEYDOWN:
tecla = (int)wParam;
switch(tecla)
{
case VK_ESCAPE:
if(escsoltada == 1)
if(MessageBox(hwnd, "¿Salir?", "BUSCADOR", MB_YESNO |
MB_SYSTEMMODAL) == IDYES)
SendMessage(hwnd, WM_DESTROY, 0, 0);
escsoltada = 0;
break;
case VK_RETURN: //Buscar.
if((GetFocus() == hESearch || GetFocus() == hEContent) && retsoltada)
SendMessage(hwnd, WM_COMMAND, CM_SEARCH, 0);
retsoltada = 0;
break;
case VK_TAB:
if(GetFocus() == hEContent)
{
if(tabsoltada)
{
if(shiftpress) SetFocus(hESearch); else
SetFocus(hBFile);
}
}
tabsoltada = 0;
break;
........................
Más información sobre la lista de distribución Cconclase