Como você programaticamente alterar a ordem de tabulação em um diálogo do Win32?
Pergunta
Muitas vezes o tempo que eu preciso para adicionar um controle a um diálogo depois do diálogo foi gerado através do modelo de diálogo e CreateDialogIndirect.Nestes casos, a ordem de tabulação é definido pelo modelo de diálogo e não há nenhuma maneira óbvia para alterar a ordem de tabulação, incluindo um recém-criado de controle.
Solução
Eu descobri recentemente que você pode usar SetWindowPos para fazer isso.Determinar que o controle após o qual você deseja inserir o novo controle na ordem de tabulação, em seguida, usar SetWindowPos como este:
SetWindowPos(hNewControl, hOldControl, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
Isso altera o z-ordem de controlos, que, por sua vez, estabelece a ordem de tabulação.
Outras dicas
Eu sei que esta é uma velha questão, mas aqui está como fazê-lo em tempo de compilação (o que é preferível, na maioria dos casos):http://msdn.microsoft.com/en-us/library/7039hzb0(v=vs 80).aspx
O meu método favorito:
- A partir do menu Exibir, escolha a Ordem de Tabulação.
- Escolha A Atribuir De Forma Interativa.
- Faça duplo clique em ordem de tabulação caixa ao lado do controle que você deseja ser o primeiro controle na ordem de tabulação.
- Clique na guia ordem de caixa para cada um dos outros controles.
- Clique em qualquer lugar no formulário para salvar suas alterações e sair da Ordem de Tabulação de modo, ou pressione ESC para sair Ordem de Tabulação no modo sem salvar as alterações.