Caixas de diálogo personalizadas

Um aplicativo pode criar caixas de diálogo personalizadas usando uma classe janela application-defined para as caixas de diálogo em vez de usar a classe de caixa de diálogo predefinidas. Aplicativos normalmente usam esse método quando uma caixa de diálogo é sua janela principal, mas também é útil para a criação de caixas de diálogo modal e sem janela restrita para aplicativos que têm sobreposição de janelas padrão.

A classe janela application-defined permite que o aplicativo definir um procedimento de janela para a caixa de diálogo caixa e processo mensagens antes de enviá-los para o procedimento caixa de diálogo. Ele também permite que o aplicativo definir um ícone de classe, um pincel segundo plano classe e um menu de classe para a caixa de diálogo. O aplicativo deve registrar a classe janela antes de tentar criar uma caixa de diálogo e deve fornecer o modelo de caixa de diálogo com o valor do átomo ou o nome da classe janela.

Muitos aplicativos criam uma Novo classe de caixa de diálogo, primeiro recuperar as informações de classe para a classe de caixa de diálogo predefinidas e passá-la para o GetClassInfo função, que preenche um WNDCLASS estrutura com as informações. O aplicativo modifica Membros individuais da estrutura, tais como o nome da classe, pincel, ícone e, em seguida, registra a nova classe usando o RegisterClass função. Se um aplicativo preenche a estrutura WNDCLASS por conta própria, ele deve definido o cbWndExtra membro como o DLGWINDOWEXTRA, que é o número de adicional bytes, que o sistema exige para cada caixa de diálogo. Se um aplicativo também usa bytes extras para cada caixa de diálogo, eles devem ser além de bytes extras exigidas pelo sistema.

O procedimento janela para a caixa de diálogo Personalizar tem os mesmos requisitos e parâmetros como qualquer outro procedimento de janela. Ao contrário de outros procedimentos de janela, no entanto, o procedimento de janela para esta caixa de diálogo deve chamar o DefDlgProc função instead of o DefWindowProc função para quaisquer mensagens não processo. DefDlgProc realiza a mesma mensagem de padrão de processamento como o procedimento de janela para a caixa de diálogo predefinidas, que inclui o procedimento de caixa de diálogo de chamada.

Um aplicativo também pode criar caixas de diálogo personalizadas por subclasses o procedimento de janela da caixa de diálogo predefinidas. O SetWindowLong função permite que um aplicativo defina o endereço do procedimento de janela para uma janela específica. O aplicativo pode também tentar a subclasse usando a função SetClassLong , mas fazendo assim afeta todas as caixas de diálogo no sistema, não apenas aqueles que pertencem ao aplicativo.

Aplicativos que criar caixas de diálogo personalizadas, por vezes, fornecem uma interface de teclado alternativo para as caixas de diálogo. Para caixas de diálogo sem janela restrita, isso pode significar o aplicativo não chama o IsDialogMessage função e em vez disso processa todos os entrada do teclado no procedimento de janela Personalizar. Em tais casos, o aplicativo pode usar a mensagem WM_NEXTDLGCTL para minimizar o código necessário para mover o foco de entrada de um controle para outro. Esta mensagem, quando passada para DefDlgProc, move o foco de entrada para um Controlarar especificado e atualiza a aparência dos controles, como mover a borda do botão de envio padrão ou definir um botão de opção automática.