Ir ao conteúdo

Posts recomendados

Postado
case WM_KEYDOWN:
{
    if (wParam == VK_RETURN)
    {
        SetFocus(hwnd);
        PostMessage(hwnd, WM_COMMAND, MAKEWPARAM(ID_BUTTON, BN_CLICKED), (LPARAM)but);
    }
}
break;

but é o hwnd do botão de pesquisa.

Achei que o problema era o foco, já que tem que clicar na editbox pra digitar antes de teclar Enter, mas mesmo assim não funciona.

Só estou com problema nessa parte mesmo, se não clico na editbox e teclo Enter, a pesquisa funciona.

image.png.64de0d9e0556fb16871f4ec218e33b8f.png

  • Curtir 1
Postado

Acredito que quando você clica com o mouse no botão, ele executa uma função, correto? Porque você não chama diretamente essa função que está atrelada ao botão?

 

 

case WM_KEYDOWN:
{
    if (wParam == VK_RETURN)
    {
       //chama a função/código de pesquisa		
    }
}
break;

 

 

  • Curtir 1
  • Obrigado 1
Postado

@Flávio Pedroza Quando clico no botão, a mensagem WM_COMMAND é enviada

case WM_KEYDOWN:
{
    if (wParam == VK_RETURN)
    {
        SetFocus(hwnd);
        PostMessage(hwnd, WM_COMMAND, MAKEWPARAM(ID_BUTTON, BN_CLICKED), (LPARAM)but);
    }
}
break;

case WM_COMMAND:
{
    if (HIWORD(wParam) == BN_CLICKED)
    {
        // Obtem string da editbox e pesquisa
    }
}
break;

Queria uma forma de enviar WM_COMMAND com a notificação BN_CLICKED mesmo quando o foco está na editbox. O código de obter a string e pesquisar é um pouco extenso, existe a possibilidade de criar uma função pra isso mas seria a opção B.

  • Curtir 1
Postado
2 minutos atrás, Pedro Da Silva disse:

Queria uma forma de enviar WM_COMMAND com a notificação BN_CLICKED mesmo quando o foco está na editbox. O código de obter a string e pesquisar é um pouco extenso, existe a possibilidade de criar uma função pra isso mas seria a opção B.

Sim, transforme em uma função. Na verdade é mais eficiente assim, acredito.

 

  • Curtir 1
Postado

@Flávio Pedroza Na realidade não funciona de maneira alguma, tenho que descobrir alguma forma de mudar o foco, mas nem sei se o problema é realmente esse.

Se teclo Enter sem clicar na editbox, ele pesquisa normalmente, no caso aparece uma mensagem de erro porque não tinha nada na editbox, isso já era previsto.

Se clico na editbox e teclo Enter, só ouço o som de erro do windows.

Postado

Eu não sei como você criou o "edit control", mas para capturar a tecla enter você tem que fazer uma subclasse dele, alterando o procedimento padrão:

WNDPROC oldEditProc; //antigo procedimento

LRESULT CALLBACK newEditProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam) //novo procedimento
{
   switch (msg)
   {
    case WM_KEYDOWN:
         switch (wParam)
         {
          case VK_RETURN:
          	  //chame a funcao de pesquisa
              break;  
         }
    default:
         return CallWindowProc(oldEditProc, wnd, msg, wParam, lParam); 
   }
   return 0;
}

//Coloque o código abaixo logo apos criar o edit control - hEditBox e o handle do edit control que criou

oldEditProc = (WNDPROC)SetWindowLongPtr(hEditBox, GWLP_WNDPROC, (LONG_PTR)newEditProc); 

 

  • Confuso 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...