[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