Manipulando o botão Aplicar
As folhas de propriedades têm uma funcionalidade que as caixas de diálogo padrão não têm: elas permitem que o usuário aplique as alterações feitas antes de fechar a folha de propriedades. Isso é feito usando o botão Aplicar. Este artigo discute os métodos que você pode usar para implementar esse recurso corretamente.
As caixas de diálogo modais geralmente aplicam as configurações a um objeto externo quando o usuário clica em OK para fechar a caixa de diálogo. O mesmo vale para uma folha de propriedades: quando o usuário clica em OK, as novas configurações na folha de propriedades entram em vigor.
No entanto, talvez você queira permitir que o usuário salve as configurações sem precisar fechar a caixa de diálogo da folha de propriedades. Essa é a função do botão Aplicar. O botão Aplicar aplica as configurações atuais em todas as páginas de propriedades ao objeto externo, em vez de aplicar apenas as configurações atuais da página ativa no momento.
Por padrão, o botão Aplicar está sempre desabilitado. Você deve escrever código para habilitar o botão Aplicar nos horários apropriados, e deve escrever código para implementar o efeito de Aplicar, conforme explicado abaixo.
Se você não quiser oferecer a funcionalidade Aplicar ao usuário, não será necessário remover o botão Aplicar. Você pode deixá-lo desabilitado, assim como é comum entre os aplicativos que usam o suporte à folha de propriedades padrão disponível em versões futuras do Windows.
Para relatar uma página que está sendo modificada e habilitar o botão Aplicar, chame CPropertyPage::SetModified( TRUE )
. Se algum dos relatórios de páginas estiver sendo modificado, o botão Aplicar permanecerá habilitado, independentemente de a página ativa no momento ter sido modificada.
Você deve chamar CPropertyPage::SetModified sempre que o usuário alterar as configurações na página. Uma maneira de detectar quando um usuário altera uma configuração na página é implementar manipuladores de notificação de alteração para cada um dos controles na página de propriedades, como EN_CHANGE ou BN_CLICKED.
Para implementar o efeito do botão Aplicar, a folha de propriedades deve informar o proprietário, ou algum outro objeto externo no aplicativo, para aplicar as configurações atuais nas páginas de propriedades. Ao mesmo tempo, a folha de propriedades deve desabilitar o botão Aplicar chamando CPropertyPage::SetModified( FALSE )
para todas as páginas que aplicaram suas modificações ao objeto externo.
Para obter um exemplo desse processo, consulte o PROPDLG de exemplo geral do MFC.