Janela procedimento Superclassing

Superclassing é uma técnica que permite que um aplicativo criar uma Novo classe de janela com a funcionalidade básica do classe existente, além de aprimoramentos fornecidos pelo aplicativo. Uma superclasse é baseada em uma classe de janela existente, chamada de classe base. Com freqüência, a classe base é uma classe de janela global do sistema, como um controle editar, mas pode ser qualquer classe de janela.

Uma superclasse tem seu próprio procedimento de janela, chamou o procedimento de superclasse. O procedimento de superclasse pode levar três ações ao receber uma mensagem: ele pode passar a mensagem para o procedimento janela original, modificar a mensagem e passá-lo para o procedimento de janela original, ou processar a mensagem e não passá-lo para o procedimento de janela original. Se o procedimento de superclasse processa uma mensagem, ele pode fazer isso antes, depois, ou ambos antes e depois de passar a mensagem para o procedimento de janela original.

Ao contrário de um procedimento de subclasse, um procedimento de superclasse pode processar mensagens de criação de janela (WM_NCCREATE, WM_CREATEe assim por diante), mas ele também deve passá-los para the original procedimento janela de classe base para que o procedimento de janela de classe base pode realizar seu processo de inicialização.

A superclasse uma classe de janela, um aplicativo primeiro chama o GetClassInfo função para recuperar informações sobre a classe base. GetClassInfo preenche uma WNDCLASS estrutura com os valores a partir de WNDCLASS estrutura da classe base. Em seguida, o aplicativo copia seu próprio identificador de instância para o hInstance membro das WNDCLASS estrutura e copia o nome da superclasse para o lpszClassName membro. Se a classe base tiver um menu, o aplicativo deve fornecer um novo menu com os mesmos identificadores de menu e copie o nome do menu para o membro de lpszMenuName . Se o procedimento de superclasse processa a mensagem WM_COMMAND e não passá-lo para o procedimento janela da classe base, o menu não precisa ter identificadores correspondentes. GetClassInfo não retornar o lpszMenuName, lpszClassNameou hInstance membro das WNDCLASS estrutura.

Um aplicativo também deve definir o lpfnWndProc membro das WNDCLASS estrutura. O GetClassInfo função preenche esse membro com o endereço do procedimento de janela original da classe. O aplicativo deve salvar este endereço, para transmitir mensagens para o procedimento de janela original e, em seguida, copiar o endereço do procedimento de superclasse para o membro de lpfnWndProc . O pedido pode, se necessário, modifique qualquer outro membro das WNDCLASS estrutura. Depois que ele preenche a estrutura WNDCLASS , o aplicativo registra a superclasse, passando o endereço da estrutura para o RegisterClass função. Superclasse pode ser usada para criar janelas.

Porque superclassing registra uma Novo classe de janela, um aplicativo pode adicionar bytes extra classe e os bytes extra janela. A superclasse não deve usar o adicional bytes original para a classe base ou a janela pelas mesmas razões que uma subclasse de instância ou uma subclasse global não deve usá-los. Além disso, se o aplicativo adiciona bytes extras para a sua utilização para a classe ou a instância de janela, ele deve fazer referência o adicional bytes, relativo para o número de adicional bytes usado pela classe base original. Porque o número de bytes usado pela classe base pode variar de uma versão de classe base para o próximo, o deslocamento inicial para a superclasse bytes extras também podem variar de uma versão de classe base para a próxima.

Index